文献引文信息: 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).
文献来源:https://ieeexplore.ieee.org/document/4587643
从暗通道的文章中知道这篇极大化对比度的文章,所以想专门学习一下这篇文献的方法。
一、摘要
In this paper, we introduce an automated method to removal fog. Based on two priors: first, images with enhanced visibility(or clear-day images) have more contrast than images plagued by bad weather; second, airlight whose variation mainly depends on the distance of objects to viewer, tends to be smooth. Relying on these two priors, we develop a cost function in the framework of Markov random fields, which can be significantly optimized by various techniques, such as graph-cuts or belief propagation.
本文介绍了一种只需要一张图片的自动去雾算法。存在两个基本的先验:首先,高能见度(或清晰场景)图片相比于受恶劣天气干扰的图片具有更高的对比度;其次,天空光的变化主要依赖于场景到观察者的距离,并趋向于平滑图像。基于这些先验,本文提出了一个基于马尔科夫场的损失函数。该损失函数可以由多种技术进行优化,比如graph-cuts或者简单传播等。
像雾、霾等恶劣天气会极大地降低场景的能见度。光学上来说,这是由于大气中存在大量的吸收和散射光的粒子。在计算机视觉中,这些吸收和散射过程通常由直接衰减和大气光的线性组合所描述。
二、基本原理
1. 光学模型:
I ( x ) = L ∞ ρ ( x ) e − β d ( x ) + L ∞ ( 1 − e − β d ( x ) ) … … ( 1 ) I(x) = {L_\infty }\rho (x){e^{ - \beta d(x)}} + {L_\infty }(1 - {e^{ - \beta d(x)}}) ……(1) I(x)=L∞ρ(x)e−βd(x)+L∞(1−e−βd(x))……(1)其中第一项是衰减项,第二项是大气光干扰项。 L ∞ {L_\infty } L∞表示无穷远处的大气光值。 ρ ( x ) \rho (x) ρ(x)表示场景反射率。
定义色度:
σ
c
=
I
c
I
r
+
I
g
+
I
b
…
…
(
2
)
{\sigma _c} = \frac{{{I_c}}}{{{I_r} + {I_g} + {I_b}}}……(2)
σc=Ir+Ig+IbIc……(2)c表示某一色彩通道。
因此,位于无穷远的场景,其色度为:
α
c
=
L
∞
c
L
∞
r
+
L
∞
g
+
L
∞
b
…
…
(
3
)
{\alpha _c} = \frac{{{L_{\infty c}}}}{{{L_{\infty r}} + {L_{\infty g}} + {L_{\infty b}}}}……(3)
αc=L∞r+L∞g+L∞bL∞c……(3)若场景中不存在散射,则有
γ
c
=
L
∞
c
ρ
c
L
∞
r
ρ
r
+
L
∞
g
ρ
g
+
L
∞
b
ρ
b
…
…
(
4
)
{\gamma _c} = \frac{{{L_{\infty c}}{\rho _c}}}{{{L_{\infty r}}{\rho _r} + {L_{\infty g}}{\rho _g} + {L_{\infty b}}{\rho _b}}}……(4)
γc=L∞rρr+L∞gρg+L∞bρbL∞cρc……(4)故而,由上面(3)(4)式可以将(1)转换为:
I
(
x
)
=
D
(
x
)
e
−
β
d
(
x
)
γ
(
x
)
+
A
(
x
)
α
…
…
(
5
)
{\bf{I}}(x) = D(x){e^{ - \beta d(x)}}\gamma (x) + A(x){\bf{\alpha }}……(5)
I(x)=D(x)e−βd(x)γ(x)+A(x)α……(5)其中:
D
(
x
)
=
L
∞
r
ρ
r
+
L
∞
g
ρ
g
+
L
∞
b
ρ
b
…
…
(
6
)
D(x) = {L_{\infty r}}{\rho _r} + {L_{\infty g}}{\rho _g} + {L_{\infty b}}{\rho _b}……(6)
D(x)=L∞rρr+L∞gρg+L∞bρb……(6)
A
(
x
)
=
(
L
∞
r
+
L
∞
g
+
L
∞
b
)
(
1
−
e
−
β
d
(
x
)
)
…
…
(
7
)
A(x) = ({L_{\infty r}} + {L_{\infty g}} + {L_{\infty b}})(1 - {e^{ - \beta d(x)}})……(7)
A(x)=(L∞r+L∞g+L∞b)(1−e−βd(x))……(7)D和A都是标量,
γ
\gamma
γ和
α
\alpha
α是归一化彩色向量。
根据色度的定义可知: ∑ σ c = σ r + σ g + σ b = 1 {\sum {{\sigma _c} = } {\sigma _r} + {\sigma _g} + {\sigma _b} = 1} ∑σc=σr+σg+σb=1, ∑ γ c = γ r + γ g + γ b = 1 {\sum {{\gamma _c} = } {\gamma _r} + {\gamma _g} + {\gamma _b} = 1} ∑γc=γr+γg+γb=1, ∑ α c = α r + α g + α b = 1 {\sum {{\alpha _c} = } {\alpha _r} + {\alpha _g} + {\alpha _b} = 1} ∑αc=αr+αg+αb=1。
白大气光:
利用光色
(
α
)
(\alpha)
(α),我们可以转换大气光值为白色,通过简单的归一化即可实现:
I
′
c
(
x
)
=
I
c
(
x
)
/
α
c
…
…
(
8
)
→
{{I'}_c}(x) = {I_c}(x)/{\alpha _c} ……(8)→
I′c(x)=Ic(x)/αc……(8)→
I
′
c
(
x
)
=
D
(
x
)
e
−
β
d
(
x
)
γ
c
α
c
+
A
(
x
)
=
D
(
x
)
e
−
β
d
(
x
)
γ
′
c
+
A
(
x
)
…
…
(
10
)
{{I'}_c}(x) = D(x){e^{ - \beta d(x)}}\frac{{{\gamma _c}}}{{{\alpha _c}}} + A(x) = D(x){e^{ - \beta d(x)}}{{\gamma '}_c} + A(x)……(10)
I′c(x)=D(x)e−βd(x)αcγc+A(x)=D(x)e−βd(x)γ′c+A(x)……(10)其中
γ
′
c
{{\gamma '}_c}
γ′c表示归一化的目标色度。
I
′
c
{{I'}_c}
I′c即是我们转化大气光点为白点的结果。
最终方程可以写成彩色向量的形式:
I
′
(
x
)
=
D
(
x
)
γ
′
(
x
)
e
−
β
d
(
x
)
+
A
(
x
)
[
1
1
1
]
T
…
…
(
11
)
I'(x) = D(x)\gamma '(x){e^{ - \beta d(x)}} + A(x){\left[ {1{\text{ }}1{\text{ }}1} \right]^{\text{T}}}……(11)
I′(x)=D(x)γ′(x)e−βd(x)+A(x)[1 1 1]T……(11)其中
I
′
I'
I′和
γ
′
\gamma'
γ′是归一化彩色向量,其余变量都是标量。
2. 问题描述
参考方程(11)并假设我们有
I
′
(
x
)
I'(x)
I′(x)和
L
∞
L_\infty
L∞的值,故而本文的目标是估计整个图像的
D
(
x
)
γ
′
(
x
)
D(x)\gamma'(x)
D(x)γ′(x)。这幅图像表示场景辐照度(未被散射和吸收)。
估计
D
(
x
)
γ
′
(
x
)
D(x)\gamma'(x)
D(x)γ′(x)实际上相当于估计A。我们可以根据以下流程进行计算:首先,基于方程(7),我们有
e
−
β
d
(
x
)
=
∑
c
L
∞
c
−
A
(
x
)
∑
c
L
∞
c
…
…
(
12
)
{e^{ - \beta d(x)}} = \frac{{\sum\nolimits_c {{L_{\infty c}}} - A(x)}}{{\sum\nolimits_c {{L_{\infty c}}} }}……(12)
e−βd(x)=∑cL∞c∑cL∞c−A(x)……(12)其中
∑
c
L
∞
c
=
L
∞
r
+
L
∞
g
+
L
∞
b
{\sum\nolimits_cL_{\infty c}}={{L_{\infty r}} + {L_{\infty g}} + {L_{\infty b}}}
∑cL∞c=L∞r+L∞g+L∞b.其次,基于方程(11)有
因此,我们首先估计A值,而不是直接估计
D
γ
′
D\gamma'
Dγ′,这大大简化了计算过程。因为A独立物体的反射率,而仅仅依赖于成像深度d,这里我们已经假设
β
\beta
β和
L
∞
L_\infin
L∞是全局常数。
3. 使用单帧图像进行求解
在第一小节中描述问题是一个完全病态的问题:方程(11)已知的变量数少于未知的变量数。然而,这里有一些线索或者先验可以被考虑进来:
- ①输出图像 D γ ′ D\gamma' Dγ′相比于输入图像必须有更大的对比度;
- ②A值的变化只依赖于场景深度,即相同成像距离具有相同的A值,无需考虑反射率。因此A的邻域趋向于有相同的值。再者,在很多情况下A在很小的区域是平滑变化的。只有在场景中depth断层的地方例外,但这些像素总体较少。
- ③除了以上两个主要的先验外,我们同样可以考虑:被恶劣天气干扰的图像通常情况下都是采集户外自然场景。因此准确的 D γ ′ D\gamma' Dγ′必须符合清晰自然图像的特点。
3.1 最大化对比度
针对第一条线索,我们定量地定义与边缘数量相关的图像对比度,它可以表示为:
C
e
d
g
e
s
(
I
)
=
∑
x
,
c
∣
∇
I
c
(
x
)
∣
…
…
(
14
)
{C_{edges}}(I) = \sum\limits_{x,c} {\left| {\nabla {I_c}(x)} \right|}……(14)
Cedges(I)=x,c∑∣∇Ic(x)∣……(14)其中
∇
\nabla
∇是沿着x轴与y轴的差分操作。这个方程表明了对比度更大的图像具有更多的边缘。换而言之,清晰图像相比于雾图具有更多的边缘,也即
C
e
d
g
e
s
(
D
γ
′
)
>
C
e
d
g
e
s
(
I
′
)
{C_{edges}}(D\gamma')>{C_{edges}}(I')
Cedges(Dγ′)>Cedges(I′)。
从第一小节我们已经知道 D γ ′ D\gamma' Dγ′可以根据方程(7)从A中获得: 0 ⩽ A ( x ) ⩽ ∑ c L ∞ c ( x ) 0 \leqslant A(x) \leqslant \sum\limits_c {{L_{\infty c}}(x)} 0⩽A(x)⩽c∑L∞c(x)。
因此,我们准备一小图像块(假设块中depth和 β \beta β是常数),那么存在一个标量A,它可以给出正确的 D γ ′ D\gamma' Dγ′,其中 D γ ′ D\gamma' Dγ′必须满足: C e d g e s ( D γ ′ ) > C e d g e s ( p ) {C_{edges}}(D\gamma')>{C_{edges}}(p) Cedges(Dγ′)>Cedges(p)和 0 ⩽ D γ ′ ⩽ L ∞ c 0 \leqslant D\gamma' \leqslant {{L_{\infty c}}} 0⩽Dγ′⩽L∞c。
进一步表示
D
γ
′
D\gamma'
Dγ′为:
C
e
d
g
e
s
(
D
γ
′
)
=
∑
c
L
∞
c
∑
c
L
∞
c
−
A
∑
x
,
c
∣
(
I
′
x
,
c
−
I
′
x
−
1
,
c
)
∣
{C_{edges}}(D\gamma ') = \frac{{\sum\nolimits_c {{L_{\infty c}}} }}{{\sum\nolimits_c {{L_{\infty c}}} - A}}\sum\limits_{x,c} {\left| {\left( {{{I'}_{x,c}} - {{I'}_{x - 1,c}}} \right)} \right|}
Cedges(Dγ′)=∑cL∞c−A∑cL∞cx,c∑∣(I′x,c−I′x−1,c)∣
在一小块区域中,通过设置不同的A找到对比度最大时的情况;
通过设置不同的A,我们绘制出对比度的变化曲线:
本文中提到,当对比度取得最大值时,不一定是物体真实的辐照度情况,但它极大地增强了图像的对比度;
3.2 大气光的平滑约束
根据第二个线索,A在大部分像素上是平滑的。由此启发我们使用马尔科夫场来对A建模。我们建立了潜在的马尔科夫场函数:
E
(
{
A
x
}
∣
p
x
)
=
∑
ϕ
(
p
x
∣
A
x
)
+
η
∑
x
,
y
∈
N
x
ψ
(
A
x
,
A
y
)
…
…
(
17
)
E\left( {\left\{ {{A_x}} \right\}|{p_x}} \right) = \sum\limits_{} {\phi \left( {{p_x}|{A_x}} \right) + \eta \sum\limits_{x,y \in {N_x}} {\psi \left( {{A_x},{A_y}} \right)} } ……(17)
E({Ax}∣px)=∑ϕ(px∣Ax)+ηx,y∈Nx∑ψ(Ax,Ay)……(17)其中
p
x
p_x
px是以x为中心的小块,并假设
A
x
≡
A
(
x
)
{A_x} \equiv A(x)
Ax≡A(x)。
η
\eta
η是平滑项的强度,
N
x
N_x
Nx表示x的邻域。我们定义第一项为:
ϕ
(
p
x
∣
A
x
)
=
C
e
d
g
e
s
(
[
D
γ
′
]
x
∗
)
m
…
…
(
18
)
\phi \left( {{p_x}|{A_x}} \right) = \frac{{{C_{edges}}([D\gamma ']_x^*)}}{m}……(18)
ϕ(px∣Ax)=mCedges([Dγ′]x∗)……(18)m用于归一化对比度,使得概率小于1大于0。m的值依赖于块的尺寸。第二项(平滑项)定义为:
ψ
(
A
x
,
A
y
)
=
1
−
∣
A
x
−
A
y
∣
∑
c
L
∞
c
\psi \left( {{A_x},{A_y}} \right) = 1 - \frac{{\left| {{A_x} - {A_y}} \right|}}{{\sum\nolimits_c {{L_{\infty c}}} }}
ψ(Ax,Ay)=1−∑cL∞c∣Ax−Ay∣这个方程激励A_x的邻域变得平滑。
为了找到所有{A_x}的值,我们必须最大化p{A_x}的概率分布。可以使用现存的推理技术,如图形切割或置信传播。
三. 计算方法
根据对本文算法的理解,自行实现相应的代码。
四、实验结果与分析
1. 薄雾的情况
从结果上看,本文的方法在求解模型的基础上给出了最大对比度的结果,相比于直方图均衡化,具有更真实的辐照情况。在计算过程中,其对比度变化曲线如下:
2. 较浓雾的情况
当雾比较浓时,从分辩场景的角度来看,直方图均衡化具有更明显的效果。对应的对比度变化曲线: