何恺明暗通道去雾(阅读笔记)

何恺明暗通道去雾文章阅读

刘海山,2021年6月24日

文献引文信息: He, K. M., Sun, J. & Tang, X. O. Single Image Haze Removal Using Dark Channel Prior. Ieee T Pattern Anal 33, 2341-2353, doi:10.1109/Tpami.2010.168 (2011).

文献来源:https://ieeexplore.ieee.org/document/5567108

一、摘要

In this paper, we propose a single-image defogging model based on the image dark channel prior. In an outdoor clear image, there is usually at least one color channel with a very low value in most local areas. Load this prior into the fog map imaging model, we can directly estimate the thickness of the fog in different areas and restore the fog-free image. A series of picture tests have proved the effectiveness of the model.

二、背景介绍

1. 前人工作情况

问题:先前有什么课题组做了什么(取得什么结果,达到什么目标,实现什么指标)?
  去雾是一个非常具有挑战性的问题,因为雾的影响依赖于未知的深度(这里的深度是指相机到场景的距离)。如果输入仅仅只是一帧雾图,那么这个问题是非限定的。因此,有许多去雾的方法是通过使用多张图像或者增加信息来实现的。

1.1 偏振去雾

  哥伦比亚大学计算机科学系的Yoav Y. Schechner于2001年提出了基于偏振的方法[3]实现去雾,通过采集多张(至少两种)不同角度的偏振图像来去雾。文章认为雾图主要由两部分组成——一是物体场景传播出来的光,另一部分是由雾引起的散射光(天空光);文中说天空的散射光是部分偏振光,因此可以利用偏振片在得到不同的偏振图像后对场景光进行恢复。相机采集到的光包含两部分: I t o t a l = T + A {I^{total}} = T + A Itotal=T+A
再结合:
平 行 偏 振 光 强 I ∥ = T / 2 + A ∥ 垂 直 偏 振 光 强 I ⊥ = T / 2 + A ⊥ 天 空 光 平 行 分 量 A ∥ = A ( 1 − P ) / 2 天 空 光 垂 直 分 量 A ⊥ = A ( 1 + P ) / 2 投 射 光 强 T = J ⋅ e − β z 平行偏振光强{I^\parallel } = T/2 + {A^\parallel }\\ 垂直偏振光强{I^\bot} = T/2 + {A^\bot}\\ 天空光平行分量{A^ \parallel } = A(1 - P)/2\\ 天空光垂直分量{A^ \bot} = A(1 + P)/2\\ 投射光强T = J \cdot {e^{ - \beta z}} I=T/2+AI=T/2+AA=A(1P)/2A=A(1+P)/2T=Jeβz文中的平行方向可理解为天空光偏振滤波后强度最小的方向。
从以上公式可推导出:
A ^ = ( I ⊥ − I ∥ ) / P e − β z ^ = 1 − A ^ / A ∞ 最 终 复 原 场 景 光 : J ^ = ( I ^ t o t a l − A ^ ) e − β z ^ = ( I ^ t o t a l − A ^ ) ( 1 − A ^ / A ∞ ) \hat A = ({I^ \bot } - {I^\parallel })/P\\ {e^{ - \widehat {\beta z}}} = 1 - \hat A/{A_\infty }\\ 最终复原场景光:\hat J = \frac{ {({ {\hat I}^{total}} - \hat A)}}{ { {e^{ - \widehat {\beta z}}}}} = \frac{ {({ {\hat I}^{total}} - \hat A)}}{ {(1 - \hat A/{A_\infty })}} A^=(II)/Peβz =1A^/AJ^=eβz (I^totalA^)=(1A^/A)(I^totalA^)在这个模型中,需要我们估计无穷远的天空光强度和天空光的偏振度;
图片引用自参考文献
附属可获取的信息:
利用光强衰减与距离的关系可反推出场景的深度图:
在这里插入图片描述
-----------另一篇有关偏振去雾的文章-----------

  2006年CVPR上,以色列技术研究所电子工程系Sarit Shwartz提出了盲去雾方法[4],省去了上一篇文中需要估计天空光强度和偏振度的问题。文章在求解场景光照R的模型上,利用改进的ICA (独立成分分析,用于盲源分离)方法估计了偏振度和大气光。场景光的计算模型:
