《matlab数字图像处理源代码.doc》由会员分享,可在线阅读,更多相关《matlab数字图像处理源代码.doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数字图像去噪典型算法及matlab实现希望得到大家的指点和帮助图像去噪是数字图像处理中的重要环节和步骤。去噪效果的好坏直接影响到后续的图像处理工作如图像分割、边缘检测等。图像信号在产生、传输过程中都可能会受到噪声的污染,一般数字图像系统中的常见噪声主要有:高斯噪声(主要由阻性元器件内部产生)、椒盐噪声(主要是图像切割引起的黑图像上的白点噪声或光电转换过程中产生的泊松噪声)等;目前比较经典的图像去噪算法主要有以下三种:均值滤波算法:也称线性滤波,主要思想为邻域平均法,即用几个像素灰度的平均值来代替每个像素的灰度。有效抑制加性噪声,但容易引起图像模糊,可以对其进行改进,主要避开对景物边缘的平滑处理
2、。中值滤波:基于排序统计理论的一种能有效抑制噪声的非线性平滑滤波信号处理技术。中值滤波的特点即是首先确定一个以某个像素为中心点的邻域,一般为方形邻域,也可以为圆形、十字形等等,然后将邻域中各像素的灰度值排序,取其中间值作为中心像素灰度的新值,这里领域被称为窗口,当窗口移动时,利用中值滤波可以对图像进行平滑处理。其算法简单,时间复杂度低,但其对点、线和尖顶多的图像不宜采用中值滤波。很容易自适应化。Wiener维纳滤波:使原始图像和其恢复图像之间的均方误差最小的复原方法,是一种自适应滤波器,根据局部方差来调整滤波器效果。对于去除高斯噪声效果明显。实验一:均值滤波对高斯噪声的效果I=imread(C
3、:Documents and SettingsAdministrator桌面1.gif);%读取图像 J=imnoise(I,gaussian,0,0.005);%加入均值为0,方差为0.005的高斯噪声 subplot(2,3,1);imshow(I); title(原始图像); subplot(2,3,2); imshow(J); title(加入高斯噪声之后的图像); %采用MATLAB中的函数filter2对受噪声干扰的图像进行均值滤波 K1=filter2(fspecial(average,3),J)/255; %模板尺寸为3 K2=filter2(fspecial(average,
4、5),J)/255;% 模板尺寸为5 K3=filter2(fspecial(average,7),J)/255; %模板尺寸为7 K4= filter2(fspecial(average,9),J)/255; %模板尺寸为9 subplot(2,3,3);imshow(K1); title(改进后的图像1); subplot(2,3,4); imshow(K2); title(改进后的图像2); subplot(2,3,5);imshow(K3); title(改进后的图像3); subplot(2,3,6);imshow(K4); title(改进后的图像4); PS:filter2用法:
5、filter2用法fspecial函数用于创建预定义的滤波算子,其语法格式为:h = fspecial(type)h = fspecial(type,parameters)参数type制定算子类型,parameters指定相应的参数,具体格式为:type=average,为均值滤波,参数为n,代表模版尺寸,用向量表示,默认值为3,3。type= gaussian,为高斯低通滤波器,参数有两个,n表示模版尺寸,默认值为3,3,sigma表示滤波器的标准差,单位为像素,默认值为0.5。type= laplacian,为拉普拉斯算子,参数为alpha,用于控制拉普拉斯算子的形状,取值范围为0,1,默
6、认值为0.2。type= log,为拉普拉斯高斯算子,参数有两个,n表示模版尺寸,默认值为3,3,sigma为滤波器的标准差,单位为像素,默认值为0.5type= prewitt,为prewitt算子,用于边缘增强,无参数。type= sobel,为著名的sobel算子,用于边缘提取,无参数。type= unsharp,为对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为0,1,默认值为0.2。据我目测,使用均值滤波去噪(高斯噪声)效果选用的邻域半径越大效果越好,当然其代价也会更大,另外确切的去噪效果的好坏还需要用SNR等数据来度量。实验二:二维自适应维纳滤波对高斯噪声的滤除效果I=
7、imread(C:Documents and SettingsAdministrator桌面1.gif); %读取图像 J=imnoise(I,gaussian,0,0.005); %加入均值为0,方差为0.005的高斯噪声 K2=wiener2(J,3 3); %对加噪图像进行二维自适应维纳滤波 K2=wiener2(J,5 5); %对加噪图像进行二维自适应维纳滤波 K2=wiener2(J,7 7); %对加噪图像进行二维自适应维纳滤波 K2=wiener2(J,9 9); %对加噪图像进行二维自适应维纳滤波 subplot(2,3,1);imshow(I); title(原始图像);
8、subplot(2,3,2);imshow(J); title(加噪图像); subplot(2,3,3);imshow(K1); title(恢复图像1); subplot(2,3,4);imshow(K2); title(恢复图像2); subplot(2,3,5);imshow(K3); title(恢复图像3); subplot(2,3,6);imshow(K4); title(恢复图像3); PS:维纳滤波的两个函数wiener2与deconvwnr都能够完成维纳滤波的功能, deconvwnr强调图象复原方面,wiener2强调图象空间域锐化的作用,其中J=wiener2(I,m,
9、n)返回有噪声图像I经过wierner(维纳)滤波后的图像,m,n指定滤波器窗口大小为m*n,默认值为3*3,J=wiener2(I,m,n,noise)指定噪声的功率,J,noise=wiener2(I,m,n)在图像滤波的同时,返回噪声功率的估计值noise。:维纳滤波的两个函数wiener2与deconvwnr都能够完成维纳滤波的功能, deconvwnr强调图象复原方面,wiener2强调图象空间域锐化的作用,其中J=wiener2(I,m,n)返回有噪声图像I经过wierner(维纳)滤波后的图像,m,n指定滤波器窗口大小为m*n,默认值为3*3,J=wiener2(I,m,n,no
10、ise)指定噪声的功率,J,noise=wiener2(I,m,n)在图像滤波的同时,返回噪声功率的估计值noise。imnoise的语法格式为J = imnoise(I,type)J = imnoise(I,type,parameters)其中J = imnoise(I,type)返回对原始图像I添加典型噪声的有噪图像J。参数type和parameters用于确定噪声的类型和相应的参数。下面的命令是对图像1.gif分别加入高斯噪声、椒盐噪声和乘性噪声,其结果实验三:对加入椒盐噪声的图像分别作均值、中值和维纳滤波I=imread(1.gif); J1=imnoise(I,gaussian,0,
11、0.02); J2=imnoise(I,salt & pepper,0.02); J3=imnoise(I,speckle,0.02); 运行效果见图2 I=imread(C:Documents and SettingsAdministrator桌面1.gif); J=imnoise(I,salt & pepper,0.02); %h=ones(3,3)/9;%产生3*3的全1数组 %B=conv2(J,h);%卷积运算 K2=filter2(fspecial(average,3),J)/255; %均值滤波模板尺寸为3 K= medfilt2(J);%采用二维中值滤波函数medfilt2对受
12、椒盐噪声干扰的图像滤波 K1=wiener2(J,3 3); %对加噪图像进行二维自适应维纳滤波 subplot(2,3,1);imshow(I); title(原始图像); subplot(2,3,2);imshow(J); title(加噪图像); subplot(2,3,3);imshow(K2); title(均值滤波后的图像); subplot(2,3,4);imshow(K); title(中值滤波后的图像); subplot(2,3,5);imshow(K1); title(维纳滤波后的图像); PS:MATLAB中提供了卷积运算的函数命令conv2,其语法格式为:MATLAB中
13、提供了卷积运算的函数命令conv2,其语法格式为:C = conv2(A,B)C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为mana的矩阵,B为mbnb的矩阵,则C的大小为(ma+mb+1)(na+nb+1)。MATLAB图像处理工具箱提供了基于卷积的图象滤波函数filter2,filter2的语法格式为:Y = filter2(h,X)其中Y = filter2(h,X)返回图像X经算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。例如:其实filter2和conv2是等价的。MATLAB在计算filter2时先将卷积核旋转180度,再调用conv2函数进行计算。Fsp
14、ecial函数用于创建预定义的滤波算子,其语法格式为:h = fspecial(type)h = fspecial(type,parameters)参数type制定算子类型,parameters指定相应的参数,具体格式为前文已有叙述。ones产生全1数组,zeros产生全零数组。ones(a,b)产生a行b列全1数组ones(a)产生a行a列全1数祖 通过图3我们也可得出结论,即中值滤波对于去除椒盐噪声效果最好,而维纳滤波去除效果则较差。中值滤波对于去除椒盐噪声效果明显,是因为椒盐噪声只在画面上的部分点随机出现,而中值滤波根据数据排序,将未被污染的点代替噪声点的值的概率较大,所以抑制效果好。对
15、点、线和尖顶较多的图像不宜采用中值滤波,因为一些细节点可能被当成噪声点。实验四: 分别使用二维统计滤波对椒盐噪声和高斯噪声进行滤波I=imread(C:Documents and SettingsAdministrator桌面1.gif); J1=imnoise(I,salt & pepper,0.004); subplot(2,3,1);imshow(I); title(原始图像); subplot(2,3,2);imshow(J1); title(加椒盐噪声后的图像); J= ordfilt2(J1,5,ones(3,4);% 进行二维统计顺序过滤 subplot(2,3,3);imsho
16、w(J); title(椒盐噪声滤波后的图像); J2=imnoise(I,gaussian,0,0.004); subplot(2,3,4);imshow(J2); title(加高斯噪声后的图像); J3= ordfilt2(J2,5,ones(3,4); subplot(2,3,5);imshow(J3); title(高斯噪声滤波后的图像); PS: PS:MATLAB小波分析工具箱提供的用于图像去噪的函数有wrcoef2和wpdencmp,其语法格式分别为:X=wrcoef2(type,C,S,wname)xd,treed,datad,perf0,perfl2=wpdencmp(x,
17、sorh,N,wname,crit,par,keepapp)其中,X=wrcoef2(type,C,S,wname)返回基于小波分解结构,的小波重构图像。参数“type”等于a表示重构近似系数;等于h表示重构水平细节系数;等于v表示重构垂直细节系数,等于d表示重构对角细节系数。xd,treed,datad,perf0,perfl2=wpdencmp(x,sorh,N,wname,crit,par,keepapp)是通过小波包定限(阈值化),返回输入信号或图像的除噪结果xd。输入参数中,treed,datad为xd的最佳小波包分解结构;perfl2和perf0表示L2复原和压缩百分数;perf1
18、2=100*(xd的小波包系数向量范数/X的小波包系数向量范数) 2。Keepapp=1表示近似系数不能阈值化,否则可以阈值化;sorh=s为软阈值化,h为硬阈值化。 实验五:利用wrcoef2函数进行图像去噪其程序代码如下:I=imread(C:Documents and SettingsAdministrator桌面1.gif); J=imnoise(I,gaussian,0,0.005); c,l=wavedec2(J,2,sym4); J1= wrcoef2(a,c,l,sym4,1); J2= wrcoef2(a,c,l,sym4,2); subplot(2,2,1);imshow(
19、I); title(原始图像); subplot(2,2,2);imshow(J); title(含噪图像); subplot(2,2,3);imshow(J1,); title(第一次去噪图像); subplot(2,2,4);imshow(J2,); title(第二次去噪图像); 实验六:利用wpdencmp函数进行图像去噪其程序代码如下:PS:在MATLAB图像处理工具箱中,提供了medfilt2函数用于实现中值滤波。Medfilt2函数的语法格式为:B = medfilt2(A) 用33的滤波窗口对图像A进行中值滤波。B = medfilt2(A,m n) 用指定大小为mn的窗口对图
20、像A进行中值滤波。 22型 波值 对口 大指实( 波中进对窗 用 =:格语 。滤实数 供,工像 下下去图进 用 像去第到( 家), 是帮和),( 像 )噪去( 典等声泊产中换或噪的的起图主声、)件性由声斯要声常统字一污声受可程输产信图缘边图工像的响直好效骤和环中; 像( ; 法, ;图 算种种以)( ),:理理缘物开主改进可像起但声制效灰像个值的灰几,均为思,性也(基 ;图计原理 一) 抑(制 ), , 化适易。值用图多线、但杂时单法处行像可波利,窗口称领,值度中值其取度素中将,等十圆也邻为,邻心像以个先点波值技处信平线,( 纳 波; ,值显显效斯于效滤调部据器适种,原的误间像恢像原 波 ;
21、, 效的噪 ) ; 像进 ;( , 图进( ; ) ( )像后 ;, )图的( ; 寸% ), ( = 为% , 为 % ( ( = 尺% / , =波均像扰声 函 采)图之噪加( ;( , 像原 ; ,( 声 0为,均入 00 , = 取) .面 :0., ( 法 ( 用下法码去图进 函 用:化值 用值于为 ;定阈可的,能系算示 语。 范系为小/量系 波 0 ;压原 表 构包最 的 中 入果 除像号(入返值 限波通 是 , , ) 参 0制 , ,类 ,数 节角 示于,细构 表 等系平构相示;系参构 ,” 数。图为波:解波 于) ( , 值 参, ,, 尺 ,用 向, ,, ,为 为分法语
22、和 = 有的 图 于提具波 ;图声。值认像单准器波 值,尺表,有波通为噪 ;( , ) (, ( 像的噪高 ) 0.0 = 像后波椒( 使 .认,0围,的制于 参滤增, 数无缘边算 著 数,边, .值,位,的滤 ,认寸版 个有子高拉, .认0围取形子拉拉, ,斯拉 =;( ;, 维量来据 需好的去外大会其然果越径的选)高去均 适 滤序纳统行;对), 噪 效效 的声椒 ; 像 ( ) ( ; 恢( ) ), ) 复 )( ;) 图恢 ) ( ) ( 像( ) ( 滤维维进噪%; , = 波适二像噪 波纳应行像对 ) 滤应维行图%) ,( 斯 .差,均加)00 ( 取% ( ; 图( 滤 ; 两
23、;数,( 0, 的。 计功噪,波图在 = 功声定 , ,( , 为,为口波定,图滤纳 像噪有 ,作域象强 ,复调 ,的滤成都 两 数 ) 面与 能 : 维滤纳行斯声盐波能维,使分点 声被点 节因滤用 不的较图和对复好制,较,的声替 染未 将数波强中而出象部的在盐为化,效盐用去对中中差 效波维 而最盐 去波值(,出们图 通数全列产返( 数列生 :结,性和椒、高加 是的面数相和声确 参 图声噪 图回返 ( =中 , , 法 。 估功回,的图, ( 功噪指 =*为 为口器滤,的滤维 声 零 , 波波值值别图噪椒 产述 叙已式 ,的应指 ),子制 参)= ( ( ) 格 像图纳维 ; )图后滤 ; ; , 像的值 ) ( ;图加 ), )图原 ; 波维适二图加; = 的声椒 数值维采) 寸模值 /, ( ( 运%) =% 全*产 % 0, ; 桌 图效 ., ( ;0, & ( 00 语,滤定建函 。行 用0转核将 算在 。等 和 实:例小像图 图,的后算像返,( 其 ( = :法 , 函滤的基提具理 )+ ) +(的阵 矩 为积二和阵),( = =为 格法 命供的积卷 为算式其 令
限制150内