中值滤波器FPGA实现.doc_第1页
中值滤波器FPGA实现.doc_第2页
中值滤波器FPGA实现.doc_第3页
中值滤波器FPGA实现.doc_第4页
中值滤波器FPGA实现.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告书数字信号处理及系统设计中值滤波-FPGA设计设计人: 袁兴 班 级: 硕研10级3班 学 号: 2010010339 山东科技大学中值滤波器的设计及FPGA实现中值滤波器-FPGA实现 前沿 对于许多图像处理问题,传统的线性滤波方法存在着固有的缺陷。为此,最近几十年来,发展起来了一类新的非线性滤波器结构中值滤波器。这类滤波器在图像信号处理中具有独特的优势,目前已成为非线性滤波领域的一个研究点。 针对传统中值滤波算法排序量多、速度慢的缺点,提出了一种基于FPGA的中值滤波快速算法。充分利用两个相邻滤波窗口中的相关排序信息,随着一列新像素的移入,同时更新已有的排序信息,从而完成中值滤波处理。该算法将每个窗口查找中值的比较次数降到很低,达到了快速抑制噪声及保持图像细节的目的。中值滤波器设计的原理 中值滤波是一种非线性滤波方法,于1971年首次提出1。它首先对邻域点的灰度值进行排序,然后选择中间值作为输出灰度值。中值滤波的公式如下:g (x, y )=med (f (x -i ,y -j )i ,j S (1)其中,g (x, y)和f (x, y)为像素灰度值;S为模板窗口。中值滤波要实现的是用中值g (x, y)来代替中心点值f (x, y)。对于椒盐噪声来说,由于模板的中值很大程度上不会是噪声,因此中值滤波能很好地消除它。当中心点值为噪声时,其值和中值数值相差较大,应该用中值来代替中心点值。但是,当中心点值不为噪声时,其值和中值数值相差不大,如果还用中值来代替中心点值,那么虽然对于单个像素点来说,不会产生较大的差异,但是如果对一整幅图像都进行这样的处理,这将在一定程度上使整幅图像变得模糊。据此,可以对中值滤波算法做一些改进。首先,排序窗口内的图像数据,找到中值。然后将中值和中心点值做差,将差值与事先设定的阈值T进行比较,如果两值之差的绝对值|g (x ,y -f (x, y)|大于等于阈值T,则认为中心点图像数据是噪声,用中值代替原数据值;如果两值之差的绝对值|g (x ,y -f (x, y)|小于阈值T,则认为中心点图像数据是有效数据,保持不变。即 2)其中,g (x, y)如式(1)中定义。阈值T的选择应该针对不同的图像,根据经验或者实验进行选取。如果阈值选择过大,将有可能滤除不掉噪声;如果阈值选择过小,将仍会使图像变得模糊。由于噪声和周围像素相差较大,也和中值相差较大,因此阈值一般选择在几十左右。这样,滤波处理之后的图像在除去噪声的同时会更加接近于原图像,能在更大程度上保留图像细节,使图像更清晰。中值滤波的快速算法 我们都知道,冒泡排序算法,在中值滤波中,是最基本、最经典的传统通用算法。很多经过改进后的优化版本的快速算法和经过推广衍生后的性能增强的中值滤波算法,都是基于这个冒泡排序算法的原理而产生的。我们下面将会着重描述的中值滤波的快速算法,就是在这个冒泡算法上,经过修改优化得到的。这个快速算法的理念就在于,我们没有必要对输入窗口中的所有灰度值都进行排序,也不需要得到它们的完整序列。我们只需要找到那个排列在中间位置的值就可以了。它包含了以下所罗列出来的三个步骤:第一步:对输入窗口中的每一列的灰度值,形成一个象素数组,并且对每一个象素数组进行单独的排序。第二步:对输入窗口中的每一行的灰度值,也形成一个类似的象素数组,并且同样对每一个象素数组进行单独的排序。第三步:经过排序之后,形成了新的输入窗口,这个窗口在行和列中都已经得到了排序,对现在排序之后的输入窗口中的对角线上的所有灰度值进行排序,并且选出这一个对角线上所有灰度值的中间值,然后这个中间值就是整个输入窗口的中值,也就是要作为最后输出的那个中值。我们可以得到这样一个快速算法。就是在特殊的33的象素大小的输入窗口的情况下,有九个数据需要被处理。那么我们就顺便按照物理位置将这个九个象素点分成列的三组,然后分别进行排序,得到每一列数据的最大值、中间值和最小值。然后对三个最大值、三个最小值和三个中间值进行排序,得到的结果,我们只取三个数,也就是三个最大值中的最小值,三个中间值中的中间值和三个最小值中的最大值。这三个值对应上面的那个说法,就是经过两个步骤之后,行和列都已经排序完了之后的一个对角线上的三个值。这三个值最后经过排序得到的中间值,就是整个输入窗口中九个象素点的灰度值中的中间值了。中值滤波的快速算法的过程如下图1所示:图1 在输入窗口大小为3X3的情况下的中值滤波快速算法中值滤波算法核心是排序,排序算法的优劣直接决定了求取中间值的效率。从而决定滤波器的整体性能。基于硬件的排序算法设计可以充分的利用硬件平台的并行性特点,从而达到加快处理的速度目的。下面分析3X3窗口图像数据的数学模型,说明中间值的求得过程。设窗口的数据分别为:W11 W12 W13 W21 W22 W23W31 W32 W33第一步:可以将9个数据按行数分成3组(L1、L2、L3),分别进行排序。L1min=min(W1y) L1med =med(W1y) L1max=max(W1y)L2min=min(W2y) L2med =med(W2y) L2max=max(W2y)L3min=min(W3y) L3med =med(W3y) L3max=max(W3y)第二步: 重新分组,将每组中的最大值,供3个值,选出组成大值组V1,类似的组成中值组V2和小值组V3,再次分别排序。V1min=min(Lx max) V1med =med(Lx max) V1max=max(Lx max)V2min=min(Lx med) V2med =med(Lx med) V2max=max(Lx med)V3min=min(Lx min) V3med = med(Lx min) V3max =max(Lx min)经过分析可得到:V1max 是9个值中最大的,不可能是中间值;V1med 是由小到大排列的9个值中至少是处于第6的位置,不可能是中间值;V2min 是由小到大排列的9个值中最多是处于第4的位置,不可能是中间值;V2max 是由小到大排列的9个值中至少是处于第6的位置,不可能是中间值;V3min 是由小到大排列的9个值中处于最小的位置,不可能是中间值;V3med 是由小到大排列的9个值中至多是处于第4的位置,不可能是中间值;第三步:排除了以上六个值,还剩下大值组的V1min,中值组的V2med和小值组V3max的三个值可能是中间值。将这三个值排序,可以证明这三个值的中间值medV1min,V2med,V3max就是这9个值中的中间值,用Smed 表示。证明如下:这三个值由这9个数值组成的矩阵中的位置如下:V1min V1med V1maxV2min V2med V2maxV3min V3med V3max假设max(V1min,V2med,V3max)是这9个数值中的中间值Smed,那么Smed是矩阵中包括主对角线在内的左下角6个值中最大的,在9点由小到大的排序中至少处于第六的位置,所以不可能是中间值;同理,假设min(V1min,V2med,V3max)是这9个数值中的中间值Smed,那么Smed在这9个值的由大到小的排序中至多是处于第四的位置,也不可能是中间值。由于奇数点的中值一定存在,则唯一的可能就是事实,所以medV1min,V2med,V3max一定是这9个值的中间值Smed.图2 3X3窗口的中值滤波快速算法示意图整个算法可以分成以上三个步骤,而且每个步骤在硬件平台上完全可以并行执行,这样可以大大的提高排序的效率。另外,算法不是对9点数据的完整排序,而是采用分组比较的办法找到中值。简化了排序的过程,从而提高了效率。中值滤波的软件和硬件实现1、中值滤波的软件实现为证明该快速算法的正确性及可执行性,用C+对该算法进行建模仿真。中值滤波的软件实现最重要的是排序。排序主要是采用了冒泡排序法,从一帧图像中读取数据,进行滤波算法。将排序后的数据写入到新的图形文件中,从而得到滤波后的图像。冒泡排序较为简单,最重要的是如何将一帧图像中的数据进行整合后给冒泡算法。从一幅图像中读取数据并进行数据排放的部分代码如下:unsigned char buffer54+1024; /定义原图像头缓冲区fread(buffer,1,54+1024,fp); /读取文件头54个字节unsigned long length=width*higth; /图像的总象素个数unsigned char readDatahigthwidth; /用于存储原图数据的数组unsigned char writeDatahigthwidth; /用于存储原图数据的数组fread(&readData00, sizeof(unsigned char),length, fp);/从原图读入数据for(i=0;ihigth;i+)for(j=0;jwidth;j+) writeDataij=readDataij;unsigned char D9; /定义选取框for(i=1;ihigth-1;i+)for(j=1;jwidth-1;j+)D0=readDatai-1j+1; D1=readDataij+1;D2=readDatai+1j+1;D3=readDatai-1j;D4=readDataij;D5=readDatai+1j;D6=readDatai-1j-1;D7=readDataij-1;D8=readDatai+1j-1; writeDataij=lvbo(D); /调用冒泡排序算法 软件对图像进行中值滤波的效果如下: 图3 滤波前的一幅静态图像 图4 中值滤波后的静态图像结果:从两幅图像的比对中发现:中值滤波的图像相对于原图有点模糊,主要是将相邻的像素值进行了均值处理。 2、中值滤波的硬件实现 1)标准中值滤波对邻域中的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值。对于33窗口的中值滤波,采用图下图所示的3级比较电路输出中值,。第一级比较电路由3个三输入比较器C组成,每个比较器的输出数据依序排列(参见图示)。将3组比较结果中最小的3个数放在一起、中间的3个数放在一起、最大的3个数放在一起,参加第二级比较。第二级比较电路的原理与第一级类似,输出的值分别是上次输入数据中的最大值中的最小值和最小值中的最大值以及中间值中的中间值。剩下的数据舍去不参加下一级比较。参加第三级比较的有3个数据,其原理类似于前两级比较电路,输出的最终的中值 。 2)中值滤波仿真所用工具是Mentor 公司的modelsim仿真工具,为所设计的硬件模块编写Testbench。其中测试向量来自于C程序过程中产生的随机数据,保存到相应的文件中。在Testbench中采用文件读取操作调用系统任务将保存的数据读入到一段存储器中,依据时钟将数据分别赋给相应的端口。C程序生成测试向量如下图5所示图5 C生成测试向量Testbench 系统任务调用部分代码所示:initial beginclk=0;rst_n=0;$readmemh(source1.txt,testvectors1);$readmemh(source2.txt,testvectors2);$readmemh(source3.txt,testvectors3);#18 rst_n=1;endModelsim 中仿真中值滤波,从波形图中与C建模得出的结果相比较,得出在相同的输入下经过C和Verilog HDL设计的电路后,所得出的结果是一致的。这就验证了这种快速算法的可行性。Modelsim中进行仿真过程中的波形图如下图6所示图6 Modelsim 仿真波形3)Quartus 综合 在Modelsim工具进行仿真过程中,得到该电路设计在完全理想的条件下,得到的电路功能与所期望的是一致的。进一步说明了所设计中值滤波的正确性。 在此条件成立下,用Altera 公司的Quartus 工具对电路进行综合,布局布线,进行后仿真和一些性能分析等。Quartus 综合后得到RTL Viewer 的部分展示,如下图7所示图7 Quartus 下 RTL Viewer的部分电路图在该综合工具下,结合工艺库进行综合、适配和映射,根据查表在FPG

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论