当前位置:文档之家› 均值滤波改进算法

均值滤波改进算法

《DSP图像处理》课程学习报告姓名郭鑫学号 ******** 通信0804班同组成员胡婷婷宋顾洋霍万明陈友为指导教师申艳老师时间 2010-10-15均值滤波的改进算法一、算法描述:一般的均值滤波的阈值是一个固定值,而我们采用了自适应的方法,使阈值根据不同的图像会有不同的数值,计算公式是二、实验箱实验过程和结果分析(1)、c语言程序/*均值滤波处理*/void AverageFilterEdge(){int i,j,k;Uint8 bTemp;float fAverg;k=(intALines-1)*(intAPixels-1);for(i=intALines;i<intDLines;i++){for(j=intAPixels;j<intDPixels;j++){/*屏幕上奇数行进行处理*/fAverg = (*(Uint8 *)(tempSrcYbuffer + (numLines/2+i-1)*numPixels + (j-1))) +(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i-1)*numPixels + j)) +(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i-1)*numPixels +(j+1))) +(*(Uint8 *)(tempSrcYbuffer + i*numPixels + (j-1))) +(*(Uint8 *)(tempSrcYbuffer + i*numPixels + (j+1))) + (*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels + (j-1)))+(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels + j)) +(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels +(j+1)));fAverg = fAverg/8;bTemp = *(Uint8 *)(tempDisYbuffer + i*numPixels + j);bEps=(abs((*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels + j))-(*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels + (j+1))))+ abs((*(Uint8 *)(tempSrcYbuffer + (numLines/2+i)*numPixels +j))-(*(Uint8 *)(tempSrcYbuffer + (numLines/2+(i+1))*numPixels + (j)))));bEps= bEps/k;//当中心像素值bTemp与8个邻近均值fAverg的差超过判定值bEps时取均值fAvergif(abs(bTemp-fAverg)>bEps){*(Uint8 *)(tempDisYbuffer + i*numPixels + j) = (Uint8)fAverg;}/*屏幕上偶数行进行处理*/fAverg = (*(Uint8 *)(tempSrcYbuffer + i*numPixels + (j-1))) + (*(Uint8 *)(tempSrcYbuffer + i*numPixels + j)) +(*(Uint8 *)(tempSrcYbuffer + i*numPixels + (j+1))) +(*(Uint8 *)(tempSrcYbuffer + (i+numLines/2)*numPixels + (j-1))) +(*(Uint8 *)(tempSrcYbuffer + (i+numLines/2)*numPixels + j)) +(*(Uint8 *)(tempSrcYbuffer + (i+numLines/2)*numPixels + (j+1))) +(*(Uint8 *)(tempSrcYbuffer + (i+1)*numPixels + (j-1))) +(*(Uint8 *)(tempSrcYbuffer + (i+1)*numPixels + j)) +(*(Uint8 *)(tempSrcYbuffer + (i+1)*numPixels + (j+1)));fAverg = fAverg/8;bTemp = *(Uint8 *)(tempDisYbuffer + (i+numLines/2)*numPixels + j);//当中心像素值bTemp与8个邻近均值fAverg的差超过判定值bEps时取均值fAvergif(abs(bTemp-fAverg)>bEps){*(Uint8 *)(tempDisYbuffer + (i+numLines/2)*numPixels + j) = (Uint8)fAverg;}}}}(2)实验现象:用实验箱实现后的图像对比结果如下原程序图像改进后图像我们可以地看到,用原来的程序滤波后的图像,箱子上的花纹比较模糊,而第二图用改进后的程序处理,可以清晰看到箱子上的花纹,并且颜色也更接近于真正的箱子的颜色,改进后的程序比原程序好了很多。

(3)、刚开始的时候,我们完全不懂那个c程序是什么意思,所以我们就采用了分工的方式,一部分人在找新的算法和编MATLAB程序,陈友为和霍万明研究那个c程序。

后来我们忘了那个试验箱怎么操作了,我们依靠几个人的记忆想起来了,但是却不知道那个怎么显示不了了,后来发现时接口的问题,详细的过程在后面分工里面有。

