APP下载

基于CUDA的遥感图像快速超分辨率重建算法研究

2014-04-14

火控雷达技术 2014年4期
关键词:低分辨率线程插值

陈 昕 胡 杰 李 映

(西北工业大学 西安 710129)

0 引言

图像超分辨率重建技术的基本思想是采用信号处理的方法,在改善图像质量的同时,重建成像系统截止频率之外的信息,从而在不改变硬件设备的前提下,获取高于成像系统空间分辨率的图像。如图1所示,由于成像系统中存在不同的降质过程[1],理想的高分辨率图像x在成像过程中会受到形变、模糊(包括光学、传感器和帧内运动模糊)、抽样和噪声等因素的影响,造成图像质量的下降。实际应用中,对同一场景的多次成像会得到k帧低分辨率图像:

式中,M(k)为第k帧低分辨率图像成像过程中由运动引起的形变矩阵;B(k)为点扩散函数或衍射极限引起的模糊矩阵;D为下采样矩阵,反映了成像系统对原始高分辨率场景的下采样过程;n(k)为噪声,通常被认为是加性高斯白噪声。

从图1 可以看出,图像的超分辨率重建过程就是根据获取的一帧或多帧低分辨率图像y(k{)} 重建理想的高分辨率图像x的过程,即在对成像系统通带内获取的图像低频信息进行复原的基础上,恢复其截止频率以上的高频信息的过程。

图1 图像获取过程示意图

由于在频域中很难有效表达图像中目标的运动信息,近些年大部分研究工作都集中在空域法。其中主要包括反向迭代投影法(IBP,Iterative Back Projection)[2],凸集投影法(POCS,Projection Onto Convex Sets)[3],最大后验概率估计法(MAP,Maximum A Posteriori)[4]和一些滤波方法,相比传统的插值方法,能够更好的重建图像的高频信息(如边缘,结构信息等),获得更好的视觉效果。在稀疏表示框架下基于字典学习的图像超分辨率重建算法[5-6]提出了一种更加新颖的思路,从信号、图像底层的表示模型出发,讨论高、低分辨率图像之间的关系,进而确定高、低分辨率图像之间的映射关系以及相应的约束,该类方法获得了高质量的重建结果。然而由于字典学习、稀疏表示等过程具有较高的计算复杂度,很难直接应用在实际中。在保证高质量的图像超分辨率重建效果前提下,获得接近或达到工业级(25 帧每秒)的处理速度,一直是图像/视频超分辨率重建领域的一大难题,但同时也是一个具有重大研究和实际意义的研究方向。2007年6月NVIDIA 公司推出了统一设备计算架构(CUDA,Compute Unified Device Architecture)。CUDA 是一种将GPU 作为数据并行计算设备的软硬件体系,被广泛应用于天文计算、图像处理、音视频编解码等领域,获得了几倍、几十倍,乃至上百倍的加速比。CUDA 为加速图像/视频处理提供了一个很好的平台,使得图像实时/快速超分辨率重建成为可能。文章重新设计并实现了Non-local IBP[7]算法,实现了基于CUDA 的遥感图像快速超分辨率重建。

1 Non-local IBP 算法

Non-local IBP[7]算法的主要思想是利用图像含有非局部冗余信息的特点来改善超分辨率重建图像的质量,并且通过结合IBP[2]来减小重建图像的误差。如图2所示,大多数自然图像含有许多重复的结构。这些重复的结构,即非局部冗余信息对于求解图像处理问题方面的逆问题都有很大的辅助作用。算法流程如图3所示。

其中:

图2 图像中重复的结构

图3 Non-local IBP 算法流程

其中‖·‖1是L1范数,sum_pixel 是方形邻域中像素点的个数。如果图像块之间的距离d(i,j)比预设的阈值小,说明两个图像块是相似的,并把像素y(i,j)归于集合S(i0,j0)。S(i0,j0)中包含以及和其相似的像素。在文章的实验部分中,只选择保存7 个最小的MAD 值所对应的像素点y(i,j)。同时,记录下和y(i,j)坐标之差,即vector_x= i0-i,vector_y= j0-j。尽管块匹配处理可以在整个图像上进行,但是计算量过大。因此,在实验中,我们把搜索限定在一个相对较大(21×21)的窗口中。

