實驗一:均值濾波對高斯噪聲的效果

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');
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。


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');
J = imnoise(I,type)
J = imnoise(I,type,parameters)
其中J = imnoise(I,type)返回對原始圖像I添加典型噪聲的有噪圖像J。
參數type和parameters用于確定噪聲的類型和相應的參數。
下面的命令是對圖像1.gif分別加入高斯噪聲、椒鹽噪聲和乘性噪聲,其結果如圖所示:

******************************************************************************************************************************************
紅:數字圖像處理視頻教程(兩部)
{中科院版36講視頻教程 + 電子科大版70講視頻教程(岡薩雷斯 第二版)}
? ? 橙:halcon軟件、halcon軟件手把手教破解視頻教程
? ? 黃:數字圖像模式識別demo(C++編寫,在公司也是用C++哦)
? ? 綠:halcon軟件視頻教程、halcon軟件在vs2010中配置
? ? 青:面向對象C++視頻教程
? ? 藍:MFC C++視頻教程
? ? 紫:海量相關文檔資料
? ? http://item.taobao.com/item.htm?spm=a1z10.3.w4002-9510581636.11.VUYzOY&id=43025290175
******************************************************************************************************************************************

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('維納濾波后的圖像');
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叔祖


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('高斯噪聲濾波后的圖像');
