MATLAB中值滤波论文

上传人:飞*** 文档编号:35851905 上传时间:2018-03-21 格式:DOC 页数:7 大小:217KB
返回 下载 相关 举报
MATLAB中值滤波论文_第1页
第1页 / 共7页
MATLAB中值滤波论文_第2页
第2页 / 共7页
MATLAB中值滤波论文_第3页
第3页 / 共7页
MATLAB中值滤波论文_第4页
第4页 / 共7页
MATLAB中值滤波论文_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《MATLAB中值滤波论文》由会员分享,可在线阅读,更多相关《MATLAB中值滤波论文(7页珍藏版)》请在金锄头文库上搜索。

1、 1基于 MATLAB 的带噪像的中值滤波摘要:像是一种重要的信息源,通过像处理可以帮助人们了解信息的内涵。本文将纯净的像加入椒盐噪声,然后采用中值滤波的方法对其进行去噪。中值滤波是一种常用的非线性信号处理技术,在像处理中,它对滤除脉冲干扰噪声最为有效。文章阐述了中值滤波的原理、算法以及在像处理中的应用。MATLAB 是一种高效的工程计算语言,在数据处理、像处理、神经网络、小波分析等方面都有广泛的应用。关键词:像,中值滤波,去噪,MATLAB1. 引言20 世纪 20 年代,像处理首次得到应用。上个世纪 60 年代中期,随着计算机科学的发展和计算机的普及,像处理得到广泛的应用。60 年代末期,

2、像处理技术不断完善,逐渐成为一个新兴的学科。像处理中输入的是质量低的像,输出的是改善质量后的像。为了改善像质量,从像中提取有效信息,必须对像进行去噪预处理。根据噪声频谱分布的规律和统计特征以及像的特点,出现了多种多样的去噪方法。经典的去噪方法有:空域合成法,频域合成法和最优合成法等,与之适应的出现了许多应用方法,如均值滤波器,中值滤波器,低通滤波器,维纳滤波器,最小失真法等。这些方法的广泛应用,促进数字信号处理的极大发展,显著提高了像质量。2. 中值滤波在像滤波中,常用的方法是线性滤波技术和非线性滤波技术,线性滤波以其完美的理论基础,数学处理简单、易于采用和硬件实现等优点,一直在像滤波领域中占

3、有重要的地位。线性滤波对加性高斯噪声有较好的平滑作用,但对脉冲信号和其它形式的高频分量抑制效果较差,且模糊信号边缘。非线性滤波是基于对输入信号序列的一种非线性投影关系,常把某一特定的噪声近似为零而保留信号的重要特征,一定程度上克服线性滤波器的不足,非线性滤波早期运用较多的是中值滤波器,其应用于多维信号处理时,对窄脉冲信号具有良好的抑制能力,但中值滤波器对中拖尾(如均匀分布噪声)和短拖尾分布噪声(如高斯噪声),滤波性能较差,且拖尾越短,其滤波能力越差。2中值滤波是一种典型的低通滤波器,属于非线性滤波技术,它的目的是保护像边缘的同时去除噪声。所谓中值滤波,是指把以某点(x,y)为中心的小窗口内的所

4、有象素的灰度按从大到小的顺序排列,若窗口中的象素为奇数个,则将中间值作为(x,y)处的灰度值。若窗口中的象素为偶数个,则取两个中间值的平均值作为(x,y)处的灰度值。中值滤波对去除椒盐噪声很有效。中值滤波器的缺点是对所有象素点采用一致的处理,在滤除噪声的同时有可能改变真正象素点的值,引入误差,损坏像的边缘和细节。该算法对高斯噪声和均匀分布噪声就束手无策。2.1中值滤波基本原理中值滤波是一种非线性滤波,由于它在实际运算过程中并不需要像的统计特性,所以比较方便。中值滤波首先是被应用在一维信号处理技术中,后来被二维像信号处理技术所应用。在一定的条件下,可以克服线性滤波器所带来的像细节模糊,而且对滤除

