刘心奥
(山东 兖州 272100)
图像除雾算法包括图像增强与图像还原。图像增强是从修改雾化图像的对比度入手进行除雾,图像增强算法一般具有较强的针对性,很少有通用算法。图像复原是较新型的除雾技术,因其实用性强,去雾效果相对自然,所以被广泛应用。本文所改进的是由何恺明教授于2009年提出的暗原色先验算法(部分文献称为暗通道先验算法),并在原有学者关于暗原色先验改进算法上进一步优化。
暗原色先验算法是基于这样一个大气散色模型
其中I表示有雾图像,J表示无雾条件下的场景辐照度,t表示雾气的通透程度,也称为透射率,A是大气光,通常被认定为大气、地平线处或者天空的颜色。
对户外无雾图像J进行分块,每个像素块定义暗原色如下:
式中:Ω(x)是以x 为中心的正方形邻域,Jc为J三原色的一个通道,Jdark(x)即为图像J在这个邻域的暗原色。观察统计表明Jdark趋于零。假设大气光A已知,首先在式(1)两端在每个像素块求取最小值:
根据暗原色先验无雾图像的暗原色趋于零,故由上式可得
当t(x)趋于零时,图像趋于包含噪音,因此常常需要设置一个透射率下限0.1。
最后得到J的求解公式为:
何恺明等人认为,在有雾的图像中,天空区域的颜色与大气光的颜色非常相近,透射率趋向于0,而天空实际的透射率也趋向于零,因此暗原色先验可直接应用于全部图像。但目前其他学者发现,天空区域颜色与大气光颜色之间的差别在除以了一个小量t后会被严重放大,造成天空区域的去雾图像产生光晕等失真现象,这种失真现象在白墙等明亮区域也有所体现,因此应将天空区域与非天空区域分离处理。
本文算法的基本思路是:将天空区域和非天空区域分别使用蒋建国提出的容差机制和插值算法计算非天空区域透射率方法,两者结合,最终防止了天空(明亮)区域色彩失真问题。对大气光A的估计,本文综合李坤与何恺明的方法,先对图像的暗原色进行排序,取出最亮的0.1%的像素,然后在雾图像中对应的最亮0.1%的像素值作为大气光值,做到了简化,同时避免了图像有大块白色建筑物等特殊情况下的错误。对于透射率t的估计,由于何恺明等的SoftMatting算法所耗时间很长,对计算机内存消耗特别大,本文采用一种插值方法快速计算透射率。根据公式(3)可以推导出:
现令暗原色图中最小值为Ic(m ,n),最大值为Ic(p ,q),也就是:
利用插值方法,可以估计无雾图像J中每个像素点的暗原色值:
将以上公式代入公式(6),可得:
对于天空区域,因为不符合暗原色先验理论,所以引入参数K,利用容差机制增大天空区域的透射率t1:
将透射率进行融合处理。具体操作如式(12)所示:
将公式(12)代入公式(13)即可求得去雾图像。综上所述,本文算法原理如图1。
图1 本文算法原理图
本文利用信息熵对不同算法结果进行比较分析。信息熵是信息论中用于度量信息量的一个概念,成熟的信息熵理论利用可以通过图像灰度值的概率分布来描述图像信息量的大小。设图像灰度值的概率分布有m种可能情况,每种情况发生的概率分别是
那么信息熵的定义式为:
根据以上公式,可以用香农熵来衡量图像所包含的信息量,图像灰度值的概率分布是每个灰度值出现的次数除以所有灰度值出现的总次数所得的商,那么,如果一幅图像中含有很多不同的灰度值,则各灰度值出现的次数较少,概率就小,它的熵值就会很高,那么这幅图像包含的信息量就很大。
图形用户界面(GraphicalUserInterfaces,GUI)是提供人机交互的一种工具或者方法,具有一些简单的菜单并且点击它能够实现相应的功能。本系统实现了图像去雾功能。采用Matlab界面编程方法,设计了1个窗口,窗口中包含了3菜单,即“文件”菜单,“原始算法”菜单,“改进算法”菜单。
图2 载入图片后的GUI界面
通过图像对比,我们可以看到,原始暗原色算法已经除去大部分雾,但树木和地面部分色彩略失真,改进后的算法运行出的结果较为接近真实状态,地面人物和汽车能够与周围环境区别开来。此外,通过信息熵的对比也可以看出,改进后的算法运行出的去雾图片所包含的信息量更大。进一步运行多组含雾图片,得出对比图,将所得结果列表比较如图3。
图3 多组图像去雾效果对比
对以上图像处理细节进行比较:在第1幅图的处理结果中,通过暗原色先验方法得到的图像在整体上存在明显的失真,图像整体变灰白,本文方法得到的图像色彩鲜明,纹理清晰,整体品质较好。在第3幅图的处理结果中,可以看到原始方法的局限性,当非天空区域与天空区域亮度相近时,图像存在明显失真,颜色偏深。改进的去雾算法真实还原了场景中的颜色深浅,恢复出来的效果更加逼真。可以看到,本文算法得出的图片信息熵值都要比原算法的值要大,说明本文算法信息量更大,图像除雾后的质量也更高。
自然中的雾分为薄雾、中雾与浓雾。这些情况下本文算法的适用能力还需进一步实验。
本文算法具有以下的创新点:综合使用了何恺明与蒋建国的方法,并在透射率融合时利用乘法,有效减少了繁琐的计算过程。在计算透射率时规避软抠图算法,大大减少了计算机运行时间。