本文主要包括如下內容 編程
頻域濾波與空域濾波的關係
傅立葉變換能夠將圖像從空域變換到頻域,而傅立葉反變換則能夠將圖像的頻譜逆變換爲空域圖像,即人能夠直接識別的圖像。這樣一來,咱們能夠利用空域圖像與頻譜之間的對應關係,嘗試將空域卷積濾波變換爲頻域濾波,而後再將頻域濾波處理後的圖像反變換回空間域,從而達到圖像加強的目的。這樣作的一個最主要的吸引力在於頻域濾波的直觀性特色,關於這一點稍後將進行詳細的闡述。 markdown
根據著名的卷積定理:兩個二維連續函數在空間域中的卷積可由其相應的兩個傅立葉變換乘積的反變換而得:反之,在頻域中的卷積、可由在空間域中乘積的傅立葉變換而得,即:
ide
頻域濾波的基本步驟
根據式(6-47)進行頻域濾波一般應遵循如下步驟。
(1)計算原始圖像f(x,y) 的DFT, 獲得F(u, v).
(2)將頻譜F(u,v)的零頻點移動到頻譜圖的中心位置。
(3)計算濾波器函數H(u, v)與F(u,v)的乘積G(u, v).
(4)將頻譜G(u, v)的零頻點移回到頻譜圖的左上角位置。
(5)計算第(4)步計算結果的傅立葉反變換g(x,y) 。
(6)取g(x,y )的實部做爲最終濾波後的結果圖像.
由上面的敘述易知, 濾波可否取得理想結果的關鍵取決於頻域濾波函數H(u,v)。咱們經常稱之爲濾波器,或濾波器傳遞函數,由於它在濾波中抑制或濾除了頻譜中某些頻率的份量,而保留其餘的一些頻率不受影響。本書中咱們只關心值爲實數的濾波器,這樣濾波過程當中H 的每個實數元素分別乘以F中對應位置的複數元素,從而使F中元素的實部和虛部等比例變化,不會改變F的相位譜,這種濾波器也所以被稱爲「零相移」 濾波器。這樣,最終反變換回空域獲得的濾波結果圖像 g(x,y)理論上也應當爲實函數,然而因爲計算舍入偏差等緣由, 可能會帶有很是小的虛部,一般將虛部直接忽略。
函數
matlab實現
爲方便讀者在Matlab中進行頻域濾波,咱們編寫了imfreqfilt函數,其用法同空域濾波時使用的imfilter函數相似,調用時須要提供原始圖像和與原圖像等大的頻域濾波器做爲參數,函數的輸出爲通過濾波處理又反變換回空域以後的圖像。 ui
function out = imfreqfilt(I, ff)
% imfreqfilt函數 對灰度圖像進行頻域濾波
% 參數I 輸入的空域圖像
% 參數ff 應用的與原圖像等大的頻域濾鏡
if (ndims(I)==3) && (size(I,3)==3) % RGB圖像
I = rgb2gray(I);
end
if (size(I) ~= size(ff))
msg1 = sprintf('%s: 濾鏡與原圖像不等大,檢查輸入', mfilename);
msg2 = sprintf('%s: 濾波操做已經取消', mfilename);
eid = sprintf('Images:%s:ImageSizeNotEqual',mfilename);
error(eid,'%s %s',msg1,msg2);
end
% 快速傅立葉變換
f = fft2(I);
% 移動原點
s = fftshift(f);
% 應用濾鏡及反變換
out = s .* ff; %對應元素相乘實現頻域濾波
out = ifftshift(out);
out = ifft2(out);
% 求模值
out = abs(out);
% 歸一化以便顯示
out = out/max(out(:));
在頻譜中,低頻主要對應圖像在平滑區域的整體灰度級分佈,而高頻對應圖像的細節部 分,如邊緣和噪聲。所以,圖像平滑能夠經過衰減圖像頻譜中的高頻部分來實現,這就創建了空間域圖像平滑與頻域低通濾波之間對應關係。 idea
理想低通濾波器及其實現
最容易想到的衰減高頻成份的方法就是在一個稱爲「截止頻率」的位置「截斷」全部的 高頻成份,將圖像頻譜中全部高於這一截止頻率的頻譜成份設爲0,低於截止頻率的成爲保持不變。可以達到這種效果的濾波器如圖6.16所示,咱們稱之爲理想低通濾披器。若是圖像的寬度爲M,高度爲N,那麼理想低通頻域濾波器可形式化地描述爲:
spa
其中Do 表示理想低通濾波器的截止頻率,濾波器的頻率域原點在頻譜圖像的中心處,在以截止頻率爲半徑的圓形區域以內的濾鏡元素值所有爲1, 而該圓以外的濾鏡元素值所有爲o. 理想低通濾波輯的頻率特性在截止頻率處十分陡峭,沒法用硬件實現,這也是咱們稱之爲理想的緣由, 但其軟件編程的模擬實現較爲簡單。
理想低通濾波器可在必定程度上去除圖像噪聲, 但由此帶來的圖像邊緣和細節的模糊效應也較爲明顯,其濾波以後的處理效果比較相似於5.3.1中的平均平滑。實際上,理想低通濾波器是一個與頻譜圖像一樣尺寸的二維矩陣,經過將矩陣中對應較高頻率的部分設爲0,較低頻率的部分〈靠近中心〉設爲1,可在與頻譜圖像相乘後有效去除頻譜的高頻成份〈因爲是矩陣對應元素相乘,頻譜高頻成份與濾波器中的0相乘〉。其中0與1的交界處即對應濾波器的截止頻率。 設計
matlab實現 3d
function out = imidealflpf(I, freq)
% imidealflpf函數 構造理想的頻域低通濾波器
% I參數 輸入的灰度圖像
% freq參數 低通濾波器的截止頻率
% 返回值:out – 指定的理想低通濾波器
[M,N] = size(I);
out = ones(M,N);
for i=1:M
for j=1:N
if (sqrt(((i-M/2)^2+(j-N/2)^2))>freq)
out(i,j)=0;
end
end
end
I = imread('baby_noise.bmp');
ff = imidealflpf(I,20);
out = imfreqfilt(I,ff);
figure(1);
subplot(2,2,1);
imshow(I);
title('Source');
temp = fft2(I);
temp = fftshift(temp);
temp = log(1+abs(temp));
figure(2);
subplot(2,2,1);
imshow(temp,[]);
title('Source');
figure(1);
subplot(2,2,2);
imshow(out);
title('Ideal LPF,frq = 20');
temp = fft2(out);
temp = fftshift(temp);
temp = log(1+abs(temp));
figure(2);
subplot(2,2,2);
imshow(temp,[]);
title('Ideal LPF,frq = 20');
由圖可知,當截止頻率很是低時, 只有很是靠近原點的低頻成份可以經過, 圖像模糊嚴重:截止頻率越高, 經過的頻率成份就越多, 圖像模糊的程度越小, 所得到的圖像也就越接近原圖像。 但能夠看出, 理想低通濾波器並不能很好地兼顧噪聲濾除與細節保留兩個方面, 這和空域中採用平均模板時的情形比較相似。 下面將介紹頻域的高斯低通濾 波器並比較它與理想低通濾波器的處理效果。code
從圖6.19能夠發現,當σ增大時,H(u)的圖像傾向於變寬,而h(x)的圖像傾向於變窄和變高。這也體現了頻率域和空間域的對應關係。頻率域濾波器越窄,濾除的高頻成份越多, 圖像就越平滑〈模糊〉:而在空間域,對應的濾波器就越寬,相應的卷積模板越平坦,平滑〈模糊)效果就越明顯。
咱們在圖6.20中分別給出σ取值爲3和1時的頻域二維高斯濾波器的三維曲面表示,可 以看出頻域下的二維高斯濾波器一樣具備上述一維狀況時的特色.
matlab實現
function out = imgaussflpf(I, sigma)
% imgaussflpf函數 構造頻域高斯低通濾波器
% I參數 輸入的灰度圖像
% sigma參數 高斯函數的Sigma參數
[M,N] = size(I);
out = ones(M,N);
for i=1:M
for j=1:N
out(i,j) = exp(-((i-M/2)^2+(j-N/2)^2)/2/sigma^2);
end
end
I = imread('baby_noise.bmp');
ff = imgaussflpf(I,20);
out = imfreqfilt(I,ff);
figure(1);
subplot(2,2,1);
imshow(I);
title('Source');
temp = fft2(I);
temp = fftshift(temp);
temp = log(1+abs(temp));
figure(2);
subplot(2,2,1);
imshow(temp,[]);
title('Source');
figure(1);
subplot(2,2,2);
imshow(out);
title('Gauss LPF,sigma=20');
temp = fft2(out);
temp = fftshift(temp);
temp = log(1+abs(temp));
figure(2);
subplot(2,2,2);
imshow(temp,[]);
title('Gauss LPF,sigma=20');
顯然, 高斯濾波器的截止頻率處不是陡峭的。高斯低通濾波器在Sigma參數取 40 的時候能夠較好地處理被高斯噪聲污染的圖像,並且相比於理想低通濾波器而言, 處理效果上的改進是顯而易見的. 高斯低通濾波器在有效抑制噪聲的同時, 圖像的模糊程度更低, 對邊緣帶來的混疊程度更小, 從而使高斯低通濾波器在一般狀況下得到了比理想低通濾波器更爲普遍的應用。
圖像銳化能夠經過衰減圖像頻譜中的低頻成份來實現, 這就創建了空間域圖像銳化與頻域高通濾波之間對應關係。
高斯高通濾波器及其實現
matlab實現
function out = imgaussfhpf(I, sigma)
% imgaussfhpf函數 構造頻域高斯高通濾波器
% I參數 輸入的灰度圖像
% sigma參數 高斯函數的Sigma參數
[M,N] = size(I);
out = ones(M,N);
for i=1:M
for j=1:N
out(i,j) = 1 - exp(-((i-M/2)^2+(j-N/2)^2)/2/sigma^2);
end
end
高斯高通濾波器能夠較好地提取圖像中的邊緣信息, Sigma參數取值越小, 邊緣提取越
不精確, 會包含更多的非邊緣信息: Sigmaa 參數取值越大, 邊緣提取越精確, 但可能包含不完整的邊緣信息。
頻域拉普拉斯濾波器及其實現
matlab實現
function out = imlapf(I)
% imlapff函數 構造頻域拉普拉斯濾波器
% I參數 輸入的灰度圖像
[M,N] = size(I);
out = ones(M,N);
for i=1:M
for j=1:N
out(i,j) = -((i-M/2)^2+(j-N/2)^2);
end
end
介紹了幾種典型的頻域濾波器,實現了頻域下的低通和高通濾波.它們都可在空域下來用平滑和銳化算子實現。本節將給出一個特別適合在頻域中完成的濾波案例, 即利用頻域帶阻濾波器消除圖像中的週期噪聲。下面就來看着這個在空域中幾乎不可能完成的任務在頻域中是如何中實現的。
頻域帶阻濾波器
顧名思義, 所謂「 帶阻」 就是阻止頻譜中某一頻帶範圍的份量經過, 其餘頻率成份則不受影響。常見的。帶阻濾波器有理想帶阻濾波器和高斯帶阻濾波器。
理想帶阻濾波器
理想帶阻濾波器的表達式爲:
高斯帶阻濾波器
matlab實現
添加躁聲
O = imread('pout.tif');
[M,N] = size(O);
I = O;
for i = 1:M
for j = 1:N
I(i,j) = I(i,j)+20*sin(20*i)+20*sin(20*j);
end
end
subplot(1,2,1);
imshow(O);
title('Source');
subplot(1,2,2);
imshow(I);
title('Added Noise');
頻譜分析
使用高斯帶阻濾波器時,首先應對須要處理圖像的頻譜有必定了解.下面的命令獲得了兩幅圖像的頻譜.
i_f = fft2(I);
i_f = fftshift(i_f);
i_f = abs(i_f);
i_f = log(1+i_f);
o_f = fft2(O);
o_f = fftshift(o_f);
o_f = abs(o_f);
o_f = log(1+o_f);
figure(1);
subplot(1,2,1);
imshow(o_f,[]);
title('Source');
subplot(1,2,2);
imshow(i_f,[]);
title('Added Noise');
帶阻濾波
觀察圖片,能夠發現週期性圖像的傅立葉頻譜中出現了兩對相對於座標軸對稱的亮點,它們分別對應圖像中水平和豎直方向的正弦噪聲.咱們構造高斯帶阻濾波器的時候就須要考慮儘量濾除具備這些亮點對應的頻率的正弦噪聲.這4個點位於以頻譜原點爲中心,以50爲半徑的圓周上.所以,設置帶阻濾波器中心頻率爲50,頻帶寬度爲5,如圖6.31 (c)示,濾波後的頻域效果如圖6.31 (d)所示
ff = imgaussfbrf(I,50,5);
figure(1);
subplot(2,2,1);
imshow(ff,[]);
out = imfreqfilt(I,ff);
temp = fft2(out);
temp = fftshift(temp);
temp = log(1+abs(temp));
subplot(2,2,2);
imshow(temp,[]);
subplot(2,2,3);
imshow(I);
title('Source');
subplot(2,2,4);
imshow(out);
title('Gauss Filter');
上述程序運行後獲得的高斯帶阻濾波器的最終濾波效果如圖所示。咱們看到週期噪聲被很好地消除, 這樣的效果在空域中是很難實現的。
在6.4.1小節中, 咱們探討了頻域濾放與空域濾波之間的關係。這裏則更進一步, 研究頻域濾波器與空域濾波器之間的內在聯繫。
頻域濾波較空域而言更爲直觀, 頻域下濾波器表達了一系列空域處理(平滑、銳化等〉的本質,即對高於/低於某一特定頻率的灰度變化信息予以濾除的同時,而其餘的灰度變化信
息基本保持不變. 這種直觀性增長了頻域濾波器設計的合理性,使咱們更容易設計出針對特定問題的頻域濾波器,就如在6.7節中咱們利用了帶阻濾波器實現了對圖像中週期噪聲的濾除,而想直接在空域中設計出一個可以完成如此濾波任務的濾波器〈卷積模板〉是至關困難的。
爲了獲得合適的空域濾波器, 咱們很天然地想到能夠首先設計頻域濾波器H(u,v),而後根據卷積定理〈式6-61).將H(u,v)反變換至空域後就獲得了空域中濾波使用的卷積模板h(x,y), 從而解決了空域濾波器的設計難題。
因爲直接反變換獲得的空域卷積摸板h(x, y)同H(u,v)等大, 因此模板與圖像f(x, y)具備相同的尺寸。可是模板操做十分耗時, 要計算這樣大的模板與圖像的卷積將是很是低效的。在第3 章中咱們使用的都是很小的模板(如3 × 3 、5 × 五、7 × 7 等〉, 由於這樣的模板在空域
中才具備濾波效率上的優點. 通常來講, 若是空域模板中的非零元素數目小於132(大約13 ×13 見方〉, 則直接在空域中計算卷積較爲划算, 不然直接利用H(u,v)在頻域下濾波更爲合適。
在實際操做中咱們發現, 利用以全尺寸空域濾波器h(x, y)爲指導設計出的形狀與之相似的小空域卷積模板,一樣能夠取得相似於頻域濾波器H(u,v)的濾波效果。這就爲從頻域出發,最終設計出具備實用價值的空域模板提供了一種完美的解決方案。
式(6-52 )給出的高斯頻域低通濾波器H(u)及與其構成傅立葉變換對兒的空域高斯模板h(x)正好印證了上述結論。從圖6.19上來看,H(u)越窄, h(x)就越寬。而頻域低通濾波器H(u)越窄,說明可以經過的頻率越低,被截斷的高頻成份也就越多,從而使濾波處理後原函數f(x)變得平滑:而空域下以越寬的模板h(x)與函數f(x)卷積則一樣會產平生滑的效果。再進一步以h(x)的形狀爲指導,就能夠獲得曾在高斯平滑中使用的高斯模板(式5-5).