三、理论验证:MATLAB实验过程和结果分析(1)MATLAB实验验证<1>用普通均值滤波程序实现滤波f=imread('lena.pgm');subplot(1,2,1);imshow(f);y=imnoise(f,'salt & pepper',0.1);[m n]=size(y);x=double(ones(3)/9);for i=2:m-1for j=2:n-1x1=double(y(i-1:i+1,j-1:j+1));g=x.*x1;g=[g(1,:) g(2,:) g(3,:)];g=uint8(sum(g));if(abs(g-y(i,j))>=50)d(i,j)=g;endendendsubplot(1,2,2);imshow(d);<2>用改进后的MATLAB程序实现思路是:我们可以通过对图像的分析,对不同的加噪声图像,可以自适应地采用不同的阈值来确定均值滤波的阈值。

f=imread('lena.pgm');subplot(1,2,1);imshow(f);y=imnoise(f,'salt & pepper',0.1);[m n]=size(y);x=double(ones(3)/9);t=0;for i=2:m-1for j=2:n-1t=(abs(y(i,j))-y(i,j+1))+(abs(y(i,j))-y(i+1,j))+t;这里是我们改进的阈值算法endendt=t/((m-1)*(n-1));for i=2:m-1for j=2:n-1x1=double(y(i-1:i+1,j-1:j+1));g=x.*x1;g=[g(1,:) g(2,:) g(3,:)];g=uint8(sum(g));if(abs(g-y(i,j))>=t) d(i,j)=g;endendendsubplot(1,2,2);imshow(d);由上面图像我们可以看出,用普通的均值滤波,图像会变的很模糊,并且滤波效果也不是很好,改进后的方法,虽然也会出现很模糊的现象,但是可以明显地看出有所变化。

(2)遇到的问题我其实原来写了一个不是这样的程序,(程序在附表二中),但是在终于写好之后却发现有很多错误,改了不下一小时半都没改对,我们就放弃了原来想法,采用了新的算法,更具体的描述在分工中。

四、实验分工及过程:当我们听到这个实验的时候,我们觉得可以改进的程序有很多,于是我们商量了一下,决定每个人都尽其所能多找点资料,然后再筛选一下。

经过筛选我们看到,均值滤波有很多改进的算法,所以我们决定在均值滤波方面进行改进。

决定之后,我们每个人都同时开始看自己找到的资料,谁先看懂了,就试着用MATLAB程序实现。

但是,在我们看的时候,并不是想象中那么顺利,我们的好多资料都不是很容易懂的,这个时候我们中的胡婷婷,宋顾洋就开始一起研究看到的一篇文章,因为他们觉得那个有实现的价值,就是说,对比资料后发现,那个程序会有很大的改进。

陈友为和霍万明开始研究那个C语言程序到底是怎样写的,因为一眼看去,实在不知道那个程序到底说了些什么。

我看到一篇论文,说的是改进的中值滤波,但是我感觉可以用这种思路来修改我们的程序,所以就开始试着用MATLAB程序实现,但是当我编了好久终于写完之后,发现编译总是通不过,而且大家商量后觉得即使成功了,我们也不太可能在试验中用那么麻烦的程序,所以,这个方案被放弃了(这个方案的程序在附表一中写出了)。

这个时候,我们开始商量下面怎么办,我们已经用了太多的时间,应该改变一下思路,与其找MATLAB可以实现的程序,不如直接找我们认为在C语言可以实现的程序,于是我们又分头开始查找。

这个时候,陈友为说他已经搞懂了原来的程序是怎么写了,于是他开始直接写C语言的程序,然后他发现他终于写完了。

这个时候我们发现我们的实验箱不能输出图像了,我们就开始研究这是怎么回事,经过几次的检查,发现是输出的接口松了,这个时候,我们就用新写成的程序替换了原有的C程序,然后我们非常开心得发现,我们的实验成功了!五、实验心得:这次实验,不同于以往的,有一个组长,然后组长就特别负责,一个人弄好了,这次我们五个人的分工就体现了这一点,我们五个人都尽自己的所能,尽力做这个实验,一个人不会就几个人商量,剩下的人就很自觉地做别的事情,提高效率,我觉得正是这样合作并且自觉地态度,让我们在短时间内可以同时找到几种方法,提高了成功的可能性,我觉得这样的方法下来,我们不成功才奇怪呢。

以前也做过组长,但是这样下来,自己学了不少,但组员就不知道,但是这次,我很开心,因为每个人都尽了力,都学到了东西,这就是我们以后工作中的合作方式吧。

这门课让我学到挺多的,我想的是以后就可以利用学过的知识处理相片了。

但是我觉得这门课课时太少,学到的东西太有限了,不能学到更深的比如彩色图像处理,还有以后也许我们也会用到的各种能更清晰处理图像的方法。

相关主题