5、脉冲干扰及像扫描噪声最为有效。但是对一些细节多,特别是点、线、尖顶细节多的像不宜采用中值滤波的方法。中值滤波的基本原理是把数字像或数字序列中一点的值用该点的一个邻域中各点值的中值代替。设有一个一维序列,取窗口长度为 m(m 为奇数),对此序1f2fnf列进行中值滤波,就是从输入序列中相继抽出 m 个数,其中 为窗口的中心位置,vif1if1f1ifvifi,再将这 m 个点按其数值大小排列,取其序号为正中间的那作为出。21mv用数学公式表示为: (2-2)viiviifffMedY,LL21,mvZi例如:有一个序列为0,3,4,0,7,则中值滤波为重新排序后的序列0,0,3,4,7中间的值为

6、 3。此例若用平均滤波,窗口也是取 5,那么平均滤波输出为。因此平均滤波的一般输出为: 8 . 2570430(2-3)mffffZviiviviiLL1Zi对于二位序列进行中值滤波时,滤波窗口也是二维的,但这种二位窗 ijX3口可以有各种不同的形状,如线状、方形、圆形、十字形、圆环形等。二维数据的中值滤波可以表示为: (2-4)为滤波窗口AXMedYijAji,在实际使用窗口时,窗口的尺寸一般先用再取逐渐增大,直到其3355滤波效果满意为止。对于有缓变的较长轮廓线物体的像,采用方形或圆形窗口为宜,对于包含尖顶角物体的像,适宜用十字形窗口。使用二维中值滤波最值得注意的是保持像中有效的细线状物体

7、。与平均滤波器相比,中值滤波器从总体上来说,能够较好地保留原像中的跃变部分。2.2中值滤波的去噪过程本文给定的像为二维信号,在信号中加入指定的椒盐噪声,然后利用中值滤波进行去噪。虽然有关中值滤波的函数是在 matlab 函数库中已经提供,但在像处理中利用中值滤波去除像中的椒盐噪声噪声却是一种有效的方法,利用中值滤波函数去除像中的噪声过程如下:(1)使用 imread()读入原始的彩像。(2)因为使用中值滤波器只能对灰度像进行处理,所以利用 rgb2gray()将彩像转化为灰度像。(3)用 imnoise()在灰度像中加入椒盐噪声。(4)利用 medfilt2()函数进行中值滤波,并在 matl