R = ( 1 − 1 / p ) I max ⁡ ( x , y ) + ( 1 + 1 / p ) I min ⁡ ( x , y ) 1 − [ I max ⁡ ( x , y ) − I min ⁡ ( x , y ) ] / ( A ∞ p ) R = \frac{ {(1 - 1/p){I^{\max }}(x,y) + (1 + 1/p){I^{\min }}(x,y)}}{ {1 - [{I^{\max }}(x,y) - {I^{\min }}(x,y)]/({A_\infty }p)}} R=1[Imax(x,y)Imin(x,y)]/(Ap)(11/p)Imax(x,y)+(1+1/p)Imin(x,y)经过ICA方法估计偏振度后的模型去雾结果
在这里插入图片描述
其他偏振去雾文章:
1.Advanced visibility improvement based on polarization filtered images
2.Polarization-based vision through haze此文是第一篇的重写版,发表于AO上。

1.2 约束去雾

在[5-7]中,在相同场景的不同天气条件下获得更多的约束;
大致浏览了,效果不是很好;

1.3 基于深度的去雾模型

已知场景的距离先验,再利用逆衰减模型求解原始场景光源。

[8] J. Kopf, B. Neubert, B. Chen, M. Cohen, D. Cohen-Or, O. Deussen, et al., “Deep Photo: Model-Based Photograph Enhancement and Viewing”, ACM Trans. Graphics, vol. 27, no. 5, pp. 116-1, 2008.

1.4 单帧图像去雾

主要思想是什么?

[10]Fattal, R. Single image dehazing. Acm T Graphic 27, doi:Artn 7210.1145/1360612.1360671 (2008).

[11]Tan, R. T. Visibility in bad weather from a single image. 2008 Ieee Conference on Computer Vision and Pattern Recognition, Vols 1-12, 2347-2354, doi:DOI 10.1109/cvpr.2008.4587643 (2008).

大气散射模型:
I ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x ) ) I({\bf{x}}) = J({\bf{x}})t({\bf{x}}) + A(1 - t({\bf{x}})) I(x)=J(x)t(x)+A(1t(x))从几何的角度分析,该表达式说明A,J,I向量在彩色空间上是共面的,而且向量的终点共线。衰减量t满足关系:
t ( x ) = ∥ A − I ( x ) ∥ ∥ A − J ( x ) ∥ = A c − I c ( x ) A c − J c ( x ) ,  where  c ∈ { r , g , b } t({\bf{x}}) = \frac{ {\left\| { {\bf{A}} - {\bf{I}}({\bf{x}})} \right\|}}{ {\left\| { {\bf{A}} - {\bf{J}}({\bf{x}})} \right\|}} = \frac{ { {A^c} - {I^c}({\bf{x}})}}{ { {A^c} - {J^c}({\bf{x}})}},{\text{ where }}c \in \left\{ {r,g,b} \right\} t(x)=AJ(x)AI(x)=AcJc(x)AcIc(x), where c{ r,g,b}
在这里插入图片描述

图(a),成像模型的几何表示;(b)Constant albedo model used in Fattal’s work[10]

