航空成像像移补偿的并行计算

2009-10-10 作者: 李仕 张葆 孙辉 来源: 万方数据

关键字: 航空成像 并行计算 维纳滤波 图像恢复 图像处理器 

基于图像处理器(GPU)平台提出了堆纳并行滤被算法.解决了航空成像的像移实时补偿问题。介绍了原有像移补偿算法及其PC运行平台的不足,立足于现有图像处理器通用计算技术对原有像移补偿算法做多线程并行计算的改进。针对图像处理器件的硬件并行架构,优化设置算法多线程访问,提高了各个线程的访问速度.该环节的改进甚至能将算法效率提升到原来的3倍。借助图像处理器的并行运算优势.单帧1024 x 1024灰度图像的处理时间只需要8ms,整个算法的运行速度达到原先的20倍,能够完全满足高分辨率航拍视频图像的像移模糊实时恢复的需求。

  1、引言

  当载机的飞行高度与飞行速度比值达到一定条件,航空成像的像移现象将严重地影响成像的质量。经过各种算法的验证及对比评测,作者在前期工作中使用加窗维纳滤波实现了对由像移造成的运动模糊的精确恢复。针对算法运算速度的实时性问题,先后使用一维维纳滤波及实数傅里叶变换;等方法对算法进行加速优化,并取得了一定成果。为进一步提高图像恢复算法的运算效率,希望能对算法进行并行运算的改进。而当前CPU的浮点处理性能及CPU的数据带宽在一定程度上限制了算法并行处理的效果,常见的嵌人式并行处理方案也过于复杂,性能效果及成本考量均不十分理想。

  美国Sandia国家实验室的Kenneth More land研究员及新墨西哥州大学的Edward Angel教授在2003年SIGGRAPH会议上发表了关于在GPU上运行FFT算法的文章, GPU厂商nVidia公司也在2007年Super Computing大会上宣称:GPU的计算性能及数据带宽大约是同期CPU的10倍。基于以上因素,本文对GPU编程进行了深人研究,将原先基于CPU的像移模糊图像恢复算法移植到GPU平台上,充分运用GPU高数据带宽的并行运算能力,实现图像恢复的并行处理。

  2、像移模糊恢复算法

  图像像移模糊恢复的理论基础是基于信息光学的传递函数理论所导出的数学模型:模糊图像g(x,y)由清晰图像f(x,y)与点扩散函数h(x,y)相卷积再加上噪声n(x,y)所得,用公式表述如下:

  在已知点扩散函数h(x,y)的情况下,要通过数学方法从式(1)中求得清晰图像f(x,y).经实验证明行之有效的方法是将图像的空域信息转换到频域,然后通过维纳滤波算法(见式(2))进行求解.

    从式(2)注意到频谱F(u,v),G(u,v),H(u,v)在进行维纳滤波时的各对应点的下标是相同的,且各频谱数组的相邻数据在滤波的时候是相互独立的。假设一个线程在一个周期内可以完成一个式(2)所示的频域数据计算,且并行的线程有M×N个,则在一个周期内可以同时完成M×N个式(2)所示的频域数据计算。

  3、维纳滤波并行算法

  3.1 GPUPU与FFT算法

  GPU用于通用计算(General Purpose GPU),一般是使用多纹理技术,集合纹理环境参数和纹理函数采买现的,它的工作模式如图1所示。数据以图像的形式经由图形API函数传人GPU的纹理区,GPU通过渲染一个适当的几何图形来触发GPU的数据并行运算,并将渲染(运算)结果返回纹理区。第n次输出的数据作为第n+1次的输人源,数据在纹理区内被不停地渲染,直到预设运算结束。

  采用分级蝶形算法实现的FFT算法,正适合用GPU这种流式着色运算来实现。以二维FFT为例:先画与屏幕平行的M ×N四边形,让光栅处理器为四边形内的每个像素创建一个片段(fragment),由此执行fragment程序。fragment程序以单指令多数据流( SIMD)方式工作,由此实现FFT的并行处理。每执行一次fragment程序,即完成一次FFT算法中的行(或列)蝶形迭代。当完成Iog2M+log2N次行(列)蝶形迭代后,存储区内的数据就是所求的二维FFT运算结果。详细算法流程参见图2。

  3. 2维纳并行滤波算法

  将维纳滤波算法向并行运算改进的重点是怎样进行图像数据在各线程间的分配,更好地协调数据线程的运行,发挥多线程并行运算的优势。nVidia公司在2007年推出的GPU开发包Compute Unified Device Architecture(CUDA)对数据的处理方式类似图1所示的流式运算,它使用“线程”并行的概念实现全体像素点的同一处理。CUDA的优势是能够清楚知道数据执行的先后顺序,并能对运算数据进行控制,降低维纳并行滤波算法开发的难度。

  维纳并行滤波算法如图3所示,首先使用图2所示的FFT算法将模糊图像g(x,y)及点扩散函数h(x,y)转换成频域的G(u,v)及H(u,v),然后根据数据存储的线性排列对G(u,v)及H(u,v)上的数据进行划分,不同的线程读取不同频域的数据,由每个线程独立地对线程内的数据进行式(2)的滤波。当所有线程上的数据滤波完毕后,再通过FFT的逆运算将数据F(u,v)由频域图像转换成空间图像,实现图像的还原。

    CUDA允许上千个线程在GPU上同时运行,为了让维纳滤波算法在GPU上充分地并行起来,理论上应该在GPU上开尽可能多的线程。但实际上随着线程数目的增加,每个线程所拥有的寄存器数目将减少,可能导致并行效率的下降。为更好地管理线程,本文将线程进行分块管理,并对应频域数据的划分,让每个维纳滤波线程都处理数据块上一定量的数据(如图4所示)。




<<首页 <上一页  1  2  3  下一页>  末页>>  
责任编辑:熊东旭