暗通道先验算法

本文创新点: 作者提出暗通道先验算法,即:在户外无雾图像中(非天空区域)的大部分局部区域,存在一些像素点(暗像素)在至少一个颜色通道中具有非常低的值,趋近于0。(暗通道图可以估计雾浓度信息)
大气散射模型
在计算机视觉中,描述有雾图像的模型可以表示为
I ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x ) ) I(x)=J(x)t(x)+A(1-t(x)) I(x)=J(x)t(x)+A(1t(x)) (1)
I ( x ) I(x) I(x)为观察到的有雾图像, J ( x ) J(x) J(x)为无雾图像, A A A是大气光值, t ( x ) t(x) t(x)为透射率,表示能够到达计算机系统的没有被散射掉的一部分光。
去雾的目的是从无雾图像 I ( x ) I(x) I(x)中恢复 J ( x ) J(x) J(x) A A A t ( x ) t(x) t(x)
暗通道先验
作者根据对5000多幅无雾图像的暗通道图数据观察发现:约75%的像素值为0,且90%的像素点具有非常低的值,且集中在[0,16]。由此提出暗通道先验理论,即对于一副无雾图像,其暗通道可以表示为:
J d a r k = m i n y ∈ Ω ( x ) ( m i n c ∈ ( r , g , b ) J c ( y ) ) J^{dark}=min_{y\in \Omega(x)} (min_{c\in (r,g,b)} J^c(y)) Jdark=minyΩ(x)(minc(r,g,b)Jc(y)) (2)
J c ( y ) J^c(y) Jc(y)表示 J J J的任意一个颜色通道, Ω ( x ) \Omega(x) Ω(x) 表示在像素点 x x x的窗口。
根据暗通道先验理论得出:
J d a r k → 0 J^{dark}\rightarrow 0 Jdark0 (3)
本文思路:
1 透射率估计
假设大气光已知,利用大气光对大气散射模型(1)作归一化处理:
I c ( x ) A c   = t ( x ) J c ( x ) A c   + 1 − t ( x ) \frac{I^c(x)}{A^c} \ =t(x) \frac{J^c(x)}{A^c}\ +1-t(x) AcIc(x) =t(x)AcJc(x) +1t(x) (4)
假设透射率局部区域 Ω ( x ) \Omega(x) Ω(x) 是恒定不变的,计算式(4)的暗通道,即求最小通道和作最小值滤波:
m i n y ∈ Ω ( x ) ( m i n c I c ( y ) A c ) = t ~ ( x ) m i n y ∈ Ω ( x ) ( m i n c J c ( y ) A c ) min_{y\in \Omega(x)}(min_c \frac{I^c(y)}{A^c})=\widetilde{t}(x) min_{y\in\Omega(x)}(min_c \frac{J^c(y)}{A^c}) minyΩ(x)(mincAcIc(y))=t (x)minyΩ(x)(mincAcJc(y)) (5)
在无雾图像中, 由于 A c A^c Ac是确定的,根据暗通道先验可得 J J J的暗通道为0,即:
J d a r k = m i n y ∈ Ω ( x ) ( m i n c J c ( y ) A c ) = 0 J^{dark}=min_{y\in\Omega(x)}(min_c\frac{J^c(y)}{A^c})=0 Jdark=minyΩ(x)(mincAcJc(y))=0 (6)
将式(6)带入(5),可得透射率的表达式:
t ~ ( x ) = 1 − m i n y ∈ Ω ( x ) ( m i n c I c ( y ) A c ) \widetilde{t}(x)=1-min_{y\in \Omega(x)}(min_c \frac{I^c(y)}{A^c}) t (x)=1minyΩ(x)(mincAcIc(y)) (7)
为了在景深处保持一定的雾感,使图像看起来更真实自然,本文对式(7)引进一个恒定参数 ω ( 0 < ω ≤ 1 ) \omega(0<\omega \le1) ω(0<ω1)
t ~ ( x ) = 1 − ω m i n y ∈ Ω ( x ) ( m i n c I c ( y ) A c ) \widetilde{t}(x)=1-\omega min_{y\in \Omega(x)}(min_c \frac{I^c(y)}{A^c}) t (x)=1ωminyΩ(x)(mincAcIc(y)) (8)
本文中, ω \omega ω=0.95。
透射率优化
由于暗通道中使用了最小滤波,因此式(8)得到的透射率含有halo效应和块状效应,为了解决这一问题,作者先后提出了soft-matting和导向滤波的优化算法来优化透射率,值得注意的是,soft-matting算法可以很好地消除halo现象和块状现象,但其时间复杂度大大增加;导向滤波算法时间复杂度较小,但其复原后的图像去雾不彻底,在边缘突变区域仍存在一定程度的雾。
2大气光估计
在前人的研究中,把大气光取值定在图像中雾最不透明区域。
在图像中,雾浓度越低,其暗通道图越暗,像素点值越小;雾浓度越高,其暗通道图越亮,像素点值越大,因此,暗通道图可以较好的反映雾浓度信息。
本文对于大气光值的选取方法为:先在暗通道图中选出图中前0.1%的像素值最大的像素点(这些像素点通常表示的是雾最不透明的点),这些像素点对应到有雾图像中,选取像素值最高的像素点作为大气光A。
3图像复原
根据大气散射模型,将大气光A和t透射率 t ~ ( x ) \widetilde{t}(x) t (x)代入式(1),可得出最终的复原场景:
J ( x ) = I ( x ) − A m a x ( t ( x ) , t 0 ) + A J(x)= \frac{I(x)-A}{max(t(x),t_0)}+A J(x)=max(t(x),t0)I(x)A+A (9)
其中, t 0 t_0 t0值为0.1。由于场景点通常不如大气光亮,因此复原后的图像整体较暗,因此我们需要对复原图像 J ( x ) J(x) J(x)进行增强。
本文算法不足
1 暗通道中使用了最小滤波器,容易产生块状现象和halo效应。
2 本文对一些特定图像(含有白色景物和天空区域等)失效。
3 当大气散射模型失效时,本文算法会失败。
伪代码

1  对有雾图像作两次最小滤波min(min(I(x))),求暗通道;
2  求大气光:range=ceil(img_size*0.001);%取暗原色中最亮的0.1%的点数
            radi_pro=zeros(range,1); %用于记录最亮点内对应图片点象素的三个通道的颜色强度
            A=max(radi_pro)/3;%大气光的值(3个颜色通道的平均值)
3    求透射率: t = 1 - w*(I^dark./A)
4    根据大气散射模型复原图像

复原效果
暗通道先验算法_第1张图片

暗通道先验算法_第2张图片
暗通道先验算法_第3张图片

你可能感兴趣的:(图像去雾,暗通道,何凯明,dark,channel,prior)