何恺明读博士提出基于暗通道采用引导滤波去雾算法获CVPR2009最佳论文,现在应用面很广、很广;能够克服双边滤波的梯度翻转现象,在滤波后图像的细节上更优,主要美颜算法差不多都用这个。
先贴伪代码:
实现的话可以采用积分图加速。
线性滤波器
其中I是引导图像,P是输入的待滤波图像,W是根据引导图I确定的权重值,Q是滤波后的输出图像。
1、如果权重W与引导图无关,那便是一个常量,比如高斯滤波那种,这种我们相对就特别好理解。
2、如果权重与引导图相关,我们的图像就会受到引导图影响,比如双边滤波中,我们采用和中心像素差值作为引导,但这严格上还算不上引导图。只能只能时有影响,有引导。
权重确定:
μ
k
μ_k
μk是窗口内像素点的均值,
I
i
I_i
Ii指位于窗口中心的像素值,
I
j
I_j
Ij指窗口内j位置的像素点的值,
σ
k
2
σ_k^2
σk2代表窗口内像素点的方差,ε是一个惩罚值。
( I i − μ k ) ( I j − μ k ) (I_i-μ_k)(I_j-μ_k) (Ii−μk)(Ij−μk)这一项表明,如果中心像素值 I i I_i Ii小于均值时, I j I_j Ij如果约大于均值,该项值就是负值,权重1+(-0.几)就会越小
ε惩罚项的值越大,则分母越大,引导图对图像的影响就越小,极端情况(比如正无穷), W i j W_{ij} Wij就将退化为 1 / w 2 1/w^2 1/w2,这个 w w w呢,实际上就是窗口边长,也就是说极端情况下会退化为均值滤波器
但是,实际上我们不用搞得太复杂,我们直接假设该点输出值和该点引导图的值是线性关系:
然后我们采用最小二乘去估计出
a
k
、
b
k
a_k、b_k
ak、bk两个系数即可:
a的分子为I和P的协方差,分母部分为I的方差加上截断值ε,b的值为P的均值减去a乘以I的均值。可以看出当a值很小时,b约等于窗口内像素点的均值pk,近似于均值滤波。而当a值很大时,输出则主要取决于a*▽I的大小,梯度信息能够得到保留。