天天看點

頻域濾波(matlab)

頻域濾波

頻率域圖像增強首先通過傅裡葉變換将圖像從空間域轉變成頻率域,然後在頻率域内對圖像進行處理,最後通過傅裡葉反變換轉換到空間域。頻率域内的圖像增強通常包括低通濾波、高通濾波、同态濾波等。

設f(x,y)為原始圖像函數,h(x,y)為濾波器脈沖響應函數,則空域内的濾波是基于卷積運算的:g(x,y) = f(x,y)*h(x,y),其中h(x,y)可以是低通或高通濾波,g(x,y)為空域濾波的輸出圖像函數,根據卷積定理,上式的傅裡葉變換如下:G(u,v) = F(u,v)H(u,v)。其中G(u,v)、F(u,v)和H(u,v)分别對g(x,y)、f(x,y)和h(x,y)的傅裡葉變換。H(u,v)為濾波系統的傳遞函數,根據具體的要求進行設計,再與F(u,v)相乘,即可獲得頻譜改善的G(u,v),進而實作低通或高通等濾波。最後求G(u,v)的傅裡葉反變換,可以獲得濾波後的圖像g(x,y)。頻域濾波的關鍵是G(u,v)的設計。

低通濾波

讓低頻率通過而濾掉或衰減高頻,過濾掉包含在高頻中的噪聲,是以低通濾波的效果是圖像去噪聲平滑增強,但同時抑制圖像的邊界,造成圖像不同程度上的模糊。對于大小為MxN的圖像,頻率點(u,v)與頻域中心的距離為D(u,v),其表達式為:

頻域濾波(matlab)

理想低通濾波器

理想低通濾波器在半徑為D0的範圍内,所有頻率都可以沒有衰減的通過濾波器,該半徑之外的所有頻率都完全被衰減掉。理想低通濾波器具有平滑圖像的作用,但是有嚴重的振鈴現象。

頻域濾波(matlab)
>> I=imread('E:\persional\matlab\images\ad1.tif');
>> I = im2double(I);
>> M = 2*size(I,1);%濾波的行數
>> N = 2*size(I,2);%濾波的列數
>> u = -M/2:(M/2-1);
>> v = -N/2:(N/2-1);
>> [u,v] = meshgrid(u,v);
>> D = sqrt(u.^2+v.^2);
>> D0 = 80;%截至頻率
>> H = double(D<D0);%理想低通濾波器
>> J = fftshift(fft2(I,size(H,1),size(H,2)));%時域圖像轉換到頻域
>> K = J.*H;%濾波處理
>> L = ifft2(ifftshift(K));%傅裡葉反變換
>> L = L(1:size(I,1),1:size(I,2));
>> figure,
>> subplot(121),imshow(I);%原圖
>> subplot(122),imshow(L);%顯示濾波後的圖像
           
頻域濾波(matlab)

巴特沃斯低通濾波器

頻域濾波(matlab)

D0表示:巴特沃斯低通濾波器的截止頻率,參數n為巴特沃斯濾波器的階數,n越大則濾波器的形狀越陡峭。

>> I=imread('E:\persional\matlab\images\ad1.tif');
>> I = im2double(I);
>> M = 2*size(I,1);
>> N = 2*size(I,2);
>> u = -M/2:(M/2-1);
>> v = -N/2:(N/2-1);
>> [u,v] = meshgrid(u,v);
>> D = sqrt(u.^2+v.^2);
>> D0=50;
>> n = 6;
>> H = 1./(1+(D./D0).^(2*n));%設計巴特沃斯濾波器
>> J = fftshift(fft2(I,size(H,1),size(H,2)));
>> K = J.*H;
>> L = ifft2(ifftshift(K));
>> L = L(1:size(I,1),1:size(I,2));
>> figure,
>> subplot(121),imshow(I);
>> subplot(122),imshow(L);
           
頻域濾波(matlab)

高通濾波