基于这个模型,Tan的方法聚焦到增强图像的能见度上。对于每个块拥有统一的衰减率t,输入图像的能见度(定义为梯度求和)被雾衰减了,它们具备如下关系:
∑ x ∥ ∇ I ( x ) ∥ = t ⋅ ∑ x ∥ ∇ J ( x ) ∥ < ∑ x ∥ ∇ J ( x ) ∥ \sum\limits_{\bf{x}} {\left\| {\nabla {\bf{I}}({\bf{x}})} \right\|} = t \cdot \sum\limits_{\bf{x}} {\left\| {\nabla {\bf{J}}({\bf{x}})} \right\|} < \sum\limits_{\bf{x}} {\left\| {\nabla {\bf{J}}({\bf{x}})} \right\|} xI(x)=txJ(x)<xJ(x)使用J<A的约束,通过最大化块的对比度来估计t。然后再用MRF模型更进一步正则化结果。这个方法可以极大地显示物体的细节和结构信息。但是,因为这个方法仅仅增强能见度而没有尝试从物理层面恢复场景辐射,所以输出图像通常趋向于更大的颜色饱和度。而且结果可能在深度不连续附近存在光晕效应。

2. 研究意义

问题:开展这项研究的目的(动机)是什么?要解决什么科学或技术问题?

  在计算图形学和计算机视觉应用中,去雾是一个备受高度重视的问题。首先,去雾的重要意义是提高场景的能见度修正由天空光引起的颜色变换。通常来说,无雾图像在视觉上更令人舒适。第二,大多是计算机视觉算法,从底层图像分析到高层目标识别,前提假设都是输入图像是场景的发光。因此,许多视觉算法的性能不可避免地受到偏差和对比度场景光照的影响。最后,去雾可以提供深度信息、有利于许多视觉算法以及促进图像编辑。雾或霾在场景分析上可以作为一个有用的深度线索。如此一来,一张糟糕的雾图也能带来好的用处。

3. 工作的前因后果

问题:尽量思考一下,为什么会想到做这项研究?这个科学或技术问题的价值是什么?有什么意义吗?如果有,那么它的解决对整个领域的发展起到什么作用?

本文的暗通道先验部分是受广泛应用于多光谱遥感系统的暗物体减影技术[12]所启发。

[12]An Improved Dark-Object Subtraction Technique for Atmospheric Scattering Correction of Multispectral Data

三、基本原理

  在本节原理介绍中,我们先介绍暗通道的基本原理,之后再介绍使用暗通道先验的基本步骤。

1. 暗通道先验

  暗通道先验是基于无雾图像的观察而得出的结论:在大多数无天空光区域(patch,文中取15×15大小,并假设在patch中透过率是相同的)中,在某些像素上,至少一个彩色通道的强度具有很低的值甚至接近零。 同样地,在此区域(patch)上的最小强度接近于零。对于一张任意图像J,它的暗通道表示为:
J d a r k ( x ) = min ⁡ y ∈ Ω ( x ) ( min ⁡ c ∈ { r , g , b } J c ( y ) ) {J^{dark}}({\bf{x}}) = \mathop {\min }\limits_{y \in \Omega ({\bf{x}})} \left( {\mathop {\min }\limits_{c \in \left\{ {r,g,b} \right\}} {J^c}\left( {\bf{y}} \right)} \right) Jdark(x)=yΩ(x)min(c{ r,g,b}minJc(y))图像暗通道的获取:
J d a r k ( x ) = min ⁡ y ∈ Ω ( x ) ( min ⁡ c ∈ { r , g , b } J c ( y ) ) {J^{dark}}({\bf{x}}) = \mathop {\min }\limits_{y \in \Omega ({\bf{x}})} \left( {\mathop {\min }\limits_{c \in \left\{ {r,g,b} \right\}} {J^c}\left( {\bf{y}} \right)} \right) Jdark(x)=yΩ(x)min(c{ r,g,b}minJc(y))由前人工作可知,大气散射模型[2,5,10,11]通常表示为:
I ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x ) ) I({\bf{x}}) = J({\bf{x}})t({\bf{x}}) + A(1 - t({\bf{x}})) I(x)=J(x)t(x)+A(1t(x))因为t>0,即J和I满足正向线性组合关系,所以当J取暗通道操作时,等式右边的结果等于单独对采集图像I取暗通道。即有:
I d a r k = t ⋅ J d a r k + A ⋅ ( 1 − t ) {I^{dark}} = t \cdot {J^{dark}} + A \cdot (1 - t) Idark=tJdark+A(1t)作者在文中展示了haze-free图像的统计结果:
暗通道统计数据

在统计的暗通道数据中,超过90%的样本强度值小于25。作者也展示了部分图像的暗通道结果:
部分图像的暗通道展示
  如图,左上角是任意图像,左下角是其对应的暗通道结果,从图中可以看到,图像的暗通道基本上具有非常低的值。而图中的右上角是有雾的图像,右下角是其对应的暗通道,可见,由于雾的存在,其暗通道不再是一片黑,而是随着距离越来越远而表现为越来越亮,因为自然场景的暗通道强度是很小的,所以此时暗通道的强度主要是由雾的散射光引起的(大气光)。
由此,现在我们已经求得图像的暗通道,下面将介绍如何利用暗通道先验来估计透过率。

2. 估计透过率t

  因为大气光值需要利用透过率的分布进行估计,所以我们放到后面介绍,这里我们先假定已知大气光值。利用大气光值对大气散射模型进行归一化:
I c ( x ) A c = t ( x ) J c ( x ) A c + 1 − t ( x ) \frac{ { {I^c}({\bf{x}})}}{ { {A^c}}} = t({\bf{x}})\frac{ { {J^c}({\bf{x}})}}{ { {A^c}}} + 1 - t({\bf{x}}) AcIc(x)=t(x)AcJc(x)+1t(x)对两边取暗通道操作可得:
min ⁡ y ∈ Ω ( x ) ( min ⁡ c I c ( y ) A c ) = t ~ ( x ) ⋅ min ⁡ y ∈ Ω ( x ) ( min ⁡ c J c ( y ) A c ) + 1 − t ~ ( x ) \mathop {\min }\limits_{y \in \Omega ({\bf{x}})} \left( {\mathop {\min }\limits_c \frac{ { {I^c}\left( {\bf{y}} \right)}}{ { {A^c}}}} \right) = \tilde t({\bf{x}}) \cdot \mathop {\min }\limits_{y \in \Omega ({\bf{x}})} \left( {\mathop {\min }\limits_c \frac{ { {J^c}\left( {\bf{y}} \right)}}{ { {A^c}}}} \right) + 1 - \tilde t({\bf{x}}) yΩ(x)min(cminAcIc(y))=t~(x)yΩ(x)min(cminAcJc(y))+1t~(x)由暗通道先验的特点可知,J的暗通道基本等于0,上式可表示为:
t ~ ( x ) = 1 − min ⁡ y ∈ Ω ( x ) ( min ⁡ c I c ( y ) A c ) \tilde t({\bf{x}}) = 1 - \mathop {\min }\limits_{y \in \Omega ({\bf{x}})} \left( {\mathop {\min }\limits_c \frac{ { {I^c}\left( {\bf{y}} \right)}}{ { {A^c}}}} \right) t~(x)=1yΩ(x)min(cminAcIc(y))直接利用本模型还存在一点小问题,当patch中存在距离断层时,透射率是常数这一假设不成立,因此在恢复的图像中,处于距离断层的边缘会有光晕效应。
光晕效应
  如图,在距离断层边缘,存在明显的光晕效应,这是因为透射率在patch中是常数这一假设在此处不成立了。为了解决这一问题,作者使用soft matting的技术来微调透射率的结果。

3. 使用soft matting微调透过率

软抠图的方法
在这里插入图片描述

