基于cuda和平稳小波变换的sar图像变化检测方法
【技术领域】
[0001] 本发明属于SAR图像变换检测技术领域,特别涉及一种基于CUDA和平稳小波变换 的SAR图像变化检测方法,涉及合成孔径雷达(SAR)图像的处理,可用于实时性的SAR图像 的变化检测。
【背景技术】
[0002] 在SAR图像变化检测中,由于SAR图像存在着相干斑噪声,因此需要进行斑点噪声 抑制,一般的变换检测方法都是通过图像滤波的方法抑制斑点噪声,小波变换本身是一种 卷积运算,包含滤波处理过程,但是离散小波变换会引起图像缩放,对SAR图像变化检测结 果造成不良影响;CUDA平台作为NVIDIAGPU的并行平台,可以很好的利用GPU的多核特性, 获得好的并行性,提高图像处理的速度。
【发明内容】
[0003] 本发明的目的在于针对目前SAR图像变化检测实时性差,不能很好的满足工程实 际需要的这一缺点,提出一种基于CUDA和平稳小波变换的SAR图像变化检测方法,可以提 高信号处理的速度,实现工程上的实时检测功能。
[0004] 为实现上述技术目的,本发明采用如下技术方案予以实现。
[0005] 基于CUDA和平稳小波变换的SAR图像变化检测方法包括以下步骤:
[0006] 步骤1,获取第一 SAR图像数据和第二SAR图像数据,将第一 SAR图像数据和第二 SAR图像数据传送到GPU端;在GPU端,将获取的每个SAR图像数据转化为对应的GRAY图 像数据;
[0007] 步骤2,在GPU端,计算步骤1得出的两幅GRAY图像数据的比值差异图像Y ;
[0008] 步骤3,在GPU端,通过对比值差异图像Y进行二维小波变换,实现比值差异图像Y 的多尺度分解,得到除第1尺度外的各尺度低频分量;
[0009] 步骤4,在GPU端,对除第1尺度外的各尺度低频分量进行贝叶斯阈值分割,得到第 2尺度低频分量的变化分量至第S尺度低频分量的变化分量,其中,S表示步骤3中多尺度 分解时的尺度数目;
[0010] 步骤5,在GPU端,对第2尺度低频分量的变化分量至第S尺度低频分量的变化分 量进行尺度间数据融合,得到变化检测的图像数据;
[0011] 步骤6,将步骤5得到的变化检测的图像数据传递到CPU端。
[0012] 本发明的有益效果为:本发明应用在SAR图像的实时变化检测中,不仅可以对变 化检测进行准确的定位,同时还能抑制乘性斑点噪声的干扰,使得基于平稳小波域和贝叶 斯阈值的SAR图像变化检测应用与工程实践成为可能。
[0013] 本发明由于利用了 GPU的多核特性,能够同时处理多个数据(能够同时处理的数 据量受所用GPU的核心数,程序结构的配置,图像的大小三方面限制);对于相应数据映射 到线程,采取按实际物理空间映射的方式,原理简单,容易理解;对于数据的处理,充分利用 了分配的显存空间,减少显存空间的分配,减少了空间的浪费,增大了所能处理的最大图像 的尺寸;由于GPU高精度的浮点数处理能力,保证了足够的处理精度。
【附图说明】
[0014] 图1为本发明的基于CUDA和平稳小波变换的SAR图像变化检测方法的流程框图;
[0015] 图2a为仿真实验中第一 SAR图像数据的灰度图;
[0016] 图2b为仿真实验中第二SAR图像数据的灰度图
[0017] 图3为仿真实验中应用本发明得出的变化检测的图像数据的示意图。
【具体实施方式】
[0018] 下面结合附图对本发明作进一步说明:
[0019] 参照图1,为本发明的基于CUDA和平稳小波变换的SAR图像变化检测方法的流程 框图。该基于平稳小波变换的SAR图像变换检测方法包括以下步骤:
[0020] 步骤1,获取第一 SAR图像数据和第二SAR图像数据,将第一 SAR图像数据和第二 SAR图像数据传送到GPU端;在GPU端,将获取的每个SAR图像数据转化为对应的GRAY图 像数据,得到两幅GRAY图像数据。
[0021] 其具体步骤为:
[0022] 获取第一 SAR图像数据和第二SAR图像数据,第一 SAR图像数据和第二SAR图像 数据为需要进行SAR图像变化检测的原始SAR图像数据。利用CPU将第一 SAR图像数据和 第二SAR图像数据分别读取到内存。将第一 SAR图像数据和第二SAR图像数据传送到GPU 端。
[0023] 优选地,在将SAR图像数据传送到GPU端前,还可以根据小波变换对SAR图像数据 的要求,对每个SAR图像数据的尺寸进行调整。即当任一个SAR图像数据对应的一维尺寸 (图像的长或宽)为奇数个像素点时,通过删掉边缘一行或一列的像素点,使该SAR图像数 据对应的一维尺寸(图像的长或宽)变为偶数个像素点,如果任一个SAR图像数据对应的 一维尺寸(图像的长或宽)为偶数个像素点,则不对该SAR图像数据的尺寸进行调整。在 对SAR图像数据的尺寸进行调整之后,将调整后的SAR图像数据传送到GPU端。
[0024] 当GPU端获取两个SAR图像数据之后,即可对这两个SAR图像数据进行进一步处 理。本发明实施例中,如果GPU端获取的任一个SAR图像数据为GRAY图像数据(灰度图像 数据),则直接跳至步骤2,如果GPU端获取的任一个SAR图像数据为RGB图像数据,可以采 用BGR形式处理,但是数据结构比较复杂,会影响处理所需时间,此时需要先将RGB图像数 据转化为GRAY图像数据,然后跳至步骤2。
[0025] 下面说明GPU端将将RGB图像数据转化为GRAY图像数据的具体过程。
[0026] 利用GPU将RGB图像数据的每个像素点的R值、G值、B值分别存储到显存中,这 时就可以利用GPU的线程计算RGB图像数据的每个像素点的灰度值,从而将RGB图像数据 转化为GRAY图像数据。计算RGB图像数据的任一个像素点的灰度值的计算公式为:Y = 0. 299*R+0. 587*G+0. 114祁,其中,Y表示转化生成的GRAY图像数据的对应像素点的灰度 值,R表示RGB图像数据的对应像素点的R值,G表示RGB图像数据的对应像素点的G值,B 表示RGB图像数据的对应像素点的B值。
[0027] 在利用GPU的线程计算RGB图像数据的每个像素点的灰度值之前,需要设置每个 线程网格grid中线程块的个数以及每个线程快中线程的个数。由于在GPU中32个线程为 一个warp,每个warp中的线程具有相同的执行步骤(进行相同的运算),所以将每个线程 块中线程的个数(即每个线程块的大小)设为32的整数倍。经过实验测定,理想选择为:将 每个线程块中线程的个数(即每个线程块的大小)设为128。本发明实施例中,将每个线程 网格grid中线程块的个数(每个线程网格grid的大小)设为<(Height*Width+127)/128>, 其中,〈?>表示向上取整或向下取整。Height表示GPU端获取的每个SAR图像数据的高, Width表示GPU端获取的每个SAR图像数据的宽。可以看出,计算RGB图像数据的每个像素 点的灰度值时所需的线程数最少为Height*Width (此时Height*Width刚好为128的整数 倍),最多为Height*Width+127(此时Height*Width比128的倍数刚好多1),所以GPU中 这样的线程结构即有足够的线程处理数据,并且浪费的线程数很少。
[0028] 由于GRAY图是char型数据,存储结构与float型数据不同,所以另外在GPU端分 配大小为Height*Width*size(char)的连续显存来存储GRAY图,其中size(char)代表每 一个char型数据所占用的存储空间,因为GRAY图图像数据不需要改变,所以采用常量存储 器,这能够获得更好的访问速度,然后将RGB图所占有显存释放。
[0029] 步骤2,在GPU端,通过计算得出两幅GRAY图像数据的比值差异图像Y。
[0030] 其具体步骤为:
[0031] GPU端获取两幅GRAY图像数据之后,需要得到两幅GRAY图像数据的差异图像。 目前的差异图像多采用差值图像、比值图像以及相应的对数差值和比值图像等形式,本发 明实施例中,通过两幅GRAY图像数据的对应像素点的灰度值进行相除取商,得到比值差异 图像Y(比值差异图像Y同样为灰度图像),差异图像Y中第i行第j列的像素点的灰度值 y(i,j)为:y(i,j) = xji, j)/x2(i, j),其中,1彡i彡I,1彡j彡J,I表示GPU端获取的每 幅GRAY图像数据的像素点的行数,J表示GPU端获取的每幅GRAY图像数据的像素点的列 数。 Xl (i,j)表示GPU端获取的第一幅GRAY图像数据中第i行第j列的像素点的灰度值, x2(i,j)表示GPU端获取的第二幅GRAY图像数据中第i行第j列的像素点的灰度值,X 1 = {Xl(i,j),1彡i彡I,1彡j彡J}和X2