Halcon算子扩展——同态滤波介绍与实现

1.背景介绍

同态滤波算法将图像表示为照明反射模型,即图像亮度是照明与反射的乘积。作为一种频域滤波器,它认为图像中的低频分量对应照明部分,高频分量对应反射部分。因此,可以设计这样的滤波器:其对低频部分进行抑制,对高频部分增强。当图像应用此滤波器后,照明部分被减弱,纹理细节部分被增强。

2.原理介绍

如上图所示,为算法的主要处理流程。
(1)将图像表示为照射分量与反射分量的乘积

f(x,y)=i(x,y)*r(x,y)

(2)通过对数运算,将乘性分量转换为加性分量

lnf(x,y)=lni(x,y)+lnr(x,y)

(3)对上式进行傅里叶变换

F(u,v)=F_{i}(u,v)+F_{r}(u,v)

(4)使用滤波器进行滤波

S(u,v)=F(u,v)*H(u,v)=F_{i}(u,v)*H(u,v)+F_{r}(u,v)*H(u,v)

(5)对滤波结果进行傅里叶逆变换得到s(x,y)。则最终滤波结果图像为

g(x,y)=e^{s(x,y)}

3.同态滤波器介绍

3.1高斯高通滤波

高斯高通滤波器函数表达式为

H(u,v)=1-e^{-D^{2}(u,v)/2\sigma ^{2}}

此滤波器,将抑制靠近0的低频分量,增强靠近1的高频分量。

3.2改进的高斯高通滤波

改进的高斯高通滤波器函数表达式为

H(u,v)=(\gamma _{H} - \gamma _{L})*(1-e^{-c*(D^{2}(u,v)/D_{0}^{2}))})+\gamma _{L}

其中,c表示高斯函数的陡峭程度(影响不大)。D_{0}表示截至频率。

此滤波器,将抑制靠近\gamma _{L}的低频分量,增强靠近\gamma _{H}的高频分量。

3.3巴特沃斯高通滤波

巴特沃斯高通滤波器的表达式为

H(u,v)=\frac{1}{1+(D_{0}/D(u,v))^{2n}}

其中,D(u,v)表示:频域中某点(u,v)到中心点的距离。D_{0}为截至频率。

4.算法的halcon算子封装

4.1中心距离变换算子distance_transform_center

halcon中现有的距离变换算子distance_transform,计算的是区域内各点到图像边缘的距离。为了构造合适的滤波器形态,我们需要计算各点到图像中心的距离。

Rows := []
Cols := []
cur_Cs := [0:Img_Width-1]
for r:= 0 to Img_Height-1 by 1
    cur_Rs := gen_tuple_const(Img_Width, r)
    Rows := [Rows, cur_Rs]
    Cols := [Cols, cur_Cs]
endfor
distance_pp(Rows, Cols, 0.5*Img_Height, 0.5*Img_Width, Dists)
gen_image_const(CenterDistanceImage, 'real', Img_Width, Img_Height)
set_grayval(CenterDistanceImage, Rows, Cols, Dists)

return ()

4.2同态滤波算子homomorphic_filter

get_image_size(Img, Img_Width, Img_Height)
convert_image_type(Img, Img_f0, 'real')
log_image(Img_f0, Img_log0, 'e')
fft_generic(Img_log0, Img_fft0, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')

gen_image_proto(Img, Img0_1, 1)
convert_image_type(Img0_1, Img_1, 'real')

if (filter_type == 'gauss1')
    Sigma := paras[0]
    
    gen_gauss_filter (gs, paras, paras, 0, 'n', 'dc_center', Img_Width, Img_Height)
    sub_image(Img_1, gs, Highpass, 1, 0)

elseif(filter_type == 'gauss2')
    gamma_H := paras[0]
    gamma_L := paras[1]
    c  := paras[2]
    D0 := paras[3]
    
   distance_transform_center (Img_cd0, Img_Width, Img_Height)
   pow_image(Img_cd0, H_D2, 2)
   mult_factor := -c/(D0*D0)
   scale_image(H_D2, H_scale0, mult_factor, 0)
   exp_image(H_scale0, H_exp0, 'e')
   sub_image(Img_1, H_exp0, H_sub0, 1, 0)
   scale_image(H_sub0, Highpass, gamma_H - gamma_L, gamma_L)
   
elseif(filter_type == 'butterworth')
    D0 := paras[0]
    n1 := paras[1]
    
    distance_transform_center (Img_cd0, Img_Width, Img_Height)
    gen_image_proto(Img, H0, D0)
    convert_image_type(H0, Img_D0, 'real')
    div_image(Img_D0, Img_cd0, Img_div0, 1, 0) // D0/D
    pow_image(Img_div0, Img_pow0, 2*n1)        // (D0/D)^(2*n1)
    add_image(Img_1, Img_pow0, Img_add0, 1, 0) // 1 + (D0/D)^(2*n1)
    div_image(Img_1, Img_add0, Highpass, 1, 0) // 1 / (1 + (D0/D)^(2*n1))
    set_grayval(Highpass, 0.5*Img_Height, 0.5*Img_Width, 0)
else
    return()
endif


* stop()
convol_fft(Img_fft0, Highpass, fft_highpass)
fft_generic(fft_highpass, log_filt0, 'from_freq', 1, 'sqrt', 'dc_center', 'real')
exp_image(log_filt0, Img_filt0, 'e')

scale_image_max(Img_filt0, Img_max0)
convert_image_type(Img_max0, Img_filt, 'byte')

stop()
return ()

5.运算结果

5.1原图

5.2结果图片

6.总结

本质上,同态滤波器是一种抑制低频增强高频的频域滤波器。任何符合这种特点的滤波器形式,都可以视为同态滤波器。本文封装了3种不同形式的同态滤波器算子。

高斯高通滤波器,可通过修改其\sigma参数,观察不同的处理结果。

改进的高斯高通滤波器,可修改其\gamma _{H}\gamma _{L}、c、D_{0}参数,观察不同的处理结果。

巴特沃斯滤波器,可修改其阶数n、D_{0}参数,观察不同的处理结果。

参考资料:

数字图像处理学习笔记7:频率域滤波3(同态滤波)_图像同态滤波csdn-优快云博客

图像处理——同态滤波-优快云博客

MATLAB实现图像巴特沃斯滤波、高频增强滤波及直方图均衡化_怎么可视化巴特沃斯高通滤波器-优快云博客

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值