標籤:
說明:同態濾波是頻域濾波的一種,但是相比之下同態濾波有自己的優勢,
頻域濾波可以靈活地解決加性雜訊問題,但無法消減乘性或卷積性雜訊。
同態濾波是一種在頻域中同時將映像亮度範圍進行壓縮和將映像對比進行增強方法,是基於映像成像模型進行的。
一幅圖f(x,y)可以表示成照度分量i(x,y)與反射分量r(x,y)的乘積,同態濾波基本思想:
為了分離加性組合的訊號,常採用線性濾波的方法,而非加性訊號組合常用同態濾波的技術將非線性問題轉化成線性問題處理,即先對非線性(乘性或者卷積性)混雜訊號作某種數學運算,變換成加性的。然後用線性濾波方法處理,最後作反變換運算,恢複處理後映像。
同態濾波流程圖
(1)兩邊取對數
(2)兩邊取付氏變換
(3)用一頻域函數 H(u, v)處理F(u, v),H(u,v)是同態濾波函數
(4)反變換到空域
(5)兩邊取指數
可見,增強後的映像是由分別對應照度分量與反射分量的兩部分疊加而成。因為一般照度分量是在空間緩慢變化的,而反射分量在不同物體的交界處是急劇變化的。所以,映像對數傅裡葉變換中的低頻部分主要對應照度分量,而高頻部分主要對應反射分量。
我們可以設計1個對傅裡葉變換的高頻分量和低頻分量影響不同的濾波函數H(u,v)。
圖 同態濾波器的剖面圖
如果選取 HL<1, HH>1,濾波器函數將減弱低頻部分,擴大高頻部分,最後的結果將同時壓縮了映像的動態範圍,又增加了映像各部分之間的對比。
特點:能消除乘性雜訊,能同時壓縮映像的整體動態範圍,並增加映像中相鄰地區間的對比。
注意到,同態濾波器的函數圖象跟高通巴特沃斯或者高通高斯濾波器很像,所以為了實現同態濾波器,實際上只需要對上述濾波器稍加改動即可以用高通濾波器的轉移函數來逼近同態濾波函數,設高通濾波器的轉移函數為Hhigh(u,v),同態濾波函數用Hhomo(u,v)表示
,則由Hhigh(u,v)到Hhomo(u,v)的映射為:
Hhomo(u,v)=(HH-HL)*Hhigh(u,v)+HL
下面張貼一段用MATLAB實現同態濾波的代碼:
clear;
close all;
[name,path] = uigetfile(‘lena.bmp‘);
file = strcat(path,name);
[X,map]=imread(file);
X=double(X);
I=rgb2hsv(X);
H=I(:,:,1);
S=I(:,:,2);
V=I(:,:,3);
%if size(X,3)==3
% X= rgb2gray(X);
%end
% 裝載圖片
% 顯示這個圖片
figure,imshow(‘lena.bmp‘);
title(‘原始映像‘);
% 構造一個高斯濾波器
f_high = 1.0;
f_low = 0.8;
% 得到一個高斯低通濾波器
gauss_low_filter = fspecial(‘gaussian‘, [7 7], 1.414);
matsize = size(gauss_low_filter);
% 由於同態濾波是要濾出高頻部分,
% 所以得把這個低通濾波器轉換成一個高通濾波器.
% f_high 和 f_low 是控制這個高通濾波器形態的參數.
gauss_high_filter = zeros(matsize);
gauss_high_filter(ceil(matsize(1,1)/2) , ceil(matsize(1,2)/2)) = 1.0;
gauss_high_filter = f_high*gauss_high_filter - (f_high-f_low)*gauss_low_filter;
% 利用對數變換將入射光和反射光部分分開
log_img = log(double(V)+eps);
% 將高斯高通濾波器與對數轉換後的圖象卷積
high_log_part = imfilter(log_img, gauss_high_filter, ‘symmetric‘, ‘conv‘);
% 由於被處理的圖象是經過對數變換的,再用冪變換將圖象恢複過來
high_part = exp(high_log_part);
minv = min(min(high_part));
maxv = max(max(high_part));
% 得到的結果圖象
temp=(high_part-minv)/(maxv-minv);
S=adapthisteq(S)*2.1;
HSV3(:,:,1)=H; %保留H不變,開始合成
HSV3(:,:,2)=S;
HSV3(:,:,3)=temp;
rgb2=hsv2rgb(HSV3); %轉換回RGB空間
figure;
imshow(rgb2);
title(‘同態濾波映像‘);
映像增強之——同態濾波