衰減或抑制低頻分量,讓高頻分量通過稱為高通濾波,其作用是使圖像得到銳化處理,,突出圖像的邊界。經理想高頻濾波後的圖像把資訊豐富的低頻去掉了,丢掉了許多必要的資訊。一般情況下,高通濾波對噪聲沒有任何抑制作用,若簡單的使用高通濾波,圖像品質可能由于噪聲嚴重難以達到滿意的改善的效果。為了既加強圖像的細節又抑制噪聲,可采用高頻加濾波。這種濾波器實際上是由一個高通濾波和一個全通濾波器構成的,這樣便能夠在高通濾波的基礎上保留低頻資訊。

理想高通濾波器

頻域濾波(matlab)
>> I=imread('E:\persional\matlab\images\ad1.tif');
>> I = im2double(I);
>> M = 2*size(I,1);%濾波的行數
>> N = 2*size(I,2);%濾波的列數
>> u = -M/2:(M/2-1);
>> v = -N/2:(N/2-1);
>> [u,v] = meshgrid(u,v);
>> D = sqrt(u.^2+v.^2);
>> D0 = 80;%截至頻率
>> H = double(D>D0);%理想低通濾波器
>> J = fftshift(fft2(I,size(H,1),size(H,2)));%時域圖像轉換到頻域
>> K = J.*H;%濾波處理
>> L = ifft2(ifftshift(K));%傅裡葉反變換
>> L = L(1:size(I,1),1:size(I,2));
>> figure,
>> subplot(121),imshow(I);%原圖
>> subplot(122),imshow(L);%顯示濾波後的圖像
           
頻域濾波(matlab)

巴特沃斯高通濾波器

頻域濾波(matlab)
>> I=imread('E:\persional\matlab\images\ad1.tif');
>> I=imread('E:\persional\matlab\images\ad2.tif');
>> I = im2double(I);
>> M = 2*size(I,1);
>> N = 2*size(I,2);
>> u = -M/2:(M/2-1);
>> v = -N/2:(N/2-1);
>> [U,V] = meshgrid(u,v);
>> D = sqrt(U.^2+V.^2);
>> D0 = 30;
>> n = 6;
>> H = 1./(1+(D0./D).^(2*n));%設計濾波器
>> J = fftshift(fft2(I,size(H,1),size(H,2)));
>> K = J.*H;
>> L = ifft2(ifftshift(K));
>> L = L(1:size(I,1),1:size(I,2));
>> figure,
>> subplot(121),imshow(I);
>> subplot(122),imhsow(J);
           
頻域濾波(matlab)

高斯高通濾波器

頻域濾波(matlab)
>> I=imread('E:\persional\matlab\images\ad1.tif');
>> I=imread('E:\persional\matlab\images\ad2.tif');
>> I = im2double(I);
>> M = 2*size(I,1);
>> N = 2*size(I,2);
>> u = -M/2:(M/2-1);
>> v = -N/2:(N/2-1);
>> [U,V] = meshgrid(u,v);
>> D = sqrt(U.^2+V.^2);
>> D0 = 30;
>> n = 6;
>> H = 1-exp(-(D.^2)./(2*(D0^2)));%設計濾波器
>> J = fftshift(fft2(I,size(H,1),size(H,2)));
>> K = J.*H;
>> L = ifft2(ifftshift(K));
>> L = L(1:size(I,1),1:size(I,2));
>> figure,
>> subplot(121),imshow(I);
>> subplot(122),imhsow(J);
           
頻域濾波(matlab)

帶阻濾波器

帶阻濾波器是用來抑制距離頻率中心一定距離的一個圓環區域的頻率,可以消除一定頻率範圍的周期噪聲。

理想帶阻濾波器

頻域濾波(matlab)

D0為需要阻止的頻率點與頻率中心的距離,W為帶阻濾波器的寬度。

巴特沃斯帶阻濾波器

頻域濾波(matlab)

D0為需要阻止的頻率點與頻率中心的距離,W為帶阻濾波器的寬度,n為巴特沃斯濾波器的階數。

高斯帶阻濾波器

頻域濾波(matlab)

D0為需要阻止的頻率點與頻率中心的距離,W為帶阻濾波器的寬度。

