图像降噪算法matlab,数字图像去噪典型算法及matlab实现

I=imread('C:\Documents and Settings\Administrator\桌面\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',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用法

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],默认值为0.2。type= 'log',为拉普拉斯高斯算子,参数有两个,n表示模版尺寸,默认值为[3,3],sigma为滤波器的标准差,单位为像素,默认值为0.5

type= 'prewitt',为prewitt算子,用于边缘增强,无参数。type= 'sobel',为著名的sobel算子,用于边缘提取,无参数。type= 'unsharp',为对比度增强滤波器,参数alpha用于控制滤波器的形状,范围为[0,1],默认值为0.2。

运行效果见图1:

图像降噪算法matlab,数字图像去噪典型算法及matlab实现_第1张图片

据我目测,使用均值滤波去噪(高斯噪声)效果选用的邻域半径越大效果越好,当然其代价也会更大,另外确切的去噪效果的好坏还需要用SNR等数据来度量。

实验二:二维自适应维纳滤波对高斯噪声的滤除效果I=imread('C:\Documents and Settings\Administrator\桌面\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('原始图像');

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,n])返回有噪声图像I经过wierner(维纳)滤波后的图像,[m,n]指定滤波器窗口大小为m*n,默认值为3*3,J=wiener2(I,[m,n],noise)指定噪声的功率,[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分别加入高斯噪声、椒盐噪声和乘性噪声,其结果如图所示:

图像降噪算法matlab,数字图像去噪典型算法及matlab实现_第2张图片实验三:对加入椒盐噪声的图像分别作均值、中值和维纳滤波I=imread(1.gif');

J1=imnoise(I,'gaussian',0,0.02);

J2=imnoise(I,'salt & pepper',0.02);

J3=imnoise(I,'speckle',0.02);

运行效果见图2

I=imread('C:\Documents and Settings\Administrator\桌面\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对受椒盐噪声干扰的图像滤波

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,其语法格式为:C = conv2(A,B)

C = conv2(A,B)返回矩阵A和B的二维卷积C。若A为ma×na的矩阵,B为mb×nb的矩阵,则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函数进行计算。Fspecial函数用于创建预定义的滤波算子,其语法格式为:h = fspecial(type)

h = fspecial(type,parameters)参数type制定算子类型,parameters指定相应的参数,具体格式为前文已有叙述。

ones产生全1数组,zeros产生全零数组。ones(a,b)产生a行b列全1数组ones(a)产生a行a列全1叔祖

运行效果见图3:

图像降噪算法matlab,数字图像去噪典型算法及matlab实现_第3张图片

通过图3我们也可得出结论,即中值滤波对于去除椒盐噪声效果最好,而维纳滤波去除效果则较差。中值滤波对于去除椒盐噪声效果明显,是因为椒盐噪声只在画面上的部分点随机出现,而中值滤波根据数据排序,将未被污染的点代替噪声点的值的概率较大,所以抑制效果好。对点、线和尖顶较多的图像不宜采用中值滤波,因为一些细节点可能被当成噪声点。

实验四:分别使用二维统计滤波对椒盐噪声和高斯噪声进行滤波

I=imread('C:\Documents and Settings\Administrator\桌面\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);imshow(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:

效果见图4:

图像降噪算法matlab,数字图像去噪典型算法及matlab实现_第4张图片

PS:MATLAB小波分析工具箱提供的用于图像去噪的函数有wrcoef2和wpdencmp,其语法格式分别为:

X=wrcoef2(‘type’,C,S,’wname’)

[xd,treed,datad,perf0,perfl2]=wpdencmp(x,sorh,N,’wname’,crit,par,keepapp)

其中,X=wrcoef2(‘type’,C,S,’wname’)返回基于小波分解结构[C,S]的小波重构图像X。参数“type”等于a表示重构近似系数;等于h表示重构水平细节系数;等于v表示重构垂直细节系数,等于d表示重构对角细节系数。

[xd,treed,datad,perf0,perfl2]=wpdencmp(x,sorh,N,’wname’,crit,par,keepapp)是通过小波包定限(阈值化),返回输入信号或图像X的除噪结果xd。输入参数中,[treed,datad]为xd的最佳小波包分解结构;perfl2和perf0表示L^2复原和压缩百分数;perf12=100*(xd的小波包系数向量范数/X的小波包系数向量范数) ^2。Keepapp=1表示近似系数不能阈值化,否则可以阈值化;sorh=’s’为软阈值化,h为硬阈值化。

实验五:利用wrcoef2函数进行图像去噪

其程序代码如下:I=imread('C:\Documents and Settings\Administrator\桌面\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(I);

title('原始图像');

subplot(2,2,2);imshow(J);

title('含噪图像');

subplot(2,2,3);imshow(J1,[]);

title('第一次去噪图像');

subplot(2,2,4);imshow(J2,[]);

title('第二次去噪图像');

运行结果如图5:

图像降噪算法matlab,数字图像去噪典型算法及matlab实现_第5张图片

实验六:利用wpdencmp函数进行图像去噪

其程序代码如下:

I=imread('C:\Documents and Settings\Administrator\桌面\1.gif');

I=im2double(I);

subplot(2,2,1);imshow(I);

title('原始图像');

J=imnoise(I,'gaussian',0,0.05);

subplot(2,2,2);imshow(J);

title('含噪图像');

thr=0.1;sorh='s';

crit='shannon';

keepapp=0;

J1=wpdencmp(J,sorh,3,'sym4',crit,thr,keepapp);

subplot(2,2,3);imshow(J1);

title('全局阈值去噪图像');

J2=medfilt2(J1);

subplot(2,2,4);imshow(J2);

title('第二次去噪图像');

PS:在MATLAB图像处理工具箱中,提供了medfilt2函数用于实现中值滤波。Medfilt2函数的语法格式为:B = medfilt2(A)用3×3的滤波窗口对图像A进行中值滤波。B = medfilt2(A,[m n])用指定大小为m×n的窗口对图像A进行中值滤波。

效果如图6:

图像降噪算法matlab,数字图像去噪典型算法及matlab实现_第6张图片

图像处理的一些学习资源:

…………

你可能感兴趣的:(图像降噪算法matlab)