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

 

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值