最近学习数字图像处理的小结(一): Haze removal
最近学习并做了关于Haze removal 的project,相对来说有了一些理解,希望自己能记录下来并分享。
一、前言
《Single Image Haze Removal Using Dark Channel Prior》是数字图像领域里比较出名的论文,本次project也是基于这篇论文来做的,当然也拓展了guide filter 。有关的论文和代码我放在了我的github。
二、基本概念
(一)暗通道先验Jdark(dark channel prior)
在绝大多数非天空的局部区域里,某一些像素总会有至少一个颜色通道具有很低的值。换言之,该区域光强度的最小值是个很小的数。我们给暗通道一个数学定义,对于任意的输入图像J,其暗通道可以用下式表达:
式中Jc表示彩色图像的每个通道 ,Ω(x)表示以像素X为中心的一个窗口。 首先求出每个像素RGB分量中的最小值,存入一副和原始图像大小相同的灰度图中,然后再对这幅灰度图进行最小值滤波,滤波的半径由窗口大小决定。
论文中通过统计,得出:
实际生活中造成暗原色中低通道值主要有三个因素:a)汽车、建筑物和城市中玻璃窗户的阴影,或者是树叶、树与岩石等自然景观的投影;b)色彩鲜艳的物体或表面,在RGB的三个通道中有些通道的值很低(比如绿色的草地/树/植物,红色或黄色的花朵/叶子,或者蓝色的水面);c)颜色较暗的物体或者表面,例如灰暗色的树干和石头。总之,自然景物中到处都是阴影或者彩色,这些景物的图像的暗原色总是很灰暗的。(这些都是废话)
(二)雾图像I(haze image)
在计算机视觉和计算机图形中,下述方程所描述的雾图形成模型被广泛使用:
其中,I(X)就是我们现在已经有的图像(待去雾的图像),J(x)是我们要恢复的无雾的图像,A是全球大气光成分, t(x)为透射率。现在的已知条件就是I(X),要求目标值J(x),显然,这是个有无数解的方程,因此,就需要一些先验了。
(三)大气光A(medium transmission)
在实际中,我们可以借助于暗通道图来从有雾图像中获取该值。具体步骤如下:
- 从暗通道图中按照亮度的大小取前0.1%的像素。
- 在这些位置中,在原始有雾图像I中寻找对应的具有最高亮度的点的值,作为A值。
(四)透射率t(medium transmission)
将式稍作处理,变形为下式:
对式两边求两次最小值运算,得到下式:
然后,我们根据上述方程式在三个颜色通道之间进行最小值运算,得到:
由暗通道先验可以得到:
那么再除以大气光A,可以得到:
最后我们带入得到:
I是我们的输入,A是大气光,通常会有ω (0<ω≤1),一般取0.95:
三、图像恢复(Recovering the Scene Radiance)
得到上述一些参数后,我们可以通过以下得到新的图像:
t0是防止t过小而设置的阈值。
四、t的改进方法
(一)Soft Matting(比较麻烦就省略不用了→_→)
(二)Faster matting (同省略)
(二)Guided filter
引导图滤波作为一种线性滤波器,可以简单定义为如下形式:
其中I是引导图像(guided Image),P是输入的待滤波图像,Q是滤波后的输出图像,W是根据引导图I确定的权重值。权重值W可以用下式表示(原文献有详细推导):
μk是窗口内像素点的均值,Ii和Ij指相邻两个像素点的值,σk代表窗口内像素点的方差,ε是一个惩罚值。自适应权重可以根据上式分析得到:Ii和Ij在边界两侧时,(Ii-μk)和(Ij-μk)异号,否则,则同号。而异号时的权重值将远远小于同号时的权重值,这样处于平坦区域的像素则会被加以较大的权重,平滑效果效果更明显,而处于边界两侧的像素则会被加以较小的权重,平滑效果较弱,能够起到保持边界的效果。
由上图可以看出q=aI+b是线性方程,因此可以说我们使用的导向图的要求就是导向图和图像是线性关系。导向图可以告诉输入,哪里是边缘,哪里是平面,这样输入就可以利用这些信息进行滤波。现在我们可以设想,有三块区域,其中两块是平面(平滑区域),在平滑区域图像的像素变化率较小,因此梯度较小。在边缘区域图像像素变化率较大因此梯度较大。这里说明一点–a,b是当前窗的线性函数系数,a,b不是固定的,不同位置的窗,a,b不同。当同时对输出和导向图进行求梯度时,可以看出两者的梯度是一个系数a的关系,因此完全可以用导向图的梯度来知道输出图像q的梯度。
上面的q=p-n,其中n就是噪声。噪声n是我们所不希望看到的,因此我们的优化就是让噪声n取到最小
此处何凯明教授是用岭回归来代替普通线性回归。
可通过下式来得到最后的滤波图像q
五、Reference
【1】《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果(速度可实时)
【2】引导图滤波(Guided Image Filtering)原理以及OpenCV实现
【3】Guided Image Filtering导向滤波通俗易懂
【4】BoxFilter的Matlab实现方法
【5】积分图(三) - Boxfilter 的实现过程分析
【6】Kaiming He 何恺明 官网
六、代码及参考文献地址
https://github.com/EasternH/image_processing