基于FPGA的图像中值滤波算法的优化及实现

本文作者:admin       点击: 2009-10-11 00:00
前言:
一、引言

在图像的产生和传输中,传感器瞬间失常或信道噪声都会对图像产生噪声干扰,为了提高图像的识别效果,必须对图像进行滤波处理。但是由于参滤波运算的数据量大、因此是图像处理系统中最为耗时的环节之一,对系统速度影响较大。对于实时性要求比较高的系统,如果用软件实现会比较慢,因此采用硬件实现比较合适。可编程逻辑器件FPGA由于具有开发简单、静态可重复编程和动态的系统编程的特点,已经成为当今应用最广泛的可编程专用集成电路(ASIC)。在FPGA中用硬件实现,能够有效地进行并行运算和流水作业,使图像的处理速度大大加快。而中值滤波作为一种常用的图像预处理方法 ,能够有效地去除噪声 ,平滑图像。较之其他的平滑滤波方法如二阶巴特沃兹低通滤波等 ,中值滤波能够在去噪的同时不模糊图像的边缘 ,较好地保持图像的清晰度。本文针对硬件实现的特点对中值滤波算法进行了优化,并提供了在FPGA上的实现方案。

二、中值滤波算法原理

中值滤波是一种对干扰脉冲和点状噪声有良好抑制作用而对图像边缘能较好保持的非线性图像增强技术。
在一维形式下,中值滤波器是一个含有奇数个像素的滑动窗口,经排序后,窗口像素序列为 V=(L-1)/2,L为窗口长度,为窗口像素的中值滤波输出,记作                                         (1)
表示取窗口中值。如一窗口长度为5,像素灰度分别为{20,10,30,15,25},则
 公式(2)
一维中值滤波的概念很容易推广到二维,也就是取某种形式的二维窗口,将窗内像素排序,生成单调二维数据序列{Fjk}。类似于一维,二维中值滤波输出G(j,k)为公式(3)

三、中值滤波算法优化

中值滤波需要将窗口内所有像素点的灰度值从小到大(或从大到小)顺序排列,并以灰度值序列的中间值代替窗口中心像素点的灰度值。这就意味着中值滤波在执行过程中要进行大量的比较、赋值运算。可以统计出,一个具有n×n个像素方形滤波窗口的中值滤波器运行一次就要进行约1/2n2(n2-1)次排队比较运算。要处理一幅含有640×480个像素点的图像,所需的时间是相当长的,因此必须对中值滤波算法进行优化,使运算速度提高并易于硬件实现。

从两个方面对中值滤波算法进行优化:
1、算法的改进
改进的中值滤波算法是将二维滤波阵列分解为一维进行计算,先求出滤波窗口中水平各行像素灰度值的中值,再求出这些水平各行中值的中值,以此作为滤波结果。改进的算法将一个本来含有n×n=n2个像素的二维阵列简化为n+1个仅含n个像素的一维阵列进行取中值运算。用同样窗口进行一次快速中值滤波只需进行1/2n(n2一l)次运算,运算次数减少为原来的1/n,大大提高了运算速度。快速中值滤波虽然是将二维阵列分解为一维运算,但最终的滤波结果既包含窗口中的行信息又包含列信息,所以用多次一维中值滤波代替二维中值滤波的处理技术是可取的。

2、硬件算法的优化
硬件算法优化采用并行和流水线结构对中值滤波算法进行改进如图1所示,模块A和B为三点比较器,其功能是对输入的三个像素比较排序,并输出中间值。
并行机制就是对同一段时间内需要处理的所有任务分别采用各自独立的处理通道同时进行处理,使处理时间从多个任务所需时间之和降至最慢任务所需的时间。图中将3行数据同时用三个比较器进行比较,然后将三行的中值再用一个比较器比较得出最终结果。这样总处理时间只是其中关键模块的处理时间(即A、B两个比较器所用的时间之和),处理速度是顺序执行的两倍。
流水线作业的实质是在明显制约系统速度的关键路径上插入寄存器,使信号在时钟的下一拍到达目的地,这样用寄存器截断了长路径,缩短了寄存器到寄存器之间的最大延时,因而可以提高整个系统的速度。如图1所示,本来系统的最大延时为A和B的运算时间之和,现在在A与B之间加入寄存器后,系统的最大延时降为以前的一半,从而使系统的处理速度提高一倍。
由此可知,对于3×3模板的中值滤波算法经过并行和流水结构进行硬件算法优化后,处理速度是以前的四倍。

四、优化的中值滤波算法的硬件实现

本设计中FPGA采用Cyclone系列EP1C12芯片。根据上述原理设计完成的中值滤波器的部分VHDL源代码如下:
       if(in1         minvar:=in1;
         midvar:=in2;
       else
         minvar:=in2;
         midvar:=in1;
       end if;
       if(in3         maxvar:=midvar;
         midvar:=minvar;
         minvar:=in3;
       elsif (in3 >midvar) then
         maxvar:=in3;
       else
         maxvar:=midvar;
         midvar:=in3;
       end if;
       min:=minvar;
       mid:=midvar;
       max:=maxvar;

五、结果及分析

利用QuartusII对中值滤波程序进行仿真,结果如图2所示。对a11~a33共九个数比较排序,仅用一个时钟周期就可得到结果。例如输入a11(56)、a12(32)、a13(34)、a21(7C)、a22(75)、a23(68)、a31(95)、a32(70)、a33(65)九个数,一个时钟周期后得到结果70。
综合后中值滤波模块实际占用的逻辑单元为216个,仅占EP1C12全部逻辑门的3%。中值滤波算法采用流水线结构,对于输入时钟为50MHZ、大小为640×480的图像,每帧的处理时间为   公式(4)
在极限情况下,本算法的图像处理能力可以达到1/T=162帧/秒,完全可以满足今后的升级要求。
为了能够仿真滤波效果,本设计首先利用MATLAB把一副640×480的图像转换为Modesim6.0的测试向量文件,在FPGA中进行滤波,测试结果采用写文件的方式写入文件中,然后利用Matlab进行图像显示,滤波效果如图3所示,从中可看出取得理想效果。
参考文献:
[1] 倪臣敏等.一种改进的自适应中值滤波算法.中国图象图形学报.2006.5:672-678
[2] 王宇新等.基于FPGA的快速中值滤波算法.计算机应用研究.2009.1:224-226
[3] 李婧等.一种图像测量中的快速中值滤波算法.微计算机信息.2007.23:299-300
[4] 唐晓燕等. 基于FPGA的视频颜色空间转换电路设计. 电子与电脑.2006.8:110-112

作者简介:
王萍 (第一作者) (1979 -),女,河南南阳,工学学士,研究方向为电子信息科学与电气技术
唐晓燕(1979-),女,河南南阳人,硕士研究生,研究方向为信号与信息处理。
白光远(1984-),男,河南南阳人,硕士研究生,研究方向为嵌入式系统。