基于FPGA的快速中值滤波系统设计
2023-03-04
来源:小侦探旅游网
< EXCHANGE OF EXPERIENCE 经验交流 基于FPGA的快速中值滤波系统设计 ◆范超赵琳陈国 摘要:本文针对实时图像处理系统中中值滤波处理的数据量大,对 处理速度要求高,但算法相对比较简单的特点,采用FPGA实现了一种 快速中值滤波算法。设计已通过硬件实现,结果表明基于FPGA ̄现的 快速中值滤波算法在很大程度上提高了图像中值滤波的效率。 关键词:实时图像处理;FPGA;中值滤波 引言 中值滤波基于排序统计理论,是抑制噪声的非线 性信号处理技术。其核心运算是对模板中的数据进行排 序,快速求出中间灰度值。因为数据序列中间位置上的 值一般不是噪声点的值,从而达到抑制噪声的目的川。 传统的中值滤波算法执行过程中要进行大量的比较和赋 值运算,本系统采用了一种快速排序算法,其设计思想 是将二维滤波阵列分解为一维来进行计算。 一L: 二二广—]一 : 厂 r11 r12 rl3 、硬件设计 r21 r22 r23 1.1系统总体设计 图像滤波器主要包括滤波窗口生成模块、行列计数 r3l r32 r33 器模块和滤波算法模块。为了便于在FPGA上实现中值 滤波,本文采用窗口进行中值滤波器的设计,系统总 体结构如图1.1所示。 都进行处理。 图1.2窗口生成模块原理图 1.3中值滤波模块。 根据中值滤波算法的原理,中值滤波需要将窗口内 所有像素点的灰度值从小到大排序,并以灰度值序列的 中间值代替像素点的灰度值,因此中值滤波算法在执行 过程中要进行大量的比较运算,难以满足系统的实时性 图1.1中值滤波总体设计 要求,因此本系统采取一种改进的算法,将二维滤波阵 列分解为一维来计算,先求出滤波窗口中水平各行像素 灰度值的中间值,再求出这些水平中值的中值,即为该 点的像素灰度值。改进后的算法原理如图1.3所示。 如图1.3所示,改进后的中值滤波算法,先将三行 1.2窗口产生模块。 窗口生成模块用于生成窗口数据,实现图像数据的 串入并出。滤波窗口由FPGA中定义的9个寄存器和2个 FIFO组成,9个寄存器构成了窗口寄存器组来暂时存放 窗口中的数据,原理如图1.2所示。 在图1.2中,r代表移位寄存器,图像数据按时钟 节拍依次输入寄存器组,图中每个FIFO的地址长度为 数据同时用三个比较器进行比较,分别得出各行的中 值,然后再将三行的中值用一个比较器进行比较得出最 终结果,这样大大减少了比较的次数,提高系统的效 率。上述原理的VHDL实现如下: if(inl<in2)then minvar:=inl; 图像的宽度,一个FIFO正好用来存储一行数据,rl 1、 r12、rl3…r33,存放的正好是模板所对应的图像数 据。当数据流不断从数据输入端输入时,窗口对应的 图像数据不断地跟着变化,这就可以对图像的所有像素 1O0 信息系统丁程I 2013.7 20 medvar:=in2; 图1.3快速中值滤波原理图 else minvar:=in2; medvar:=inl; endif; if(in3>med)then maxvar:=in3; else if(in3<min)then maxvar:--reed; medvar:=min; minvar:=in3; else maxvar:=med; medvar:=in3; endif max:=maxvar; med:--medvar; min:=minvar; 1.4计数模块。 当中值滤波进行到图像的边沿时,的窗口无法盖 住图像或会盖住图像外的一部分,这样就无法正确进行 中值滤波,所以中值滤波无法对图像的边沿进行滤波, 这就需要计数控制模块对行列计数进行控制,检测是否 到达图像的边沿,如果检测到图像边沿则输出置为零。 对于一副图像,计数控制模块如图1.4所示。 如图1.4所示当行计数值大于1小于3并且列计数值 大于14,于3时输出算法模块的滤波值,而在其它时刻直 接将输出信号置为零。其计数部 ̄VHDL源代码如下: architecture counter of counter is begin process(rst,clk,en) variable colpos_var:integer:_0; 初始化 行、列变量 / EXCHANGE OF EXPERIENCE 经验交流 variable rowposvar:integer: 0; _begin ifrst= 0 then 系统复位 / colpOSvar:=-1; _colposition< 0; 图1.4计数控制模块 rowpos_var: 0; rowposition<=0; else if(clk’event)and(clk=1)then / 时钟上 升沿,开始计数 / ifen=’1’then colposvar: colposvar+1; ._if conposvar num— colsthen rowpos_var=rowpos_ va什1: colposvar: 0; —endif; endif; colpos< colposvar; _rowpos<--rowposvar; endif; endif; endprocess; end counter; 本文采用ALTERA公司CYCL0NE系列的 EP1C12Q240CS ̄u,片实现了系统中的中值滤波算法,作为 对视频图像的预处理,结果表明基于FPGA实现的快速中 值滤波算法在很大程度上提高了图像预处理的效率。 9_B 参考文献 【1]胡越黎,计慧杰,吴频,等.图像的中值滤波算法及其FPGA实现 [I】.计算机测量与控制,2008,16(11):1672—1673. (作者单位:中航工业西安航空计算技术研究所) 信息系统工程l 2013.7.20 1 01