>> I=imread('E:\persional\matlab\images\ad1.tif');
>> I = im2double(I);
>> M = 2*size(I,1);%濾波的行數
>> N = 2*size(I,2);%濾波的列數
>> u = -M/2:(M/2-1);
>> v = -N/2:(N/2-1);
>> [u,v] = meshgrid(u,v);
>> D = sqrt(u.^2+v.^2);
>> D0 = 60;%截至頻率
>> W = 30;%濾波器寬度
>> H = double(or(D<(D0-W/2),D>D0+W/2));%設計濾波器
>> J = fftshift(fft2(I,size(H,1),size(H,2)));%時域圖像轉換到頻域
>> K = J.*H;%濾波處理
>> L = ifft2(ifftshift(K));%傅裡葉反變換
>> L = L(1:size(I,1),1:size(I,2));
>> figure,
>> subplot(121),imshow(I);%原圖
>> subplot(122),imshow(L);%顯示濾波後的圖像
           
頻域濾波(matlab)

同态濾波

同态濾波是一種特殊的濾波技術,可以壓縮圖像灰階的動态範圍,且增強對比度。

同态濾波的目的:消除不均勻照度的影響而又不損失圖象細節。其依據:圖象的灰階由照射分量和反射分量合成。反射分量反映圖象内容,随圖象細節不同在空間上作快速變化。照射分量在空間上通常均具有緩慢變化的性質。照射分量的頻譜落在空間低頻區域,反射分量的頻譜落在空間高頻區。

步驟如下:

圖像f(x,y)由于照射分量i(x,y)和反射分量r(x,y)表示:f(x,y) = i(x,y)*r(x,y)

對圖像取對數:z(x,y) = ln[f(x,y)]=ln[i(x,y)]+ln[r(x,y)]

進行傅裡葉變換:F{z(x,y)} =F{ln[f(x,y)]}=F{ln[i(x,y)]}+F{ln[r(x,y)]},即為Z(u,v) = I(u,v)+R(u,v)

設計濾波器的傳遞函數:H(u,v),S(u,v) = Z(u,v)*H(u,v)

進行傅裡葉反轉:s(x,y) = F^-1{S(u,v)}

對s(x,y)取指數:g(x,y) = exp(s(x,y))

1.灰階圖像的同态濾波

>> I=imread('E:\persional\matlab\images\ba.tif');
>> J = log(im2double(I)+1);
>> K = fft2(J);%傅裡葉變換
>> n = 5;%同态濾波參數
>> D0 = 0.1*pi;
>> rh = 0.7;
>> rl = 0.4;
>> [row,column] = size(J);
>> for i=1:row%設計濾波器
		for j=1:column
			D1(i,j) = sqrt(i^2+j^2);
			H(i,j) = rl+(rh/(1+(D0/D1(i,j))^(2*n)));
		end
	end
>> L = K.*H;%濾波
>> M = ifft2(L);傅裡葉反轉
>> N = exp(M)-1;%取指數
>> figure,
>> subplot(121),imshow(I);
>> subplot(122),imshow(real(N));%顯示同态濾波後的圖像
           
頻域濾波(matlab)

2.RGB圖像的同态濾波

I=imread('E:\persional\matlab\images\ad1.tif');   
I=double(rgb2gray(I));    
[M,N]=size(I);    
rL=0.5;    
rH=5;%根據需要調整參數    
c=4;    
d0=9;    
I1=log(I+1);%取對數    
FI=fft2(I1);%傅裡葉變換    
n1=floor(M/2);    
n2=floor(N/2);    
for i=1:M    
    for j=1:N    
        D(i,j)=((i-n1).^2+(j-n2).^2);    
        H(i,j)=(rH-rL).*(exp(c*(-D(i,j)./(d0^2))))+rL;%高斯同态濾波    
    end    
end    
I2=ifft2(H.*FI);%傅裡葉逆變換    
I3=real(exp(I2));  
subplot(121),imshow(I)  
subplot(122),imshow(I3);title('同态濾波增強後');  
           

繼續閱讀