數字圖像處理之平滑濾波
by方陽
版權聲明:本文為博主原創文章,轉載請標出轉載地址
http://www.cnblogs.com/fydeblog/p/6590343.html
1.相關知識
今天介紹平滑濾波的一些知識!
相關知識:均值模板和中值濾波
例如,3X3均值模板(取圖像相鄰區域的像素求和取平均代替中心像素,更高次類似)
[ 1 1 1
1 1 1
1 1 1]
然后說說中值濾波,還是以3X3來說,將3X3區域內的像素按大小值進行排列,取中間的值代替模板中心的值。
好了,基礎說完了,來實際操作吧!
2.內容代碼
2.1 選擇一副具有大小尺寸的物體圖像,分別選擇 3×3,7×7,25×25 等平均模板進行均值濾波模糊處理,並對不同尺寸的濾波器模板操作后的圖像進行比較。
參考代碼:
I=imread('fig620.jpg'); I1=fy_Mean_filter(I,3); I2=fy_Mean_filter(I,7); I3=fy_Mean_filter(I,25); figure; subplot(1,3,1); imshow(I1); title('3X3'); subplot(1,3,2); imshow(I2); title('7X7'); subplot(1,3,3); imshow(I3); title('25X25');
fy_Mean_filter函數參考代碼:
%實現均值濾波器 %image_in為輸入圖像,N選擇幾乘幾的算子,image_out為輸出圖像 % by 方陽 function image_out=fy_Mean_filter(image_in,N) [m,n]=size(image_in); N=ones(N); [a,b]=size(N); n=n/3;%由於我的灰度圖像是314x323x3的,所以除了3,你們如果是PxQ的,就不要加了 A=zeros(m+2*(a-1),n+2*(b-1));%構造矩陣(0填充) B=A;%用來存放均值后A的值 C=zeros(m,n);%存最后的輸出結果 for i=a:m+a-1 for j=b:n+b-1 A(i,j)= image_in(i-a+1,j-b+1);%填充圖像到A end end [L,T]=size(A); %以下是實現均值相關運算 for i=1:L-a+1 for j=1:T-b+1 for p=1:a for q=1:b B(i+(a-1)/2,j+(b-1)/2)=B(i+(a-1)/2,j+(b-1)/2)+A(p+i-1,q+j-1); end end end end B=uint8(B/(a*b)); %對運算完的B進行剪切,恢復出均值后的圖像 for x=a:m+a-1 for y=b:n+b-1 C(x-a+1,y-b+1)=B(x,y); end end image_out=uint8(C);
運行結果:
可見模板越大,圖像越平滑,但也越模糊。
2.2 選擇一副圖像,對圖像加入椒鹽噪聲,檢驗兩種濾波模板(3×3 平均模板和 3×3 中值濾波器)對噪聲的濾波效果。
參考代碼:
I4=imread('lena.bmp'); I5=imnoise(I4,'salt & pepper',0.02); I6=fy_Mean_filter(I5,3); I7=fy_Mid_Filter(I5,3); figure; subplot(2,2,1); imshow(I4); title('原圖'); subplot(2,2,2); imshow(I5); title('加椒鹽噪聲后的圖像'); subplot(2,2,3); imshow(I6); title('均值濾波后的圖像'); subplot(2,2,4); imshow(I7); title('中值濾波后的圖像');
fy_Mid_Filter函數的參考代碼(與fy_Mean_filter類似):
%該函數實現中值濾波 function image_out=fy_Mid_Filter(image_in,N) [m,n]=size(image_in); n=n/3; A=zeros(m+2*(N-1),n+2*(N-1));%構造矩陣 B=A;%用來存放均值后A的值 C=zeros(m,n);%存最后的輸出結果 for i=N:m+N-1 for j=N:n+N-1 A(i,j)= image_in(i-N+1,j-N+1);%填充圖像到A end end [L,T]=size(A); for i=1:L-N+1 for j=1:T-N+1 c=A(i:i+(N-1),j:j+(N-1)); e=c(1,:); %是c矩陣的第一行 for u=2:N e=[e,c(u,:)]; %將c矩陣變為一個行矩陣 end mm=median(e); %mm是中值 B(i+(N-1)/2,j+(N-1)/2)=mm; end end for x=N:m+N-1 for y=N:n+N-1 C(x-N+1,y-N+1)=B(x,y); end end image_out=uint8(C);
實驗結果:
由此可見,在濾除椒鹽噪聲方面,中值濾波要比均值濾波要好!