由于图像在通信过程的底层预处理中数据量很大,要求处理速度快,但运算结果相对比较简单,以FPGA为主要处理芯片的图像处理系统正好善于对图像进行预处理,因此本文使用FPGA作为主要的处理芯片,采用硬件并行算法以及流水线结构来完成图像的中值滤波。
1 图像中值滤波算法及其优化
1.1中值滤波算法
中值滤波与均值滤波器以及其它线性滤波方法相比它能够很好地滤除脉冲噪声,又能保护目标图像边缘。它是一种邻域运算,计算过程是把邻域中的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值,其实现方法如图1所示。
标准的中值滤波器都是由一个奇数大小尺寸的滑动方形窗组成,如3x3窗或5x5窗等。本文采用3x3窗,该窗沿着图像数据的行方向逐像素滑动,在每一次滑动期间内,方形窗中的所有像素按照灰度值进行排序,将该组数据的中值作为输出,替代原来窗函数的中心位置像素的灰度值。MATLAB提供了一些用以加速对矩阵操作的功能,它的图像处理算法直接调用库函数就能实现。利用C语言编程实现排序滤波算法时,算法的主要工作是实现一个9元素的排序就能够从中得到中值,可以使用的排序算法有插入排序,归并排序和快速排序。对于3x3窗口的中值滤波的C语言实现可以采用排序滤波的结果,从排序后的序列中取出灰度排序为中间值的元素。对一组九个数据进行排序采用归并排序需要25次比较,插入排序和冒泡排序最差需要36次比较,但是对于中值滤波我们唯一关心的是中值,而整个序列是否有序并不重要,即对一个3x3窗来说找到排序为5 的数值就可以。
1.2算法优化
基于上述考虑,本文采用归并排序的分组思想来设计优化算法。归并排序算法首先将输入序列分作若干个组,进行组内排序,对这些已排序的有序子序列再次分组,同组内的有序序列归并为一个有序序列,重复这个过程直到所有组合并为一个有序序列时算法结束。归并排序中分组处理的思想特别适合FPGA 的并行操作特性www.cechina.cn,有利于充分挖掘FPGA的并行能力,从而最大限度的提高系统性能。对于一个3x3窗采用严格意义上的归并 算法得到中值需要11个时钟周期。而此时所有数据均已排序完成,由于中值滤波只需找到中间值即可,因此对该算法我们又进行改进。
首先对窗口中每一行的3个像素进行排序,分别得到3个有序序列,然后将3组有序序列按其中值进行排序。对于最终所得的窗口如图2所示,在最小值这组数据中,1和2不可能是中值,因为窗13中至少有5个数据比它们大;在最大值这组数据中,8和9不可能是中值,因为窗口中至少有5个数据比他们小;在中值这组数据中。 不能确定有4个以上的数据比它们大或者小。这样3、4、5、6、7这5个数中的中间值就是最后窗口的中值。5个元素求中值需要6次比较,但是4,5CONTROL ENGINEERING China版权所有,6已经有序,故省了2次,可知最终需要16次比较就可以找到9个元紊的中值。
2算法硬件实现
2.1算法实现
对于一个3x3窗13的中值滤波实际上就是求窗口中9个元素的中间值,算法对9个元素取中间元素可以证明最少需要16次比较www.cechina.cn,这在上一节已经给出了证明。利用这个算法实现一个中值滤波电路时需要一个三输入的排序比较器用来对三个元素进行排序。实现三输入比较排序器的核心代码用Verilog代码实现可描述如下:
电路设计中采用Xilinx公司Spartan一3系列型号为 xc3s400的FPGA器件作为处理器,这一器件提供四十万系统门,工作电压为3.3V,有208个引脚,288KB块存储器和4个时钟管理器。在xc3s400下,采用50M晶振,经过功能仿真,该三 输入比较器可以在一个时钟周期内完成。有了三输入比较排序 器。上一节中所设计的算法就可以用硬件电路实现了。首先将方形窗输出的9个数分三组CONTROL ENGINEERING China版权所有,对三组数据利用三输入比较排序器排序。然后以每组的中值为比较关键词,对三个组进行排序,得到一个新的窗口;如图2的编号方式,剩下的任务就是求窗口编号为3、4、5、6、7的像素的中值。对3号和4号比较取大值H,6 号和7号比较取小值L。最后将H、L和5号使用三输入比较排序器求得中值即为9个元素的中值。不难证明该算法的硬件实现需要5个时钟周期,在同一时钟周期的条件下比双向冒泡算法要快一倍还多。
2.2算法应用
论文采用以上算法实现了对128x128点像素图像的FP— GA硬件中值滤波处理,图3中(1)是原始图像,(2)是加入椒盐噪声的图像,(3)是经FPGA处理后的图像。可以看出用FPGA进行中值滤波其效果不错基本能够去除椒盐噪声对图片的影响,充分证明了FPGA中值滤波优化算法的正确性。
3结束语
现对软硬件图像处理性能进行比较:处理同一副128X128 的图片,硬件上采用XC3S400芯片www.cechina.cn,主频率为50MHz;软件上在intel奔四处理器上,时钟频率为2.8GHz,内存为512M的系统上用MATLAB实现;可以得到在主频为50M的PFGA芯片上需要0.33ms,在2.8G奔四处理器、512内存的PC机上需要35ms;二者在时钟上相差56倍,效率上FPGA确是PC机的近 100倍。可见FPGA的并行处理和流水实现对于提高图像处理 速度具有很大的潜力,本文只是其中的一个应用。