资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
课程设计报告书数字信号处理及系统设计中值滤波-FPGA设计设计人: 袁兴班级:硕研10级3班学号:2010010339山东科技大学中值滤波器-FPGA实现 前沿对于许多图像处理问题,传统的线性滤波方法存在着固有的缺陷。为此,最 近几十年来,发展起来了一类新的非线性滤波器结构中值滤波器。这类滤波器 在图像信号处理中具有独特的优势,目前已成为非线性滤波领域的一个研究点。 针对传统中值滤波算法排序量多、速度慢的缺点,提出了一种基于 FPGA 的中值滤 波快速算法。充分利用两个相邻滤波窗口中的相关排序信息,随着一列新像素的 移入,同时更新已有的排序信息,从而完成中值滤波处理。该算法将每个窗口查找 中值的比较次数降到很低,达到了快速抑制噪声及保持图像细节的目的。 中值滤波器设计的原理中值滤波是一种非线性滤波方法,于 1971年首次提出1。它首先对邻域点 的灰度值进行排序,然后选择中间值作为输出灰度值。中值滤波的公式如下:g(X, y )=med (f (x -i ,y -j )i ,j US(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)x )_ I g(x, y) |g(x, y) - f (x, y) T g 、f (x, y) |g (x, y) - f (x, y )T其中,g (x, y)如式中定义。阈值T的选择应该针对不同的图像,根据经 验或者实验进行选取。如果阈值选择过大,将有可能滤除不掉噪声;如果阈值选 择过小,将仍会使图像变得模糊。由于噪声和周围像素相差较大,也和中值相差 较大,因此阈值一般选择在几十左右。这样,滤波处理之后的图像在除去噪声的 同时会更加接近于原图像,能在更大程度上保留图像细节,使图像更清晰。 中值滤波的快速算法我们都知道,冒泡排序算法,在中值滤波中,是最基本、最经典的传统通用 算法。很多经过改进后的优化版本的快速算法和经过推广衍生后的性能增强的中 值滤波算法,都是基于这个冒泡排序算法的原理而产生的。我们下面将会着重描 述的中值滤波的快速算法,就是在这个冒泡算法上,经过修改优化得到的。这个快速算法的理念就在于,我们没有必要对输入窗口中的所有灰度值都进 行排序,也不需要得到它们的完整序列。我们只需要找到那个排列在中间位置的 值就可以了。它包含了以下所罗列出来的三个步骤:第一步:对输入窗口中的每 一列的灰度值,形成一个象素数组,并且对每一个象素数组进行单独的排序。第 二步:对输入窗口中的每一行的灰度值,也形成一个类似的象素数组,并且同样 对每一个象素数组进行单独的排序。第三步:经过排序之后,形成了新的输入窗 口,这个窗口在行和列中都已经得到了排序,对现在排序之后的输入窗口中的对 角线上的所有灰度值进行排序,并且选出这一个对角线上所有灰度值的中间值, 然后这个中间值就是整个输入窗口的中值,也就是要作为最后输出的那个中值。 我们可以得到这样一个快速算法。就是在特殊的3X3的象素大小的输入窗口的 情况下,有九个数据需要被处理。那么我们就顺便按照物理位置将这个九个象素 点分成列的三组,然后分别进行排序,得到每一列数据的最大值、中间值和最小 值。然后对三个最大值、三个最小值和三个中间值进行排序,得到的结果,我们 只取三个数,也就是三个最大值中的最小值,三个中间值中的中间值和三个最小 值中的最大值。这三个值对应上面的那个说法,就是经过两个步骤之后,行和列 都已经排序完了之后的一个对角线上的三个值。这三个值最后经过排序得到的中 间值,就是整个输入窗口中九个象素点的灰度值中的中间值了。中值滤波的快速算法的过程如下图 1 所示:图 1 在输入窗口大小为 3X3 的情况下的中值滤波快速算法MINMIDMAXMINMIDMAXMINMIDMAXMAX ofMINMID ofMIDMIN ofMAXFinal ofMID中值滤波算法核心是排序,排序算法的优劣直接决定了求取中间值的效率。从而决定滤波器的整体性能。基于硬件的排序算法设计可以充分的利用硬件平台 的并行性特点,从而达到加快处理的速度目的。下面分析 3X3 窗口图像数据的 数学模型,说明中间值的求得过程。设窗口的数据分别为:W11W12W13W21W22W23W31W32W33第一步:可以将9个数据按行数分成3组(LI、L2、L3),分别进行排序。L1min=min(W1y)L2min=min(W2y)L3min=min(W3y)第二步:L1med =med(W1y)L2med =med(W2y)L3med =med(W3y)L1max=max(W1y)L2max=max(W2y)L3max=max(W3y)重新分组,将每组中的最大值,供3个值,选出组成大值组VI,类似的组成 中值组V2和小值组V3,再次分别排序。V1min=min(Lx max)V2min=min(Lx med)V3min=min(Lx min)经过分析可得到:V1maxV1med =med(Lx max)V2med =med(Lx med)V3med = med(Lx min)是9个值中最大的,不可能是中间值;V1max=max(Lx max)V2max=max(Lx med)V3max =max(Lx min)V1med 是由小到大排列的9个值中至少是处于第6的位置,不可能是中间值;V2min 是由小到大排列的 9个值中最多是处于第4的位置,不可能是中间值V2max 是由小到大排列的9个值中至少是处于第6的位置,不可能是中间值V3min 是由小到大排列的 9 个值中处于最小的位置,不可能是中间值;V3med 是由小到大排列的 9 个值中至多是处于第 4 的位置,不可能是中间值; 施* I H 第三步:排除了以上六个值,还剩下大值组的 Vlmin,中值组的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.aba/yjbwab图 23X3 窗口的中值滤波快速算法示意图整个算法可以分成以上三个步骤,而且每个步骤在硬件平台上完全可以并行执行,这样可以大大的提高排序的效率。另外,算法不是对 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 (& readDataOO, 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)标准中值滤波对邻域中的像素按灰度级进行排序,然后选择该组的中间 值作为输出像素值。对于3X3窗口的中值滤波,采用图下图所示的3级比较电路 输出中值,。第一级比较电路由3个三输入比较器C组成,每个比较器的输出数据 依序排列(参见图示)。将3组比较结果中最小的3个数放在一起、中间的3个数 放在一起、最大的 3 个数放在一起,参加第二级比较。第二级比较电路的原理与 第一级类似,输出的值分别是上次输入数据中的最大值中的最小值和最小值中的 最大值以及中间值中的中间值。剩下的数据舍去不参加下一级比较。参加第三级 比较的有3个数
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号