摘要:针对已有的基于DSP的实时去雾算法出现的问题进行优化和改进。在降采样倍数过大时,去雾效果会出现一些副作用,包括纹理细节丢失、块效应和亮度偏暗。针对这三个问题,本文采用均值降采样、双线性插值升采样、透射率补偿等方式进行优化。最终针对实际YUV图像进行了优化方法的实验,表明可以达到较好的去雾效果。
关键词:去雾;优化;降采样;升采样
0引言
近几年,随着空气污染的日益严重,雾霾给人们的生活与生产带来了极大的影响。尤其在各大城市,雾霾造成的能见度降低严重影响了道路交通和交通监控的性能,所以实时图像去雾的需求也越来越迫切。目前图像去雾方法主要分为图像增强法和基于物理模型的复原方法。在众多去雾算法中,何凯明博士在2009年提出的基于暗原色先验的去雾算法由于其去雾效果稳定且自然而被广泛采用[1]。
虽然基于暗原色先验的去雾算法计算去雾效果非常出色,但由于其复杂度高,计算时间比较长,而且大部分时间集中在导向滤波求精细透射率处[2]。为了满足实时处理的要求,已有的实时去雾算法中一般采用降采样的方法[3]。通过降采样得到小图,再对小图进行去雾处理,最终采用小图的透射率对大图进行去雾处理。这样处理可以极大地缩短计算时间。此方法在降采样倍数较低时,对去雾效果并没有太大影响,但当降采样倍数较高时,去雾效果则会明显下降。本文针对采用降采样的实时图像去雾算法进行优化与改进,通过加入均值降采样、升采样等方法进行优化,最终得到比较好的处理结果。
1均值降采样
降采样倍数过高时,图像在部分明暗相接处的暗处会出现一些纹理细节丢失的情况,主要表现为由原来较暗的图像变为黑色。经分析,这种现象由降采样的取值方式导致。
临近点降采样方法是分别在图像的行和列两个方向上每隔M个点抽取一个采样点,其中M为降采样倍数。采用这种方式进行降采样的结果等效为将大图细分为若干个M×M的小图,抽取每个小图左上角的值凑成降采样图。这种方法用一个点代替整个小图的图像数据,在部分情况下会有较大影响。如图1所示。
如图1所示,10×10的大图经过5倍降采样后变为黑白各半的小图。由文献[1]可知,白色像素的暗通道值Idark比较高。通过暗通道求透射率t为:
易知白色像素计算出的透射率小于灰色像素计算出的透射率。图像恢复公式如下:
通常情况下大气光值A大于各个像素的值I,故当用小图恢复大图时,对于大图左上角5×5小图中的灰色部分像素值,由于远小于大气光值A,故I-A的值为负数,并且绝对值比较大,而透射率又为白色像素对应的较小的透射率,故可能会变为0或负数,处理结果变为黑色。在图像中如果存在着类似的边界,则边界处的暗处纹理可能会被处理为黑色,造成信息流失和不自然。
采用均值降采样可以比较好地解决这种问题。均值降采样与临近点采样的区别在于将大图分为若干个M×M的小图后,不再只取左上角的点,而是将整个小图所有像素的值取均值,用均值代替整个小图。采用这种方法后由于黑色占大多数,所以降采样的结果不再是白色,而是灰色。灰色对应的透射率较大,故不易被处理为黑色造成信息流失。但均值降采样会带来比较大的计算量,可采用文献[4]中的盒式滤波算法。
2双线性插值升采样
经过高倍数降采样后,去雾后的图像会出现比较明显的块效应。这主要是由于降采样后,在整幅图像恢复时,每一小块图像都用同一个透射率处理,中间缺少过渡。对于图像中较大的物体,在图像恢复时可能会被分为若干小块,每个小块分别采用不同大小的透射率,因此图像恢复后可能导致结果分布不均匀。
针对这个问题,本文采用双线性插值升采样方法。双线性插值法根据所求像素点距参考点位置进行计算,所求点距某个像素越近则相对应的权值就越大,距某个像素越远则对应的权值就越小。双线性插值原理如图2所示。
设所求像素值为dest,对应横坐标为r,纵坐标为c,图2中四个角的值分别为value1、value2、value3和value4。则dest计算公式为:
dest=w1×value1+w2×value2+w3×value3+
w4×value4
其中:
其中,ratio为升采样半径。
采用双线性插值升采样处理小图透射率,得到较平滑的大图透射率,再通过这个透射率恢复图像,图像上的块效应得到明显改善。
3亮度补偿
经过暗原色先验去雾算法处理后的图像总会有亮度偏暗的情况,这个问题在文献[3]中有叙述。其主要原因是在去雾算法中,预估的透射率表示为:
因为Jc(y)t(x)总是大于0,所以预估透射率比实际值偏小。又因为图中大部分像素的值都小于A,由图像恢复公式可知恢复出的图像均小于实际值,所以图像整体偏暗。为了解决这个问题,本文采用两种方式:透射率补偿及亮度后处理。这两种方法都可以起到增加图像亮度的效果。
3.1透射率补偿
根据文献[3]中的叙述,由于近似计算,基于暗原色先验的去雾算法计算出的透射率偏小,由于大部分像素值小于透射率,经去雾后,像素值相对于大气光值的差会被放大,即变得更小,所以去雾后的图像会偏暗。为了补偿这个偏差,本文提出在透射率求出后加上一个补偿值,计算公式如下:
通过加入补偿值p,可以适当增大预估透射率的值。但这个值通常不能取太大,一般取值范围为008~025。经过试验这种方法可以极大地改善去雾后图片偏暗的情况。
3.2亮度后处理
由于本文针对的是YUV格式的图像,这种图像每个像素点对应三个分量,分别是:亮度分量Y和两个色差分量U、V。所以若图像偏暗,可以通过调节三个分量中的Y分量进行补偿。
本文采用图像增强算法中的对比度拉伸法,详见文献[5]。这种算法计算复杂度比较低,实现简单。主要实现方法为:在图像去雾后,对图像的Y通道进行对比度拉伸,使图像中大部分的亮度得到提升。拉伸曲线设计见图3。
4处理结果及分析
经过上述优化和改进,将优化前与优化后结果进行对比。
采用均值降采样后,处理结果如图4~图6所示。
从图5、6中可见,在圆圈标注的明暗交界处,临近点降采样处理后,楼顶处的纹理细节消失,而经过优化后,楼顶细节保持完好。
采用双线性插值法进行优化后,处理结果如图7~图9所示。
可以看到,未加双线性升采样之前,在飞机发动机处有明显的块效应,在加入升采样后,该处不自然的块已有明显的改善。
经过亮度补偿后的处理结果如图10~图12所示。
从图中可以明显看到,未加补偿时,去雾后的图像偏黑,看起来很不自然。加入补偿后,图像依旧有去雾效果,且图中暗处依旧能看到,而且更加自然。
5结论
本文针对基于暗原色先验的实时去雾算法所出现的三大问题:部分细节丢失、块效应和亮度偏暗问题,进行针对性的优化和改进。经过对比试验,采用均值降采样、双线性升采样和亮度补偿等方法后,可以比较好地对结果进行修正,从而得到更自然的结果。并且经过相应的优化后,能达到实时去雾的效果。但由于在原算法中加入了均值滤波等步骤,计算时间相较于之前算法略有增加,所以在今后的工作中需要进一步优化,缩短计算时间。
参考文献
[1] HE K, SUN J, TANG X. Single image haze removal using dark channel prior[J]. Pattern Analysis and Machine Intelligence, IEEE Transactions on, 2011, 33(12): 2341-2353.
[2] HE K, SUN J, TANG X. Guided image filtering[J]. Pattern Analysis and Machine Intelligence, IEEE Transactions on, 2013, 35(6): 1397-1409.
[3] XU H, GUO J, LIU Q, et al. Fast image dehazing using improved dark channel prior[C].Information Science and Technology (ICIST), 2012 International Conference on. IEEE, 2012: 663-667.
[4] MCDONNELL M J. Boxfiltering techniques[J]. Computer Graphics and Image Processing, 1981, 17(1): 65-70.
[5] GONZALEZ R C, EDDINS S L. 数字图像处理[M].阮秋琦,译.北京:电子工业出版社, 2007.