一种自适应中值滤波器算法的FPGA实现概要Word格式.docx
- 文档编号:21294127
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:20
- 大小:649.45KB
一种自适应中值滤波器算法的FPGA实现概要Word格式.docx
《一种自适应中值滤波器算法的FPGA实现概要Word格式.docx》由会员分享,可在线阅读,更多相关《一种自适应中值滤波器算法的FPGA实现概要Word格式.docx(20页珍藏版)》请在冰豆网上搜索。
3medianfilterand5×
5medianfilter,realizinganadaptivemedianfilter.Somefalsecolorenhancementtransformstepisused.Withtheusingofadaptivemedianfilterandfalsecolorenhancement,wecannotonlyfilterthenoisesandsavetheimage’sdetail,butalsocanenhancetheimage’sinformation.
Accordingtoexperiment’sresults,theadaptivemedianfilterinthispaperhastheadvantagesofhighspeed,higherperformanceandhighanti-interferenceability.
Keywords:
imagetreatment;
FPGA;
medianfilter;
adaptive
0引言
由于数字相机本身的问题以及周围环境对图像传输路径的干扰和影响,使得数字图像在生成和采集过程中会引入许多噪声干扰,这些干扰恶化了图像质量,使图像模糊,甚至淹没目标特征,给后续的分析处理带来困难。
因此需要对图像进行滤除噪声处理。
在图像处理中,中值滤波对干扰脉冲和点状噪声有良好的抑制作用,还能较好的保护图像的边缘信息。
但是普通的3×
3中值滤波器只是简单的将3×
3图像采样窗口的9数个像素数据进行排序,用中值代替窗口中心像素原来的灰度。
这必然会导致在去除噪声干扰的同时使图像变得模糊,损失细节。
本文中的自适应中值滤波算法不再是简单的用图像窗口数据的中值替换原中心像素,而是加入了自适应比较算法,可以处理具有更大概率的冲激噪声;
而且在平滑非冲激噪声时可
以保存细节,这是传统的中值滤波器做不到的。
另一方面随着数字技术日益广泛的应用,以FPGA为代表的ASIC器件得到了迅速普及和发展,器件集成度和速度都在高速增长。
并且FPGA有着规整的内部逻辑块阵列和丰富的连线资源,特别适合细粒度和高并行度结构特点的数字信号处理[1]。
对图像的滤波预处理,它的特点是处理数据量大。
如果用一般的软件来实现势必会比较慢,实时性差。
针对图像滤波运算结构比较简单、处理数据量大的特点,利用FPGA,并结合VHDL语言编程灵活的特点,可以方便地实现系统级的设计,大大提高数字图像滤波处理的效率。
1算法原理
1.1自适应中值滤波算法原理
中值滤波是一种非线性的图像处理方法。
它通过从图像中的某个采样窗口取出奇数个数据进行排序得到中值,用中值代替窗口中心像素原来的灰度,其数学表达式为:
(,{(,}gxymedianfmn=(1中值滤波以窗口的中值作为处理结果,实现起来很简单[2]。
本文的自适应中值滤波算法是以基本的中值滤波算法为基础,但不再是简单的用图像窗口数据的中值替换中心像素,而是需要经过进一步的自适应比较判断来决定中心像素的数据。
算法描述如下:
xyS为采样图像窗口,考虑如下符号[3]:
minz——中灰度级的最小值
xySmaxz——中灰度级的最小值
xySmedz——中灰度级的中值
xySxyz——在坐标(,xy上的灰度级
maxS——允许的最大尺寸
xyS自适应中值滤波算法工作在两个层次,定义为A层和B层,如下所示:
A层:
A1=-
medzminzA2=-
medzmaxz如果A1>
0且A2<
0,则转到B层
否则增大窗口尺寸
如果窗口尺寸≤,则重复A层
maxS否则输出
medzB层:
B1=-
xyzminzB2=-
xyzmaxz如果B1>
0且B2<
0,则输出
xyz否则输出
medz在本文中的自适应中值滤波算法,取为5×
5。
一般的中值滤波器都为3×
3的图像采样窗口,本文在3×
3窗口的基础上,将图像采样窗口尺寸扩展到5×
5,maxS
并与3×
5中值滤波器相结合,实现了自适应中值滤波。
下面将详细讲述基本的算法原理。
首先是3×
3中值滤波器进行中值、最大值和最小值的求取,将中值与最大值和最小值进行比较,如果中值位于两者之间,这说明中值不是脉冲像素(极值,接下来就转入下一步判断中心像素是不是位于最大值和最小值
之间。
如果是,那就说明也不是脉冲(极值,所以输出,而不用中值去替换中心像素;
如果否,中心像素肯定是极值脉冲(等于或,因此用中值替换它。
如果第一步中,中值与最大值和最小值进行比较,没有位于两者之间,那就说明肯定是极值脉冲(等于或,因此扩大图像窗口尺寸到5×
5,重复上述步骤,如果仍不能找到一个非脉冲的中值,就输出3×
3中值滤波器求出的。
这种自适应中值滤波算法可以保留部分图像原有的像素,从而也就避免了不必要的细节损失;
还可以在不满足滤波要求的时候扩大采样窗口,从而使滤波效果更好。
medzmaxzminzxyzxyzxyzmedzxyzminzmaxzmedzminzmaxzmedzmedz为实现本算法,本文中的3×
3中值滤波器和5×
5中值滤波器不但要求出中值,还要求出每次图像窗口中的最大值和最小值。
下面介绍这两种滤波器通过排序求
取这三个值的简便方法[4]。
以5×
5中值滤波器为例。
图1说明了采用本排序算法对5×
5的图像窗口求取中值、最大值和最小值的步骤。
图中的步骤(1是把图1(a5×
5的图像窗口像素各列沿箭头方向作降幂排列;
步骤(2接着把经过列降幂排列的每行像素沿箭头方向作行降幂排列,得到图1(d的结果。
在图1(d中对各点数据在25个像素点中所处的位次进行判断,可以得到如下的结论,其中:
m11为25个像素数据中的最小值,m55为25个像素数据中的最大值;
m12小于或等于其所在的原始列中的四个像素值和m13、m14、m15所在原始列的所有像素值(小于等于4+3×
5=19个值,所以不可能为中值(中值排在第13位;
m13小于或等于其所在的原始列中的四个像素值和m14、m15所在原始列的所有像素值(小于等于4+2×
5=14个值,所以不可能为中值;
m21小于或等于其所在的原始列中的三个像素值和m22、m23、m24、m25所在原始列的四个像素值(小于等于3+4×
4=19个值,所以不可能为中值;
m22小于或等于其所在的原始列中的三个像素值和m23、m24、m25所在原始列的四个像素值(小于等于3+3×
4=15个值,所以不可能为中值;
m31小于或等于其所在的原始列中的2个像素值和m32、m33、m34、m35所在原始列的三个像素值(小于等于2+4×
3=14个值,所以不可能为中值;
m54大于或等于其所在的原始列中的四个像素值和m51、m52、m53所在原始列的所有像素值(大于等于4+3×
5=19个值,所以不可能为中值;
m54大于或等于其所在的原始列中的四个像素值和m51、m52所在原始列的所有像素值(大于等于4+2×
m45大于或等于其所在的原始列中的三个像素值和m41、m42、m43、m44所在原始列的四个像素值(小于等于3+4×
m44大于或等于其所在的原始列中的三个像素值和m41、m42、m43所在原始列的四个像素值(小于等于3+3×
m35大于或等于其所在的原始列中的2个像素值和m34、m33、m32、m31所在原始列的三个像素值(小于等于2+4×
这样就排除掉12个值,不再参与下一级的比较。
剩下的13个值通过步骤(4,沿图1(d箭头所示对角线方向做降幂排列得到图1(e的结果。
在图1(e中对各点数据在13个数据中所处的位次进行判断,可以得到如下的结论,其中:
D52至少大于或等于其所在的原始列中的2个像素值或1个像素值(如果D52原来位于m25的位置和D43、D34、D25所在原始列的所有像素值(大于或等于2+2×
3+2=10或1+3×
3=10个值,所以不可能为中值(中值排在第7位;
D43至少大于或等于其所在的原始列中的2个像素值或1个像素值(如果D43原来位于m25的位置和D34、D25所在原始列的所有像素值(大于等于2+1×
3+2=7或1+2×
3=7个值,所以不可能为中值;
D34至少大于或等于其原始位置左侧和上方的四个值,以及D25所在原始位置左侧和上方的四个值(至少大于等于4+4+1=9个值,所以不可能为中值;
D51至少大于或等于其原始位置上方的1个值(如果D51原来位于m51的位置和D42、D33、D24、D15以及它们上方的所有像素值(至少大于等于1+7=8个值,所以不可能为中值;
D42至少大于或等于其原始位置上方或左侧的1个值(如果D42原来位于m51或m15的位置和D33、D24、D15以及它们左侧和上方的所有像素值(至少大于等于1+6=7个值,所以不可能为中值。
同理,也可以判断出D14至少小于或等于10个值;
D23小于或等于7个值;
D32小于或等于9个值;
D15小于或等于8个值;
D24小于或等于7个值,所以这几个像素点都不可能为中值;
这样就又排除掉10个值,不再参与下一级的比较。
经过两步排除,剩余三个值D41、D33、D25,经过第(5步,沿箭头方向的对角线作降幂排列,得到图1(f的结果,中值N33就为25个像素的中值。
3×
3中值滤波器对3×
3图像窗口求取中值、最大值和最小值的方法与5×
5的类似,但要简单的多。
图2说明了3×
3图像窗口求取中值、最大值和最小值的步骤。
图15×
5图像窗口求取中值、最大值和最小值步骤
图23×
3图像窗口求取中值、最大值和最小值步骤
1.2伪彩色增强算法
本文中的中值滤波算法进行图像处理的时候依据的是各个像素点的灰度值,或者说处理的是灰度图像。
而我们知道,除了灰度(亮度信息之外,人眼还可以分辨不同的伪彩色。
因此,把人眼无法区别的灰度变化施加以不同的彩色来提高识别率,这是伪彩色增强的基本依据。
把经过自适应中值滤波处理后输出的各个像素点的灰度值作进一步的伪彩色变换,可以在去掉噪声的同时起到增强图像信息的作用。
要从一幅灰度图像生成一幅彩色图像,是一个一到三的映射。
显然,由少量的信息获得多的信息量一定需要有关联性的运算,这必然是基于估计原理。
也就是说,对未知的部分,通过各种手段进行合理的估计,由原来的灰度分量(亮度值分解为可以用R、G、B三种基色的组合表示。
可以定义如图3所示的灰度到R、G、B通道的不同映射方式。
图3
中的横坐标为
(
x,y
处像素的灰度值F
(x,y
纵坐标为R
、G、B三个颜色分量的映射值Gr(
x,y
、Gg(x,y、Gb(x,y,每个量都按照8位二进制数来表示[5]。
图3Y到RGB伪彩色的转化函数
由图可得到以下的变换公式:
0(,(0,128
255
(,[(,128](,(128,192
64
255(,(192,255
Fxy
GrxyFxyFxy
⎧⊆
⎪
=−⊆
⎨
⎪⊆
⎩
(2
255(,
(,(0,6464(,255
(,(64,192255255[(,192](,(192,25564FxyFxyGgxyFxyFxyFxy⎧⊆⎪⎪⎪=⊆⎨⎪⎪−−⊆⎪⎩
(3255(,(0,64255(,255[(,64](,(64,128640(,(128,255FxyGbxyFxyFxyFxy⎧⊆⎪⎪=−−⊆⎨⎪⎪⊆⎩
(4另外为了便于在VGA显示器上显示处理后的图像,需要把8位的RGB数据映射成10位,作如下变换:
1023(,255Grxy×
、1023(,255Ggxy×
、1023(,255
Gbxy×
代入上面的公式,化简后得到下面的公式:
0(,(0,128(,(,1023[2](,(128,192641023
(,(192,255FxyFxyGrxyFxyFxy⎧⊆⎪⎪=×
−⊆⎨⎪⎪⊆⎪⎩(51023(,
(,(0,6464(,1023(,(64,192(,1023[4](,(192,25564FxyFxyGgxyFxyFxyFxy⎧⊆⎪⎪⎪=⎨⎪⎪×
−⊆⎪⎩
⊆(6
1023
(,(0,64(,(,1023[2(,(64,128640
(,(128,255FxyFxyGbxyFxyFxy⎧⊆⎪⎪⎪=×
−⊆⎨⎪⎪⊆⎪⎩(7这样,通过自适应中值滤波加伪彩色增强,既完成了对图像去除噪声并尽可能减少图像细节损失的目的,而且还增强了图像信息的表现力。
2算法的FPGA实现
本文中的自适应中值滤波算法有两个层次的比较运算,属于顺序执行的算法。
而硬件FPGA的优势在于可以实现并行的高速运算,因此为了充分发挥FPGA的优势,把算法进行一定的改进,以利于在硬件中并行实现。
原理框图如图4所
示,图像数据逐行串行输入5×
5图像采样窗口生成模块,
输出产生五行五列的图
像数据,每个像素点是256级灰度,用8位二进制数表示,D1[1..5]表示第一行的五个像素点,D11[7..0]表示第一行第一列的像素的灰度值。
五行数据依次输入后面的5×
5中值滤波器进行中值,最大值,最小值的求取;
中间三行三列数据输入到3×
3中值滤波器进行中值,最大值,最小值的求取。
这样就形成两种不同尺寸的中值滤波器进行并行滤波。
两种不同尺寸的滤波器的滤波结果以及5×
5图像窗口的中心像素点D33[7..0]输入到后面的自适应逻辑比较判断模块,依据上面提到的两个层次的自适应中值滤波算法,判断比较后输出最后的滤波结果。
该滤波输出经过伪彩色变换模块的变换增强,输出RGB三基色分量。
图4自适应中值滤波器硬件框图
这样,整帧图像的数据从上到下逐行输入5×
5图像采样模块,经过窗口采样和后面的中值滤波,可实现对整帧图像的中值滤波处理。
采用5×
5采样窗口的中值滤波不能实现对一帧图像最外围像素点的滤波,但本设计所处理的图像为640×
480像素,处理不到的像素数目为640×
2+480×
2-16=2224,在总共的像素数640×
480=307200中占的比例为2224/307200×
100%=0.72%,所占的比例很小;
并且最外围的像素对中间的目标特征的影响几乎可以忽略不计,因此最外围像素不进行处理。
2.1顶层设计
根据原理框图,在本节的设计中,采用层次化设计方式,顶层模块由5×
5采样窗口生成模块,3×
3中值滤波器模块,5×
5中值滤波器模块,自适应逻辑比较判断模块和伪彩色增强变换模块五个子模块组合而成,自底向上进行开发。
为了实现各模块的严格同步处理,使像素数据对齐,由顶层模块统一分配时钟,采用主时钟源CLOCK_50(50MHz。
各个模块的详细设计见下文。
2.1.1中值滤波器模块
中值滤波器的功能就是实现图像采样窗口中奇数个数据的中值、最大值和最小值的求取。
本文需要设计3×
3和5×
5两种中值滤波器,在硬件中实现的基本思想就是前面所提到的方法。
要想实现中值的求取,需要经过逐级的比较排序。
因此本设计采用了流水线处理方式,把上一级比较排序的结果作为下一级的输入,在同步时钟的作用下保证数据的完整,也加快了运算的速度。
由于需要经过多级比较,因此在中值滤波器的设计中,用到了一个数据排序
的全局过程SWAP,可以在顶层实体定义中定义这个过程。
其VHDL代码如下:
procedureswap(data:
inoutdata_array;
low,high:
inintegeris
variabletemp:
data_element;
begin
if
(data(low>
data(high
then
temp:
=data(low;
data(low:
=data(high;
data(high:
=temp;
end
if;
swap;
该SWAP过程实现的就是一个数组中两个元素的降幂排列。
在中值滤波器的设计中,每级比较可以通过在进程(process中多次调用该SWAP过程来实现图像采样窗口中行、列或者对角线元素的排序。
由图3×
3中值滤波算法的步骤可知,对某一个3×
3的图像采样窗口,3×
3中值滤波器经过两个步骤(两个时钟周期即可实现最大值,最小值的求取,而中值需要再经过一个时钟周期才能求取,因此实现完整的滤波器功能需要3个时钟周期。
在每个步骤的排序中,每行的排序是可以并行执行的,所以完成3行降幂排序只需要一个时钟周期;
每列的排序也是可以并行执行的,所以完成3列降幂排序也只需要一个时钟周期,最后一步对角线的排序也是一个同步时钟周期即可完成。
由图5×
5中值滤波算法的步骤可知,对某一个5×
5的图像采样窗口,5×
5中值滤波器经过两个步骤(两个时钟周期即可实现最大值,最小值的求取,而中值需要再经过两次对角线元素的排序才能输出,也即还需要两个时钟周期才能求取,因此实现完整的滤波器功能需要4个时钟周期。
在每个步骤的排序中,每行的排序是可以并行执行的,所以完成5行降幂排序只需要一个时钟周期;
每列的排序也是可以并行执行的,所以完成5列降幂排序也只需要一个时钟周期;
后面的对角线排序也是一个同步时钟周期即可完成。
显然两种滤波器的输入数据来自同一个5×
5的图像采样窗口,是同步的,而处理速度不同,因此输出数据将不再同步,会影响到后面的自适应比较模块。
为解决这个问题,一个简单的办法就是在3×
3中值滤波器的输出环节加入一个D触发器,把输出数据延时一个时钟周期输出,这样就实现了滤波输出数据同步输出到后面的自适应比较判断模块。
另外,自适应逻辑比较判断模块的输入数据中还需要原始图像采样窗口中心点的像素值D33[7..0],因此需要将该值随着流水线处理逐级锁存,与中值滤波器的输出结果一同作为自适应逻辑比较判断模块的输入数据。
虽然需要进行多级比较,但是由于采用的是并行、流水线的工作方式,除了第一次和最后一次的输入数据产生输出结果有时钟周期的延时外,其它每个时钟周期都会有结果输出。
因此可以说只需要一个时钟周期便可实现自适应中值滤波,与采用软件的方法相比,速度要快很多。
2.1.25×
5图像采样窗口
由于图像数据都是逐行串行从摄像头或者成像仪中输出,而本文的中值滤波器需要一个5×
5的图像采样窗口来实现滤波算法,因此需要把逐行串行的数据转换为并行的五行五列数据,这就需要有缓存器和锁存寄存器(D触发器。
缓存器缓存五行数据,锁存寄存器用来锁存移出五列数据,形成一个5×
5的矩阵,就
相当于一个5×
5窗口。
原理框图如图5所示。
其中五个双口RAM实现五行像素数据的缓存,D触发器实现五列数据的移出和锁存。
利用CycloneⅡ芯片的特点,
采用芯片内部的双口RAM(dual-port-ram
。
可以应用Altera公司的QuartusII软件对双口RAMIPCore进行参数的设
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一种 自适应 中值 滤波器 算法 FPGA 实现 概要
![提示](https://static.bdocx.com/images/bang_tan.gif)