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');
h = fspecial(type)
h = fspecial(type,parameters)
參數type制定算子類型,parameters指定相應的參數,具體格式爲:
type='average',爲均值濾波,參數爲n,代表模版尺寸,用向量表示,默認值爲[3,3]。
type= 'gaussian',爲高斯低通濾波器,參數有兩個,n表示模版尺寸,默認值爲[3,3],sigma表示濾波器的標準差,單位爲像素,默認值爲
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。
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');
J = imnoise(I,type)
J = imnoise(I,type,parameters)
其中J = imnoise(I,type)返回對原始圖像I添加典型噪聲的有噪圖像J。
參數type和parameters用於確定噪聲的類型和相應的參數。
下面的命令是對圖像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('維納濾波後的圖像');
C = conv2(A,B)
C = conv2(A,B)返回矩陣A和B的二維卷積C。若A爲ma×na的矩陣,B爲mb×nb的矩陣,則C的大小爲(ma+mb+1)×(na+nb+1)。
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(a,b)產生a行b列全1數組
ones(a)產生a行a列全1叔祖
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('高斯噪聲濾波後的圖像');
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('第二次去噪圖像');
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('第二次去噪圖像');
Medfilt2函數的語法格式爲:
B = medfilt2(A) 用3×3的濾波窗口對圖像A進行中值濾波。
B = medfilt2(A,[m n]) 用指定大小爲m×n的窗口對圖像A進行中值濾波。