赵 倩,潘 虎
(上海电力学院 电子信息与工程学院,上海 200090)
图像在形成、传输和扫描等过程中,常因外界噪音干扰导致质量下降,影响视觉效果,给进一步处理带来不便.为抑制噪音,改善图像质量,必须对图像进行滤波、平滑等预处理.目前常用的图像去噪算法有中值滤波,均值滤波,维纳滤波.随着计算机行业的发展,PC机上的图像处理软件已经非常成熟,但图像处理的最大特点是数据量与运算量大,这时用软件实现会比较慢[1].DSP虽然具备指令流水线和很高的处理速度,但由于其本质仍然是依靠串行执行指令来完成相应的图像处理算法,其处理速度依然很受限制[2].可编程门阵列(Field Programable Gate Array ,FPGA)[3]保持了ASIC的高速性,避免了开发的高成本以及在成品后不能改变内部电路的缺点,具有强大的数据并行处理能力和极高的速度,给数字信号处理算法开辟了全新的道路[4].
本文主要介绍了维纳滤波的原理,比较了十字型和3×3型滤波窗口设计对滤波效果的影响,分析和优化了基于FPGA的维纳滤波算法的设计.
维纳滤波器是一种自适应滤波器,它比线性滤波器具有更好的选择性,可以更好地保存图像的边缘和高频细节信息.该算法通过估计图像中每个像素的局部均值和方差,以实现图像的自适应去噪,其局部均值与方差分别为:
式中:S——图像中每个像素的M×N邻域.
维纳滤波估计式为:
式中:δ2——噪音方差,若没有给出,则自动以所有局部估计方差的均值代替.
本设计采用Matlab和QuartusII的联合测试平台,利用Matlab产生加噪图像测试数据,以16进制的形式保留在txt文件中.图像维纳滤波器设计包括据存储模块、滤波窗口模块和滤波算法模块3个部分.数据存储模块用来保存图像测试数据或去噪后的图像数据,通过txt文件读入和读出图像数据;滤波窗口模块是给滤波算法模块提供运算数据;而滤波算法模块主要用于对数据进行滤波处理.滤波器算法与测试框图见图1.
图1 滤波器算法与测试示意
滤波窗口模块主要为滤波算法模块提供计算数据,它将数据按照要求形成一个矩阵,该矩阵对应于图像中当前像素点的一个邻域.滤波窗口的设计极其重要,如果滤波窗口发生错位,运算像素单元和其邻域的像素点可能不再是所要求的窗口内的像素,从而造成滤波效果不佳,严重时会影响图像的显示效果,甚至会发生扭曲,滤波效果极差.
本文采用两种滤波窗口模式:一是3×3的窗口[5];二是十字形的滤波窗口[2].两种滤波窗口结构如图2所示.
图2 两种滤波窗口结构
本文以3×3的窗口为例进行滤波窗口的设计.利用2个FIFO和6个寄存器对图像的行、列数据进行存储,设计的窗口如图2a所示.图2a中每个fifo的地址长度为图像的宽度,即1个fifo存储1行图像数据,用于图像行数据缓存.如果图像大小为128×256时,fifo的地址长度为256个字节.6个寄存器分3组两两串接,实现每行数据上列像素的缓存,从而形成一个3×3的窗口.对于128×256大小的图像数据则需要延时256个时钟周期,以满足窗口的准确性,按照一列数据从上往下扫描前进,直至完成所有图像的像素点.图3给出了窗口在图像中的运动状态.
图3 窗口运动示意
维纳滤波算法中,根据式(1)、式(2)和式(3)计算像素3×3点邻域的均值和方差,再由邻域方差、噪音方差和邻域均值计算出去噪后相应像素点的灰度值out.由于方差的计算是根据像素点的灰度值来确定的,对于一些特殊情况,如当邻域像素点灰度值都接近于零时,邻域方差就会很低,如图像噪音方差为400,当邻域方差小于100时,式(3)中后一项的值被放大,故式(3)计算出的b(x,y)的值会发生很大的偏移,这种现象集中体现在灰度值接近于零的像素邻域中.方差与所对应的像素领域如表1所示.
表1 方差及所对应的像素邻域
由表1可以看出,在数据区域前5列邻域的像素灰度值都比较低,计算出的邻域方差值也比较低,去噪效果较差.因此,在求出邻域方差后,需要对其进行方差修正:如果方差较小,则用接近总体方差的值来替代,这样可避免极限点的出现.经过处理后,去噪图像效果更清晰.图4为方差修正前后的去噪效果比较.
维纳滤波算法代码如下:
图4 滤波算法方差修正前后去噪效果对比
维纳滤波算法的功能仿真如图5所示,图中的a0~a8为当前像素点的8个邻域像素值(3×3窗口),out为当前像素点维纳去噪后对应的灰度值.由图5可以看出,算法的效果基本实现.
图5 滤波算法的功能仿真
维纳滤波在十字窗口和3×3窗口下的滤波效果比较见图6.从图6可以看出,对维纳滤波而言,十字窗口的滤波效果比3×3窗口的滤波效果差,这是由于在十字窗口中,参与噪音方差估计的像素点较少,难以达到较好的滤波效果.
图6 维纳滤波在十字窗口和3×3窗口下的滤波效果
本文对维纳滤波的预处理算法实现进行了研究,设计了基于FPGA的图像维纳滤波器,给出了不同滤波窗口设计的效果对比,并对算法的代码进行了优化和分析,以期为图像的后续处理奠定良好的硬件基础.
参考献文:
[1]方翰华,陈新华,沈国新,等.基于FPGA图像滤波算法硬件化设计[J].电子测量技术,2009,32(12):68-71.
[2]朱捷,朱小娟,贺明.基于FPGA的实时图像中值滤波设计[J].计算机测量与控制,2007,15(6):798-800.
[3]尚明.FPGA技术的应用与发展趋势[J].科技咨询,2007,14(1):10-12.
[4]叶敏,周文晖,顾伟康.基于FPGA的实时图像滤波及边缘检测方法[J].传感技术学报,2007,20(3):623-627.
[5]胡越黎,计慧杰,吴频,等.图像的中值滤波算法及其FPGA实现[J].计算机测量与控制,2008,16(11):1 672-1 675.