8、ab 环境下运行。相应的 MATLAB 主程序如下:ClearClose allI=imread(F:/2.bmp);J=rgb2gray(I);J0=imnoise(J,salt J1=medfilt2(J0);subplot(2,2,1);imshow(I);title(原始像);subplot(2,2,2);imshow(J);title(灰度像);subplot(2,2,3);imshow(J0);title(加入噪声后像);subplot(2,2,4);imshow(J1);title(中值滤波后像);4MatLab 自编的均值滤波、中值滤波、高斯滤波 像处理函数。%自编的均值滤波函

9、数。x 是需要滤波的像,n 是模板大小(即 nn)function d=avefilt(x,n) a(1:n,1:n)=1; %a 即 nn 模板,元素全是 1p=size(x); %输入像是 pq 的,且 pn,qnx1=double(x);x2=x1;%A(a:b,c:d)表示 A 矩阵的第 a 到 b 行,第 c 到 d 列的所有元素for i=1:p(1)-n+1for j=1:p(2)-n+1c=x1(i:i+(n-1),j:j+(n-1).*a; %取出 x1 中从(i,j)开始的 n 行 n 列元素与模板相乘s=sum(sum(c); %求 c 矩阵(即模板)中各元素之和x2(i

10、+(n-1)/2,j+(n-1)/2)=s/(n*n); %将模板各元素的均值赋给模板中心位置的元素endend%未被赋值的元素取原值d=uint8(x2);%自编的中值滤波函数。x 是需要滤波的像,n 是模板大小(即 nn)function d=midfilt(x,n) p=size(x); %输入像是 pq 的,且 pn,qnx1=double(x);x2=x1;for i=1:p(1)-n+1for j=1:p(2)-n+1c=x1(i:i+(n-1),j:j+(n-1); %取出 x1 中从(i,j)开始的 n 行 n 列元素,即模板(nn的)e=c(1,:); %是 c 矩阵的第一行

11、for u=2:ne=e,c(u,:); %将 c 矩阵变为一个行矩阵 endmm=median(e); %mm 是中值x2(i+(n-1)/2,j+(n-1)/2)=mm; %将模板各元素的中值赋给模板中心位置的元素endend %未被赋值的元素取原值d=uint8(x2);5%自编的高斯滤波函数,S 是需要滤波的象,n 是均值,k 是方差function d=gaussfilt(k,n,s) Img = double(s); n1=floor(n+1)/2);%计算象中心 for i=1:n for j=1:n b(i,j) =exp(-(i-n1)2+(j-n1)2)/(4*k)/(4*

12、pi*k); end end %生成高斯序列 b。Img1=conv2(Img,b,same); %用生成的高斯序列卷积运算,进行高斯滤波d=uint8(Img1);%此为程序主文件,包含主要功能单元,以及对子函数进行调用try%实验步骤一:彩、灰度变换h=imread(photo.jpg); %读入彩片c=rgb2gray(h); %把彩片转化成灰度片,256 级figure,imshow(c),title(原始象); %显示原始象g=imnoise(c,gaussian,0.1,0.002); %加入高斯噪声figure,imshow(g),title(加入高斯噪声之后的象); %显示加入

13、高斯噪声之后的象%实验步骤二:用系统预定义滤波器进行均值滤波n=input(请输入均值滤波器模板大小n);A=fspecial(average,n); %生成系统预定义的 3X3 滤波器Y=filter2(A,g)/255; %用生成的滤波器进行滤波,并归一化figure,imshow(Y),title(用系统函数进行均值滤波后的结果); %显示滤波后的象%实验步骤三:用自己的编写的函数进行均值滤波Y2=avefilt(g,n); %调用自编函数进行均值滤波,n 为模板大小figure,imshow(Y2),title(用自己的编写的函数进行均值滤波之后的结果); %显示滤波后的象%实验步骤四

14、:用 Matlab 系统函数进行中值滤波n2=input(请输入中值滤波的模板的大小n);Y3=medfilt2(g,n2 n2); %调用系统函数进行中值滤波,n2 为模板大小 figure,imshow(Y3),title(用 Matlab 系统函数进行中值滤波之后的结果); %显示滤波后的象6%实验步骤五:用自己的编写的函数进行中值滤波Y4=midfilt(g,n2); %调用自己编写的函数进行中值滤波,figure,imshow(Y4),title(用自己编写的函数进行中值滤波之后的结果);%实验步骤六:用 matlab 系统函数进行高斯滤波n3=input(请输入高斯滤波器的均值n)

15、;k=input(请输入高斯滤波器的方差n);A2=fspecial(gaussian,k,n3); %生成高斯序列Y5=filter2(A2,g)/255; %用生成的高斯序列进行滤波figure,imshow(Y5),title(用 Matlab 函数进行高斯滤波之后的结果); %显示滤波后的象%实验步骤七:用自己编写的函数进行高斯滤波Y6=gaussfilt(n3,k,g); %调用自己编写的函数进行高斯滤波,n3 为均值,k 为方差figure,imshow(Y6),title(用自编函数进行高斯滤波之后的结果); %显示滤波后的象catch %捕获异常disp(lasterr); %如果程序有异常,输出end分享到搜狐微博*高斯噪声去噪 thr,sorh,keepapp = ddencmp(den,wv,x); x1= wdencmp(gbl,J1,sym4,2,thr,sorh,keepap

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 项目/工程管理

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号