matlab实现同态滤波

定义

一幅图像可看成由两部分组成,即

img

  • fi代表随空间位置不同的亮度(Illumination)分量,其特点是缓慢变化,集中在图像的低频部分。
  • fr代表景物反射到人眼的反射(Reflectance)分量,其特点包含了景物各种信息,高频成分丰富。

上式为同态滤波模型公式,其中,
0 < i ( x , y ) < 无 穷


0 < r ( x , y ) < 1

入射分量可以在0-无穷之间变化,反射分量只能在0-1之间变化,当反射分量为0时,说明物体将光全吸收,为黑色,当反射分量为1时,说明物体将光全反射,为白色。

同态滤波流程

同态滤波过程,分为以下5个基本步骤:

  • 取对数
    在这里插入图片描述
  • 取对数结果做傅里叶变换
    在这里插入图片描述
  • 设计一个实中心对称的频域滤波器H(u,v),与上步傅里叶变换结果阵列相乘
  • 傅里叶反变换,返回到空域
  • 取指数,得空域滤波结果。

方框图表示如下:

img

可以看出同态滤波的关键在于同态滤波器H(u,v)的设计,同态滤波的目的在于:对一幅光照不均匀的图

像,适当压制亮度分量,增强反射分量,以此来实现亮度调整与对比度提升,从而改善图像的视觉质量。

通过以上分析我们可以知道:同态滤波器可以由高通滤波器来实现,但是又不能完全截断低频成分,只要

适当压低即可,所以同态滤波器的函数表示如下:

img
其 中 , y L < 1 , y H > 1 , 控 制 滤 波 器 幅 度 的 范 围 。 H h p 通 常 为 高 通 滤 波 器 , 如 高 斯 ( G a u s s i a n ) 高 通 滤 波 器 、 巴 特 沃 兹 ( B u t t e r w o r t h ) 高 通 滤 波 器 、 L a p l a c i a n 滤 波 器 等 。 其中,yL< 1, yH >1,控制滤波器幅度的范围。Hhp通常为高通滤波器,如高斯(Gaussian)高通滤波器、巴特沃兹(Butterworth)高通滤波器、Laplacian滤波器等。 yL<1,yH>1HhpGaussian(Butterworth)Laplacian
如高通滤波器采用高斯高通滤波器则有如下形式:

img

同态滤波器对应的图像表示如下:

其中, c为一个常数,控制滤波器形态,从低频到高频的斜率,c越大,斜坡带越陡峭

img

matlab实现代码

注意:取指数后一定要进行像素拉伸

%读入图片
img = imread('office.png');
img = rgb2gray(img);
figure(1);
subplot(2, 1, 1);
imshow(img);
title('Raw Image');
gamma_H = 2;
gamma_L = 0.25;
c = 0.25;
D0 =100;
f = double(img);
f = log(f + 1);%取指数
F = fft2(f);%傅里叶变换
F=fftshift(F);%频谱搬移
[height, width] = size(F);
%设计一个同态滤波器
H = HomomorphicFiltering(gamma_H, gamma_L, c, D0, height, width);
g=H.*F;%同态滤波
g = ifft2(ifftshift(g));%频谱搬移,傅里叶逆变换
g = exp(g)-1;
g = real(g);
%拉伸像素值
new_img = Expand(g);
subplot(2,1,2);
imshow(new_img);
title('Homomorphic Filtered Image(D0 = 100)');


function new_img = Expand( img ) 
    [height, width] = size(img);
    max_pixel = max(max(img));
    min_pixel = min(min(img));
    new_img=zeros(height,width);
    for i = 1 : height
        for j = 1 : width
            new_img(i, j) = 255 * (img(i, j) - min_pixel) / (max_pixel - min_pixel);
        end
    end
    new_img = uint8(new_img);
end


function H = HomomorphicFiltering( gamma_H, gamma_L, c, D0, height, width )
    for i = 1 : height
        x = i - (height / 2);
        for j = 1 : width
            y = j - (width / 2);
            H(i, j) = (gamma_H - gamma_L) * (1 - exp(-c * ((x ^ 2 + y ^ 2) / D0 ^ 2))) + gamma_L;
        end
    end
end

运行结果

在这里插入图片描述

原始图像

在这里插入图片描述

参考链接

「同态滤波」在图像处理中的原理
巴特沃斯滤波器和同态滤波

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值