暗通道先验算法

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

复原效果
暗通道先验算法

暗通道先验算法
暗通道先验算法