經典的同態濾波演算法的優化及其應用引數配置。
阿新 • • 發佈:2018-12-14
% 同態濾波器
% ImageIn - 需要進行濾波的灰度影象
% High - 高頻增益,需要大於1
% Low - 低頻增益,取值在0和1之間
% C - 銳化係數
% Sigma - 截止頻率,越大影象越亮
% 輸出為進行濾波之後的灰度影象
function [ImageOut] = HomoFilter(ImageIn, High, Low, C, Sigma)
Img = double(ImageIn); % 轉換影象矩陣為雙精度型,不會改變資料本身
[Height, Width] = size(ImageIn); % 返回的行數和列數
CenterX = floor(Width / 2); % 中心點座標
CenterY = floor(Height / 2);
LogImg = log(Img + 1); % 影象對數資料
Log_FFT = fft2(LogImg); % 傅立葉變換
for Y = 1 : Height
for X = 1 : Width
Dist= (X - CenterX) * (X - CenterX) + (Y - CenterY) * (Y - CenterY); % 點(X,Y)到頻率平面原點的距離
H(Y, X) =(High - Low) * (1 - exp(-C * (Dist / (2 * Sigma * Sigma)))) + Low; % 同態濾波器函式
end
end
H = ifftshift(H); % 對H做反中心化
Log_FFT = H.* Log_FFT; % 濾波,矩陣點乘
Log_FFT = ifft2(Log_FFT); % 反傅立葉變換
Out = exp(Log_FFT)-1; % 取指數
% 指數處理ge = exp(g)-1;% 歸一化到[0, L-1]
Max = max(Out(:));
Min = min(Out(:));
Range = Max - Min;
for Y = 1 : Height
for X = 1 : Width
ImageOut(Y, X) = uint8(255 * (Out(Y, X) - Min) / Range);
end
end
end