同态滤波实现
基本原理
? ? ? ? 同態濾波利用照度-反射圖像模型開發的一種頻率域處理,通過同時進行灰度范圍的壓縮和對比度的增強來改進圖像外觀
? ? ? ? 什么是照度-反射圖像模型?
? ? ? ? 一幅圖像可以由兩個分量來表征:照射分量??和反射分量??,兩個函數的乘積即?,公式記作:
- 照射分量?? :入射到觀察場景的光源照射總量,其性質取決于照射源,即光源特性,滿足
- 反射分量??:場景中物體所反射的光照總量,其性質取決于成像物體表面的反射特性,滿足,當??時,成像物體全吸收,當??時,成像物體全反射
? ? ? ? 照射分量與反射分量分別表征圖像的哪些特性呢?
? ? ? ? 照射分量通常以空間域的慢變化為特征(可大體近似傅里葉變換后的頻率低頻成分);反射分量通常引起突變,特別是在不同物體的連接部分(可大體近似傅里葉變換后的頻率高頻成分)
? ? ? ? 理論推導思路
? ? ? ? 由照度-反射模型可知?,若直接對圖像作傅里葉變換至空間域,則要計算照度分量的傅里葉變化與反射分量的傅里葉變化的卷積,計算上復雜。
????????我們希望能直接對照度分量和反射分量的頻率部分進行處理,引入的解決方法是在對圖像進行傅里葉變換之前,先取對數,即
????????顯然有:
? ? ? ? 同態濾波:
? ? ? ? ?濾波結果:
? ? ? ? 濾波關鍵在于找到合適的濾波器 H ,以達到抑制照度分量(低頻成分),增強反射分量(高頻成分)。同態濾波器可以用不同的可控方法影響傅里葉變換的低頻和高頻成分。
????????如果??和??選定,而??且??,那么下圖所示濾波器函數趨向于衰減低頻(照度)成分,增強高頻(反射)成分,最終的結果是同時進行動態范圍的壓縮和對比度的增強
Matlab編程實現
同態濾波過程
小注意點:
? ? ? ? 在對圖像進行對數變換前,需先將其轉化為 double 型數據。對于灰度值處于 [ 0, 255] 的圖像數據,log(1+f(x,y)) 是為了保證后期計算真數大于0,以防計算無意義。同理,如果是歸一化圖像數據,則建議 log(0.01+f(x,y))
代碼實現
? ?以下以??,,,?為例進行編程
clear; clc; close all;%讀入圖像 I = imread('PET_image.tif'); figure; subplot(121); imshow(I); title('原始圖像'); %對原圖做對數變換 Ilog = log(1+double(I)); %對圖像進行延拓 [row,col] = size(Ilog); P = row*2; Q = col*2; image = zeros(P,Q); image(1:row,1:col) = double(Ilog); %采用傅立葉變換并頻譜中心化 F = fft2(image); F = fftshift(F); %找出中心點的坐標 center_x = fix(P/2); center_y = fix(Q/2); %同態濾波 D0 = 80;%濾波器截止頻率 gamaL = 0.25; gamaH = 2; c = 1; H = zeros(P,Q); for i = 1:Pfor j = 1:Qd = (i-center_x)^2+(j-center_y)^2;d = d/(D0*D0);H(i,j) = (gamaH-gamaL)*(1-exp((-c)*d))+gamaL;H(i,j) = H(i,j)*F(i,j);end end %頻譜去中心化并傅立葉反變換 out = ifft2(ifftshift(H)); out = real(out); %取指數 output1 = exp(out)-1; %輸出圖像 output1 = uint8(output1); output2 = output1(1:row,1:col); output2 = histeq(output2); subplot(122); imshow(output2); title('同態濾波后圖像');運行結果?
???????顯然,濾波后,整體圖像的灰度變暗,但細節部分增強。對于顯示的動態范圍來說,通過降低支配照射成分的影響,允許低灰度變得更可見是可能的。類似地,因為高頻被同態濾波增強,故圖像的反射成分(邊緣信息)被明顯銳化。
寫在最后
????????以上僅個人實驗想法,若存在錯誤或者更優解法,歡迎大家指出。
總結
- 上一篇: Windows注册表操作基础代码
- 下一篇: 每日英语:Lighting: Twigs