數字圖像處理之平滑濾波


數字圖像處理之平滑濾波

                                         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×37×725×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);
  
         
         

 實驗結果:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM