科学网

 找回密码
  注册

tag 标签: 同态滤波

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

图像的同态滤波原理及实现
热度 3 zmpenguestc 2017-4-30 13:09
同 态滤波( Homomorphic filter )是信号与图像处理中的一种常用技术,它采用了一种线性滤波在不同域中的非线性映射。这一技术是上世纪 60 年代由麻省理工学院( MIT) 的 Thomas Stockham , Alan V. Oppenheim 和 Ronald W. Schafer 等几位学者提出。 如果您对原理部分不感兴趣,可直接跳至双虚线以下的关键代码实现部分 。 首先,介绍两个概念。 同态系统: 是将非线性问题,转化为线性问题处理。即对非线性(乘性)混杂信号,通过某种数学运算(如对数变换),变成加性模型,而后采用线性滤波方法进行处理。 同态滤波: 是把频率滤波和空域灰度变换结合起来的一种图像处理方法,它根据图像的照度 / 反射率模型作为频域处理的基础,利用压缩亮度范围和增强对比度来改善图像的质量。 下面介绍关于同态滤波的基本原理。 一幅图像可看成由两部分组成,即 其中, f i 代表随空间位置不同的光强( Illumination )分量,其特点是缓慢变化,集中在图像的低频部分。 f r 代表景物反射到人眼的反射( Reflectance )分量。其特点包含了景物各种信息,高频成分丰富。 同态滤波过程,分为以下 5 个基本步骤: ① 原图做对数变换,得到如下两个加性分量,即 ② 对数图像做傅里叶变换,得到其对应的频域表示为: ③ 设计一个频域滤波器 H ( u , v ) ,进行对数图像的频域滤波。 ④ 傅里叶反变换,返回空域对数图像。 ⑤ 取指数,得空域滤波结果。 综上,同态滤波的基本步骤如图1所示。 图1 同态滤波的基本步骤 可以看出,同态滤波的关键在于滤波器 H 的设计。对于一幅光照不均匀的图像,同态滤波可同时实现亮度调整和对比度提升,从而 改善图像质量 。为了压制低频的亮度分量,增强高频的反射分量,滤波器 H 应是一个高通滤波器,但又不能完全 cut off 低频分量,仅作适当压制。 因此,同态滤波器一般采用如下形式,即 其中, g L 1, g H 1 ,控制滤波器幅度的范围。 H hp 通 常为高通滤波器,如高斯( Gaussian )高通滤波器、巴特沃 兹( Butterworth )高通滤波器、 Laplacian滤波器等。 如果 H hp 采用 Gaussian 高通滤波器,则有: 其中, c 为一个常数,控制滤波器的形态,即从低频到高频过渡段的陡度(斜率), 其值 越大,斜坡带越陡峭,见图2。 图2 同态滤波器幅频曲线 ================================================================================ 同态滤波的原理就这么简单,不过写代码实现起来,具体问题就来了。你不妨百度一下, 网上 一些论坛里,贴有大量可参考的代码,让您看了像雾像雨又像云,很可能会误导你 。那么,只有吃透了原理,或 自己 动手测试一下,方能做出正确判断。 实现对一幅输入图像同态滤波的关键(MATLAB)代码如下: ① 输入图像取对数,一般取自然对数,即 f = log(1+I); % log transformation 这里图像 I做对数变换前, 需要转化为double型。针对灰度范围 的图像数据, log ( I+1)是 为了满足真数大于 0,以防计算无意义 。特别提醒, 如果是归一化图像数据,则建议 log(I+0.01) 。 ② 对 f 做 FFT ,此步涉及后续的频域滤波。因此, FFT 前数据 f一般需 零填充至本身的 2 倍尺寸。 Fp = fft2(f,P,Q); % FFT with zeros padding 这里, P = 2 M , Q = 2 N , M , N 为数据f的阵列大小。 ③ 滤波器 H 设计,滤波器尺寸同样应为 P 、 Q 。 = meshgrid(1:Q, 1:P); % = size(I),y为行数,x为列数。与习惯顺序 有点反,易混淆! u = u - floor(P/2); % u方向 centralization v = v - floor(Q/2); % v方向 centralization D = u.^2 + v.^2; % compute the distances H = 1-exp(-c*(D./D0^2)); % gaussian high-pass filter H = (rH - rL)*H + rL; % h omomorphic filter 这里, D0 为 gaussian 滤波器的截止频域。因产生的为中心化 滤波器 ,下一步滤波 f 的傅里叶变换也需要中心化处理;否则, H 反中心化。 ④ 频域滤波。 H = ifftshift(H); % H 反中心化,因Fp未中心化! Gp = Fp.*H; % filtering in frequency domain ⑤ 傅里叶反变换,返回空域的对数图像。 gp = real(ifft2(Gp)); % IFFT取实部。网上有些代码直接取abs,计算误差会引起虚部不为零。No! g = gp(1:M,1:N); % 截取有效数据 ⑥ 取指数,得空域滤波结果。 g = exp(g)-1; % 先前取对数时,为 log(1+I)。 有代码先在频域做exp(Gp),再反变换。No! ⑦ 显示 g 时,适当做数据的映射处理,以适合人眼观察。 以下为利用以上原理和关键代码实现的两个场景下的同态滤波实验。 H 参数的设置为: D 0=80, rL =0.25, rH =2.2, c =2.0 。其幅频曲线如图 3 所示。 图3 设置参数下的同态滤波器幅频图 图4 同态滤波结果,PET扫描图(上),隧洞口场景(下) 注:以上代码实现中,未考虑边界问题。关于边界 处理 问题,请参考前述博文: 如何保持空域与频域滤波结果的一致性(续) 。 读者如需完整代码,可直接联系本人。 推荐参考: https://en.wikipedia.org/wiki/Homomorphic_filtering http://blogs.mathworks.com/steve/2013/06/25/homomorphic-filtering-part-1/ http://blogs.mathworks.com/steve/2013/07/10/homomorphic-filtering-part-2/ http://bbs.sjtu.edu.cn/bbstcon?board=DSPreid=1316225259 扫一扫,可关注“老马迷图”微信公众号! 《教学后记》序列博文: 频域 Laplacian 图像锐化原理与实现 如何保持空域与频域滤波结果的一致性(续) 傅里叶变换的波形分辨率与频率分辨率 如何保持空域与频域滤波结果的一致性
个人分类: 闻图思学|38262 次阅读|6 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-11 23:31

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部