4. 估计大气光值

  我们已经假设了大气光值是已知的。在本节中,我们提出了一个估计大气光值的方法。在前人的工作中,最不透明区域的值被用于当做大气光值A[11]或者A的初始猜测[10]。然而,人们却很少关注如何检雾的最不透明区域。
  在Tan的工作中,他把雾图中最亮的点当做最不透明点。这个结论只在阴天或者太阳光可以被忽略的条件下成立。在这种条件下,大气光是场景光的主要来源。因此,这个场景在每个颜色通道上的场景可以写成:
J ( x ) = R ( x ) A J({\bf{x}}) = R({\bf{x}})A J(x)=R(x)A对于每个场景点都有反照率 R ⩽ 1 R \leqslant 1 R1。因此,雾图成像方程可以写成
I ( x ) = R ( x ) ⋅ A ⋅ t ( x ) + A ( 1 − t ( x ) ) ⩽ A I({\bf{x}}) = R({\bf{x}}) \cdot A \cdot t({\bf{x}}) + A(1 - t({\bf{x}})) \leqslant A I(x)=R(x)At(x)+A(1t(x))A当图像中存在无穷远点时(场景透射率等于0),I中最亮的点就表示最不透明的点,它近似等于大气光值。不幸的是,在实践中,它仅仅在可以忽略太阳光的情况下有效。引入太阳光S,我们调整场景辐照度为
J ( x ) = R ( x ) ( S + A ) J({\bf{x}}) = R({\bf{x}})(S + A) J(x)=R(x)(S+A)此时,图像采集的光强可以表示为
I ( x ) = R ( x ) ⋅ S ⋅ t ( x ) + R ( x ) ⋅ A ⋅ t ( x ) + A ( 1 − t ( x ) ) I({\bf{x}}) = R({\bf{x}}) \cdot S \cdot t({\bf{x}}) + R({\bf{x}}) \cdot A \cdot t({\bf{x}}) + A(1 - t({\bf{x}})) I(x)=R(x)St(x)+R(x)At(x)+A(1t(x))在这种情况下,全图中最强的光可能大于大气光值,Tan的方法失效,最亮的可以是白色的车、白色的建筑或者其他反照率高的物体。
  在1.1节中我们介绍到场景透过率与大气值的关系为:
t = 1 − A ^ ( x ) / A ∞ t = 1 - \hat A(x)/{A_\infty } t=1A^(x)/A因此,在透过率等于0的区域就是雾图中雾最浓的区域,而在4.1节中我们已经估计出了透射率的相对分布(A未知,但相对关系已知)。暗通道图像某区域越亮,表示该区域透射率越低,我们选取暗通道图像中最亮的1%区域作为候选区域(检测过程),再选择I图像中候选区域最亮的值作为我们的大气光值 A ∞ {A_\infty } A
  估计完投射率和大气光值后,我们就可以计算出场景的辐照度 J ( x ) = I ( x ) − A t ( x ) + A J({\bf{x}}) = \frac{ {I(x) - A}}{ {t(x)}} + A J(x)=t(x)I(x)A+A

5. 灰度图像的处理

  对于灰度图像,由于它没有彩色通道,所以不需要在通道上取极小值。当场景存在较多的阴影或空洞时,暗通道算法仍然适用。
在这里插入图片描述

四、实验结果

  本文的算法比较简单且有效,本人已根据思路和参考资料复现出相应的程序。执行结果如下:
在这里插入图片描述

五. 问题转化

  当雾的浓度越来越浓是,场景的信号变得越来越低,那么此时恢复场景的着手点将转变为极低信号的检测与恢复。

附录

鉴于研究内容还未结束,这里只给出matlab程序框架,延迟开源,敬请谅解:

% 读取图像
I = imread('test.jpg'); % 图片可彩、可灰、可多通道

% 暗通道操作与大气光值估计
[I_dark,A] = dark_channel(I,15,0.99);

% 估计投射率
t = estimate_t(I,A);

% 恢复场景辐照度
[J, depth] = recover_J(I,t,A);

猜你喜欢

转载自blog.csdn.net/qq_34917728/article/details/118101901
今日推荐