1 图像中值滤波算法及其优化
1.1中值滤波算法
中值滤波与均值滤波器以及其它线性滤波方法相比它能够很好地滤除脉冲噪声,又能保护目标图像边缘。它是一种邻域运算,计算过程是把邻域中的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值,其实现方法如图1所示。
1.2算法优化
基于上述考虑,本文采用归并排序的分组思想来设计优化算法。归并排序算法首先将输入序列分作若干个组,进行组内排序,对这些已排序的有序子序列再次分组www.cechina.cn,同组内的有序序列归并为一个有序序列,重复这个过程直到所有组合并为一个有序序列时算法结束。归并排序中分组处理的思想特别适合FPGA 的并行操作特性,有利于充分挖掘FPGA的并行能力,从而最大限度的提高系统性能。对于一个3x3窗采用严格意义上的归并 算法得到中值需要11个时钟周期。而此时所有数据均已排序完成,由于中值滤波只需找到中间值即可,因此对该算法我们又进行改进。
首先对窗口中每一行的3个像素进行排序CONTROL ENGINEERING China版权所有,分别得到3个有序序列,然后将3组有序序列按其中值进行排序。对于最终所得的窗口如图2所示,在最小值这组数据中,1和2不可能是中值,因为窗13中至少有5个数据比它们大;在最大值这组数据中,8和9不可能是中值www.cechina.cn,因为窗口中至少有5个数据比他们小;在中值这组数据中。 不能确定有4个以上的数据比它们大或者小。这样3、4、5、6、7这5个数中的中间值就是最后窗口的中值。5个元素求中值需要6次比较,但是4CONTROL ENGINEERING China版权所有,5,6已经有序,故省了2次,可知最终需要16次比较就可以找到9个元紊的中值。
2.1算法实现
对于一个3x3窗13的中值滤波实际上就是求窗口中9个元素的中间值,算法对9个元素取中间元素可以证明最少需要16次比较,这在上一节已经给出了证明。利用这个算法实现一个中值滤波电路时需要一个三输入的排序比较器用来对三个元素进行排序。实现三输入比较排序器的核心代码用Verilog代码实现可描述如下:
2.2算法应用
论文采用以上算法实现了对128x128点像素图像的FP— GA硬件中值滤波处理,图3中(1)是原始图像,(2)是加入椒盐噪声的图像,(3)是经FPGA处理后的图像。可以看出用FPGA进行中值滤波其效果不错基本能够去除椒盐噪声对图片的影响,充分证明了FPGA中值滤波优化算法的正确性。
现对软硬件图像处理性能进行比较:处理同一副128X128 的图片,硬件上采用XC3S400芯片,主频率为50MHz;软件上在intel奔四处理器上,时钟频率为2.8GHz,内存为512M的系统上用MATLAB实现;可以得到在主频为50M的PFGA芯片上需要0.33ms,在2.8G奔四处理器、512内存的PC机上需要35ms;二者在时钟上相差56倍,效率上FPGA确是PC机的近 100倍。可见FPGA的并行处理和流水实现对于提高图像处理 速度具有很大的潜力CONTROL ENGINEERING China版权所有,本文只是其中的一个应用。