b.图像重建误差:

Il是低分辨率图像;Ih是高分辨率图像;D是下采样矩阵;* 是卷积算子;G是点扩散方程(PSF)[3],通常是一个高斯核;是图像重建误差。

c.利用运动矢量进行图像融合:第tth次迭代时计算图像的重建误差,用重建误差来更新:

其中F(·)是一个bicubic 插值算子,p是一个向后投影核来控制收敛的速度,对于高分辨率像素的更新,用运动矢量估计得到的7 个低分辨率像素进行更新。

2 Non -local IBP 算法在CUDA 上的实现

CUDA 程序的执行包含两部分,一部分是在CPU 上串行执行的主机(Host)代码,另一部分是在GPU 上并行执行的设备(Device)代码。运行在GPU 上的函数称为核函数(Kernel),而运行在CPU上的串行代码主要完成Kernel 启动之前的数据准备和设备初始化工作,以及在Kernel 之间进行的一些串行运算。CUDA 程序一般包括以下过程:

在CPU 上初始化数据;

将数据传输给GPU;

调用Kernel 进行并行计算;

将结果数据传回CPU。

Kernel 以线程网格(Grid)的形式组织,每个线程网格包含若干个线程块(Block),而每个线程块包含若干个线程(Thread),如图4所示。实质上,Kernel 是以Block 为单位执行的,CUDA 引入Grid 只是用来表示一系列可以被并行执行的Block 的集合。不同Block 之间可以并行执行[8],但无法进行通信,也没有执行顺序;同一Block 内的线程不仅能够并行执行,而且能够通过共享存储器(shared memory)和_syncthreads()函数相互通信。在Kernel 函数启动之前需要确定Grid 和Block 的维度。CUDA 提供了dim3 类型(基于uint3 定义的矢量类型,由3 个unsigned int 组成的结构体)的内建变量threadIDx 和blockIDx。这样,就可以使用一维、二维或三维的索引来标识线程,构成一维、二维或三维的线程块。

如图3所示,Non-local IBP 算法主要由bicubic 插值,运动矢量估计,高斯处理,图像差值和图像融合这5 个步骤构成,对应到CUDA 架构下相应的核函数依次为bicubic Kernel,运动矢量估计Kernel[9],高斯模糊Kernel,图像差值Kernel 和图像融合Kernel 这5 个Kernel 函数。在核函数被调用前,必须配置核函数的执行参数。例如,对于352×288的低分辨率遥感图像进行放大因子为2 的超分辨率重建,bicubic Kernel 核函数用来对遥感图像并行地进行双三次插值。线程块Block 的大小blockSize 可取(blockSize.x= 16,blockSize.y= 16),则线程网格Grid 的大小gridSize 为(gridSize.x= 352/block-Size.x,gridSize.y= 288/blockSize.y)。bicubic Kernel 的配置为bicubic Kernel<<<gridSize,blockSize>>>,一个线程处理图像的一个像素点。由于GPU实际上是以线程束(Warp)为单位来调度线程执行计算的,因此通常设定M为线程束大小(即32)的倍数,以更加方便、有效地对线程进行管理。CUDA程序执行如图5所示,首先将图像数据读入主机端内存,再将数据从内存传送到设备端显存,然后设备端的核函数,即bicubic Kernel,运动矢量估计Kernel,高斯模糊Kernel,图像差值Kernel 和图像融合Kernel 依次对显存数据做并行处理,最后将得到的超分辨率重建的图像数据从设备端显存传送回主机端内存。

图4 线程层次结构

3 实验结果分析

本实验实现了基于CUDA 的Non-local IBP 算法,对真实遥感图像进行了尺度大小为2 的超分辨率重建,并与用传统bicubic 插值算法得到的结果进行了对比。如图6、图7 和图8 三种状态所示,本文提出的算法重建得到的超分辨率图像的细节更丰富,对比度更高,边缘信息更加清晰,图像的结构特征基本保持完整。

图5 CUDA 程序执行

