代码开源在 https://github.com/BBuf/Image-processing-algorithm,感兴趣给我来个星星呗。
1. 前言
这是OpenCV图像处理算法朴素实现专栏的第17篇文章。今天为大家带来一篇之前看到的用于单幅图像去雾的算法,作者来自清华大学,论文原文见附录。
2. 雾天退化模型
之前在介绍何凯明博士的暗通道去雾论文OpenCV图像处理专栏六 | 来自何凯明博士的暗通道去雾算法(CVPR 2009最佳论文)的时候已经讲到了这个雾天退化模型,我们这里再来回顾一下。在计算机视觉领域,通常使用雾天图像退化模型来描述雾霾等恶劣天气条件对图像造成的影响,该模型是McCartney首先提出。该模型包括衰减模型和环境光模型两部分。模型表达式为:
I ( x ) = J ( x ) e − r d ( x ) + A ( 1 − e − r d ( x ) ) . . . . . . . . . . . . . . . . . . . . . . . . . . . ( 1 ) I(x)=J(x)e^{-rd(x)}+A(1-e^{-rd(x)})...........................(1) I(x)=J(x)e−rd(x)+A(1−e−rd(x))...........................(1)
其中, x x x是图像像素的空间坐标, H H H是观察到的有雾图像, F F F是待恢复的无雾图像, r r r表示大气散射系数, d d d代表景物深度, A A A是全局大气光,通常情况下假设为全局常量,与空间坐标 x x x无关。
公式(1)中的 e − r ( d x ) e^{-r(dx)} e−r(dx)表示坐标空间 x x x处的透射率,我们使用 t ( x ) t(x) t(x)来表示透射率,于是得到公式(2):
I ( x ) = J ( x ) t ( x ) + A ( 1 − t ( x ) ) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ( 2 ) I(x)=J(x)t(x)+A(1-t(x)).............................(2) I(x)=J(x)t(x)+A(1−t(x)).............................(2)
由此可见,图像去雾过程就是根据 I ( x ) I(x) I(x)求解 J ( x ) J(x) J(x)的过程。要求解出 J ( x ) J(x) J(x),还需要根据 I ( x ) I(x) I(x)求解出透射率 t ( x ) t(x) t(x)和全局大气光 A A A。实际上,所有基于雾天退化模型的去雾算法就是是根据已知的有雾图像 I ( x ) I(x) I(x)求解出透射率 t ( x ) t(x) t(x)和全局大气光 A A A。
对于暗通道去雾算法来说,先从暗原色通道中选取最亮的0.1%比例的像素点,然后选取原输入图像中这些像素具有的最大灰度值作为全局大气光值 A A A。RGB三通道中每一个通道都有一个大气光值。
然后根据公式(2)可以得出:
t ( x ) = A − I ( x ) A − J ( x ) . . . . . . . . . . . . . . . . . . . . . . . . . . . ( 3 ) t(x)=\frac{A-I(x)}{A-J(x)}...........................(3) t(x)=A−J(x)A−I(x)...........................(3)
首先可以确定的是 t ( x ) t(x) t(x)的范围是 [ 0 , 1 ] [0, 1] [0,1], I ( x ) I(x) I(x)的范围是 [ 0 , 255 ] [0,255] [0,255], J ( x ) J(x) J(x)的范围是 [ 0 , 255 ] [0, 255] [0,255]。 A A A和 I ( x ) I(x) I(x)是已知的,可以根据 J ( x ) J(x) J(x)的范围从而确定 t ( x ) t(x) t(x)的范围。已知的条件有:
0 < = J ( x ) < = 255 , 0 < = I ( x ) < = A , 0 < = J ( x ) < = A , 0 < = t ( x ) < = 1............... ( 4 ) 0<=J(x)<=255, 0<=I(x)<=A,0<=J(x)<=A,0<=t(x)<=1...............(4) 0<=

最低0.47元/天 解锁文章
10万+

被折叠的 条评论
为什么被折叠?



