數字圖像處理之平滑濾波
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);
實驗結果:

由此可見,在濾除椒鹽噪聲方面,中值濾波要比均值濾波要好!
