matlab实现同态滤波

 

clip_image036[6]

                                            同态滤波的原理框图

 

matlab代码:

clear,clc;

Img = imread('tape.png');
L = size(Img);            % 计算图像大小
if numel(L)>2             %判断图像是否是彩色图像
    gray = rgb2gray(Img); % 图像灰度变换
else
    gray = Img;
end

gray = double(gray);
[M, N] = size(gray);
rL = 0.5;    % 高频增益
rH = 0.8;    % 低频增益
c = 0.5;     % 调节滤波器函数的斜面的锐化系数
D0 = 50;     % 截止频率
n = 1;       % 滤波器的阶数
I1 = log(gray + 1); 
F1 = fft2(I1);
H1 = zeros(M,N);
n1 = floor(M/2);
n2 = floor(N/2);
for i = 1:M
    for j = 1:N
        D(i,j) = sqrt(( (i-n1).^2 + (j-n2).^2));
        A = rH - rL;
        B = power( D(i,j)/D0, 2*n);
        C = 1 - exp(-c*B);
        H1 = A * C + rL;
    end
end

I2 = ifft2(H1.*F1);
I3 = real(exp(I2)); 
I3 = Img_normal(I3); 
IH1 = uint8(I3*256);

figure(1);
subplot(121); imshow(gray,[]); title('原始图像');
subplot(122); imshow(IH1,[]); title('滤波后图像');
function temp = Img_normal(Img)
%% 参考资料:http://webdataanalysis.net/data-analysis-method/data-normalization/
%% 函数功能:归一化输入图像
% 输出为【0,1】之间的double数据
Img = round(Img); % 将图像四舍五入为整数
Img_max = max(max(Img));
Img_min = min(min(Img));
[row, col] = size(Img);
temp = zeros(row, col);
for i = 1:row
    for j = 1:col
        temp(i,j) = double((Img(i,j) - Img_min)/(Img_max - Img_min));
    end
end


end
发布了91 篇原创文章 · 获赞 75 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/fengxianghui01/article/details/89479257