暗通道先验

暗通道先验

暗通道先验算法是一种简单但有效的图像去雾算法。暗通道先验是一种对无雾户外图像的统计。该算法基于一项观察-无雾户外图像中大多数局部块中包含一些像素点,这些像素至少在一个颜色通道中具有非常低的强度。将此先验与雾霾成像模型结合使用,我们可以直接估计雾霾的厚度并恢复高质量的无雾图像。

在计算机视觉和计算机图像学中,广泛用于描述雾霾图像形成的模型如下:

I(x) = J(x)t(x)+A(1-t(x))

上式中​I是观察到的强度,​J是场景辐射,​A是全球大气光,​t是描述光为散射并达到相机的部分的介质传输。去雾的目标是从​I中恢复​J​A​t

等式右侧的​J(x)t(x)成为直接衰减,​A(1-t(x))成为空气光。直接衰减描述了场景辐射及其在介质中的衰减,而空气光来自先前的散射光并导致场景颜色的变化。当大气光均匀时,透射率​t可以表示为:

t(x) = e^{-\beta d(x)}

其中​\beta是大气的散射系数。它表明场景辐射度随场景深度​d成指数衰减

暗通道先验基于以下对无雾室外图像的观测:在大多数非天空图像块中,至少一个颜色通道在某些像素处具有非常低的强度。形式上,对于图像​J,有如下定义:

J^{dark}(x) = \min_{c\in\{r,g,b\}}{(\min_{y\in\Omega(x)}{J^c(y)})}

上式中​J^c是图像​J所对应的颜色通道,其中​c\in\{r,g,b\}​\Omega(x)是以​x为中心的局部补丁,也就是一个以​x为中心的窗口。通过统计学角度的观察表明,如果​J是无雾的室外图像,除了天空区域,​J^{dark}的强度很低并且趋于零。我们称​J^{dark}​J的暗通道,上述统计观察结果即为暗通道先验。

使用暗通道先验去雾

在通过暗通道先验进行图像去雾时,首先要对大气光值进行估计。

在大多数以前的单图像方法中,大气光​A是从最不透明的像素中估计出来的。例如,将具有最高强度的像素用作大气光。但是在真实图像中,最亮的像素可能出现在白色汽车或白色建筑物上。在雾霾图像中,其实雾霾图像的暗通道很好地近似于雾霾密度。我们可以使用暗通道来改进大气光值的估计。首先选择暗通道中最亮的​0.1\%像素。在这些像素中,选择输入图像​I中强度最高的像素作为大气光值。

在大气光值确定完毕后,需要进一步假设在在局部窗口​\Omega(x)中光线的传输是恒定的。此处将补丁的传输表示为​\tilde{t}(x)。对雾霾成像模型的局部补丁进行最小值操作。

\min_{y\in\Omega(x)}{(I^c(y))} = \tilde{t}(x)\min_{y\in\Omega(x)}{(J^c(y))}+(1-\tilde{t}(x))A^c

上述的最小值操作是在三个颜色通道上独立执行的。所以上式也等同于:

\min_{y\in\Omega(x)}{(\frac{I^c(y)}{A^c})}=\tilde{t}(x)\min_{y\in\Omega(x)}{(\frac{J^c(y)}{A^c})}+(1-\tilde{t}(x))

之后,对上式进行三个颜色通道间的最小化运算,得到下式:

\min_{c}{(\min_{y\in\Omega(x)}{(\frac{I^c(y)}{A^c})})}=\tilde{t}(x)\min_{c}{(\min_{y\in\Omega(x)}{(\frac{J^c(y)}{A^c})})}+(1-\tilde{t}(x))

此时,根据暗通道先验,暗通道​J^{dark}的值趋于为零:

J^{dark}(x) = \min_{c}{(\min_{y\in\Omega(x)}{J^c(y)})}=0

那么在最小值处理后的最暗通道的雾霾图像方程中:

\min_{c}{(\min_{y\in\Omega(x)}{(\frac{J^c(y)}{A^c})})}=0

那么透射率的估计值​\tilde{t}(x)的计算方式如下:

\tilde{t}(x) = 1-\min_{c}{(\min_{y\in\Omega(x)}{(\frac{I^c(y)}{A^c})})}

实际上,即使是在晴天,大气中也并非完全没有任何粒子。所以当我们看远处的物体时,雾霾仍然存在。此外,雾霾的存在是人类感知深度的基本线索。这种现象称为空中透视。如果我们彻底去除雾霾,图像可能看起来不自然并且可能会失去深度感。因此,我们可以通过在等时中引入常数参数​\omega,\quad(0<\omega<1)来选择性地为远处的物体保留非常少量的雾度:

\tilde{t}(x) = 1-\omega\min_{c}{(\min_{y\in\Omega(x)}{(\frac{I^c(y)}{A^c})})}

在获取到透射率之后,则可以根据雾霾成像模型进行图像恢复。但是在这个过程中透射率接近于零时,会使得衰减项​J(x)t(x)非常接近于零。因此,可以将透射率​t(x)限制为下限​t_0,这意味这在非常密集的雾霾区域保留了少量雾霾。最终原图像通过以下方式进行恢复:

J(x) = \frac{I(x)-A}{\max{t(x),t_0}}+A