表1 是Non-local IBP 算法在CPU 和GPU 两种环境下的仿真实现的速度对比。如表1所示,相较于CPU 的遥感图像超分辨率重建速度,GPU 的处理速度有了质的提升,实现了对遥感图像的快速超分辨率重建。

表2 是Non-local IBP 和bicubic 两种算法得到的遥感图像超分辨率重建质量的定量评价。BRISQUE[10](Blind/Referenceless Image Spatial Quality Evaluator,盲图像空间质量评估)的值越小(最小值为0,最大值为100),说明重建图像的质量越好。由图6,图7,图8,表1,表2 可以看出,基于CUDA 实现的超分辨率重建算法不仅满足了快速处理的要求,相比bicubic 插值得到的重建图像,质量要高出很多,增加了图像的对比度,边缘保持得很清晰,人工痕迹很少。

图6 遥感图像超分辨率重建对比

图7 遥感图像超分辨率重建对比

图8 遥感图像超分辨率重建对比

表1 GPU 和CPU 实现Non-local 算法的速度对比(单位:帧/秒)

表2 Non-local IBP 和bicubic 算法超分辨率重建图像的BRISQUE

4 结束语

文章基于Non-local IBP 算法,在CUDA 架构下实现了遥感图像的快速超分辨率重建算法,合理利用了Non-local 特性在图像处理中对描述图像结构特征的优势,并能同时包含全局和局部结构特征信息,使得Non-local IBP 超分辨率重建算法得到的图像细节更丰富,对比度更高,边缘更加清晰;并且充分地利用GPU 超强的并行计算能力,使得超分辨率重建算法的速率得到了质的提高。

[1]Park S C,Parkm K,Kangm G.Super-resolution image reconstruction:A technical review[J].IEEE Signal Processing Magazine,2003,20(3):21-36.

[2]S.Dai,M.Han,Y.Wu,and Y.Gong.Bilateral back projection for single image super resolution[C].In Proc.Int.Conf.on Multimedia and Expo,2007,1039-1042.

[3]H.Stark,P.Oskoui.High resolution image recovery from image-plane arrays,using convex projections[J].J.Opt.Soc.Am.A,1989,6:1715-1726.

[4]M.Elad,A.Feuer.Restoration of a single superresolution image from several blurred,noisy and undersampled measured images[J].IEEE Transaction on Image Processing,1997,6(12):1646-1658.

[5]Jianchao Yang,John Wright,Thomas Huang,and Yi Ma.Image super-resolution as sparse representation of raw image patches [C].In Proceedings of IEEE Computer Society Conference on Computer Vision and Pattern Recognition,2008,1-8.

[6]Jianchao Yang,John Wright,Thomas Huang,and Yi Ma.Image super-resolution via sparse representation[J].IEEE Transactions on Image Processing,2010,19(11):2861-2873.

[7]Dong W,Zhang D,Shi G,et al.Nonlocal back-projection for adaptive image enlargement[C].Image Processing(ICIP),2009 16thIEEE International Conference on.IEEE,2009,349-352.

[8]张舒,褚艳利,赵开勇,张玉勃.GPU 高性能计算之CUDA [M].北京:中国水利出版社,2009.

[9]E.Monteiro,B.Vizzotto,C.Diniz,B.Zatt,and S.Bampi.Applying CUDA architecture to accelerate full search block matching algorithm for high performance motion estimation in video encoding[C].2011 23rd International Symposium on Computer Architecture and High Performance Computing(SBAC-PAD),2011,128-135.

[10]A.Mittal,A.K.Moorthy,and A.C.Bovik.No-reference image quality assessment in the spatial domain [J].IEEE Trans.Image Process.,2012,21(12):4695-4708.

猜你喜欢

低分辨率线程插值
红外热成像中低分辨率行人小目标检测方法
滑动式Lagrange与Chebyshev插值方法对BDS精密星历内插及其精度分析
实时操作系统mbedOS 互斥量调度机制剖析
基于边缘学习的低分辨率图像识别算法
基于国产化环境的线程池模型研究与实现
基于pade逼近的重心有理混合插值新方法
树木的低分辨率三维模型资源创建实践
混合重叠网格插值方法的改进及应用
基于混合并行的Kriging插值算法研究
计算机中的多线程问题