1. 程式人生 > >matlab學習筆記(九)---頻域增強

matlab學習筆記(九)---頻域增強

1、低通濾波

1.1對影象eight.tif加入椒鹽噪聲後,實現Butterworth低通濾波。

clear;
I1=imread('eight.tif');
subplot(221),imshow(I1),title('原始影象');
I2=imnoise(I1,'salt & pepper');      %加入椒鹽噪聲
subplot(222),imshow(I2),title('噪聲影象');
f=double(I2);
g=fft2(f);        %傅立葉變換
g=fftshift(g)     %轉換資料矩陣
[N1,N2]=size(g);
n=2;
d0=50;
n1=fix(N1/2);
n2=fix(N2/2);
for i=1:N1
    for j=2:N2
        d=sqrt((i-n1)^2+(j-n2)^2);   %計算Butterworth低通濾波轉換函式
        h=1/(1+0.414*(d/d0)^(2*n));
        result1(i,j)=h*g(i,j);
        if(g(i,j)>50)            %進行理想低通濾波
           result2(i,j)=0;
        else 
           result2(i,j)=g(i,j);
        end
    end
end
result1=ifftshift(result1);   %進行反變換
result2=ifftshift(result2);   %進行反變換
X2=ifft2(result1);
X3=uint8(real(X2));
subplot(223),imshow(X3),title('Butterworth濾波影象');
X4=ifft2(result2);
X5=uint8(real(X4));
subplot(224),imshow(X5),title('理想低通濾波影象');
效果圖如下:

1.2利用二維小波分解,實現對影象woman的增強分解

load woman;   
subplot(121),image(X),colormap(map);title('原始影象');
%下面進行影象的增強處理
%用小波函式sym4對X進行二層小波分解
[c,s]=wavedec2(X,2,'sym4');
sizec=size(c);
%對分解係數進行處理,通過處理,突出輪廓部分,弱化細節部分
for i=1;sizec(2)
   if(c(i)>350)
      c(i)=2*c(i);
   else
      c(i)=0.5*c(i);
   end
end
%下面對處理後的係數進行重構
xx=waverec2(c,s,'sym4');
%畫出重構後的影象
subplot(122),image(xx),title('增強影象');
效果圖如下:




2、高通濾波

2.1對影象eight.tif實現Butterworth高通濾波

clear;
I1=imread('eight.tif');
subplot(221),imshow(I1),title('原始影象');
I2=imnoise(I1,'salt & pepper');      %加入椒鹽噪聲
subplot(222),imshow(I2),title('噪聲影象');
f=double(I2);
g=fft2(f);        %傅立葉變換
g=fftshift(g)     %轉換資料矩陣
[N1,N2]=size(g);
n=2;
d0=50;
n1=fix(N1/2);
n2=fix(N2/2);
for i=1:N1
    for j=2:N2
        d=sqrt((i-n1)^2+(j-n2)^2);   %進行Butterworth高通濾波
        if(d==0)
           h=0;
        else
           h=1/(1+(d0/d)^(2*n));
        end
        result1(i,j)=h*g(i,j);
        if(g(i,j)<50)            %進行理想高通濾波
           result2(i,j)=0;
        else 
           result2(i,j)=g(i,j);
        end
    end
end
result1=ifftshift(result1);   %進行反變換
result2=ifftshift(result2);   %進行反變換
X2=ifft2(result1);
X3=uint8(real(X2));
subplot(223),imshow(X3),title('Butterworth濾波影象');
X4=ifft2(result2);
X5=uint8(real(X4));
subplot(224),imshow(X5),title('理想高通濾波影象');
效果圖如下: