(c)导向滤波获得透射率图 (d)联合双边滤波透射率图(Sigmad=SigmaR=100)
上图可以很明显的看出联合双边滤波的透射率图没有导向滤波的精细,但比原始的粗糙的透射率图还是好很多,过渡很光滑,因此,也能获得不错的视觉去雾效果。
联合双边滤波器中的算法是参考了OpenCv中相关函数写的。
和平常一样,提供一个可供大家测试效果的程序: 基于暗原色先验的图像去雾演示程序
我分别用VB6和C#做了个程序,两个程序都已经通过各自的语言方式进行了优化,算法部分编码是一样的,C#运行速度大约是VB6的1.8倍。
在处理速度上,比matalb的快了很多倍,在I3的笔记本电脑上,一副1024*768的图像去雾时间大约在150ms内(以灰度图为导向图)。
五、算法的局限性
暗原色先验是一种统计的结果,是对大量户外无雾照片(outdoor haze-free images)的统计结果,如果目标场景内在的就和大气光类似,比如雪地、白色背景墙、大海等,则由于前提条件就不正确,因此一般无法获得满意的效果,而对于一般的风景照片这个算法能处理的不错。
2013.8.23 后记补充修正:
在后续对该算法的关注中,发现自己在前面做出了一个错误的判断,就是关于式(11)中/A的操作。我在前面说这个除法会引起一些问题,因此,去除了这一步。但是后来的实践证明正是有了这一步,对于对比度低的图像才可
以获得很好的去雾高对比度图。
前面说的/A操作可能会导致t的值小于0,这种情况就可以把t的值直接设置为0来解决。
还有一个事情就是式(11)严格的来说是要对原始图像的每个通道进行归一化后,再取每个通道R/G/B值的最小值得到中间图,然后对这个中间图进行指定半径的最小值滤波后,通过11式得到粗糙的透射率图,那么这样就需要多不少计算,我在实际中发现如果直接用前面的暗通道图/A进行操作,两者的效果区别不明显,因此,可用这种简便的方式。
上图是一副经典的测试图,虽然取得了比较好的效果,不过似乎马路那一块的效果不如一些其他人公开的成果那么好。
这也是一副比较常见的测试图,该图也是紧用去雾获得结果,未做任何的后处理,同CSDN一个的案例库:图像去雾的算法研究中的效果相比,在整幅图像的对比和和协调性上都要好一个档次。 再如下图,也比CSDN那个案例库中的效果要好很多。