---------------------------------------------------------------最新资料推荐------------------------------------------------------ 基于改进暗通道先验的图像去雾算法研究OpenCV 耦合改进暗通道先验的图像去雾算法研究王帮元(安徽经济管理学院信息工程系,安徽合肥,230051)摘要:在雾境下,由于大气粒子的散射作用导致图失真严重,直接影响后期图像数据的分析,因此对雾天图像进行去雾处理,以提高图像的清晰度,是非常有必要的。
而当前的图像去雾算法不稳定,当大雾天气很严重时,去雾质量较差。
对此,本文提出了基于 OpenCV 耦合改进暗通道先验的图像去雾算法与实现机制。
首先分析暗通道先验理论与雾图形成模型;然后对先验理论进行改进,推算出本文的去雾公式。
最后引入 OpenCV 实现机制,增强系统运行效率。
最后测试了本文机制性能,结果表明:与普通的图像去雾算法相比,在大雾天气很严重时,本文机制具有更好的去雾效果,准确还原了图像的清晰度,失真度较小。
关键词:图像去雾;暗通道先验;雾图形成模型;OpenCV;中图分类号: TP391 文献标识码:A 0 引言随着通信、电子技术、图像处理算法的蓬勃发展,视频监控、视频目标识别已运用在各个领域,并且已取得很大的发展,推1 / 9动了科技和社会的前进 [1] 。
然而,在实际生活中,由于雾天原因,导致安全监控目标的清晰度收到破坏,严重影响了目标识别精度。
因此,图像去雾功能非常重要。
图像去雾技术成为很多大型设备或者系统正常运作的先决条件。
为了取得良好的图像去雾效果,诸多学者进行了研究,并提出了许多不同的图像去雾算法。
王一帆等人 [2] 提出,首先在计算暗通道函数时,定义了一类暗区域对图像边缘的低强度像素点进行描述,该区域像素点的暗原色中值取其三原色通道的最小值,以代替原来的中值滤波运算值.此滤波方法不仅能有效去除 Halo 效应,而且避免了黑斑效应;然后基于大气散射物理模型定义一种伪去雾图,将其与原去雾图进行像素级融合对原图进行色度校正,实现了柔性去雾,改善了现有方法易出现过去雾的缺陷,实验结果表明该算法去雾后图像具有较好清晰度及色彩恢复度,去雾鲁棒性强.在大雾和图像色彩失真严重的情况下,仍可有效恢复图像。
郭璠等人 [3] 提出融合策略无需依靠大气散射模型或场景结构信息,只需通过原始衰退图像来获取其输入图与权重图,其中 2幅输入图的作用主要是对原有雾图像进行颜色校正和对比度增强,而 3 幅权重图则突显了图像雾气较浓区域的细节信息。
融合策略将上述输入图与权重图相融合以生成对比度高、色彩丰富的去雾图像 [4] 。
---------------------------------------------------------------最新资料推荐------------------------------------------------------ 此外,还从人类视觉感知的角度提出了一个新的去雾效果评价指标,从而为图像去雾与去雾效果评价问题提供了新的解决思路[5-6] 。
尽管上述这些图像去雾机制能够取得较好的视觉效果;但是这些算法不稳定,当在大雾天气很严重时,这些算法就难以使用,图像去雾质量较差。
为了解决上述问题,本文提出了一个基于 OpenCV 耦合改进暗通道先验的图像去雾算法与实现机制。
首先分析暗通道先验理论与雾图形成模型;然后对先验理论进行改进,推算出本文的去雾模型。
最后引入 OpenCV 来增强系统运行效率。
并测试了本文算法的图像去雾性能。
1 暗通道先验与雾图形成模型本文首先对暗通道先验与雾图形成模型进行研究,然后基于改进的暗通道理论进行图像去雾。
)) ( min ( min ) () , , ( ) (y J x Darkcb g r c x y = (1)式中cJ 表示彩色图像的每个通道,Ω(x)表示以像素 X 为中心的一个窗口,Dark(x)表示暗通道图像中对应原图 X 处点的灰度值。
式(1)的意义:首先求出每个像素 RGB 分量中的最小值,存入一副和原始图像大小相同的灰度图中,然后再对这幅灰度图进行最小值滤波,滤波的半3 / 9径由窗口大小决定,一般有 WindowSize = 2 * Radius + 1。
暗通道先验的理论指出:0 ) ( x Dark (2)实际生活中造成暗原色中低通道值主要有三个因素:a)汽车、建筑物和城市中玻璃窗户的阴影,或者是树叶、树与岩石等自然景观的投影;b)色彩鲜艳的物体或表面,在 RGB 的三个通道中有些通道的值很低(比如绿色的草地/树/植物,红色或黄色的花朵/叶子,或者蓝色的水面);c)颜色较暗的物体或者表面,例如灰暗色的树干和石头。
总之,自然景物中到处都是阴影或者彩色,这些景物的图像的暗原色总是很灰暗的。
)) ( 1 ( ) ( ) ( ) ( x t A x t x J x I + = (3)其中,I(X)就是我们现在已经有的图像(待去雾的图像),J(x)是我们要恢复的无雾的图像,A 是全球大气光成分, t(x)为透射率。
现在的已知条件就是 I(X),要求目标值 J(x),显然,这是个有无数解的方程,因此,就需要一些先验了。
将式(3)演变为:) ( 1 ) () ( ) (x t x tAx JAx Icccc + = (4)如上所述,上标 C 表示 R/G/B 三个通道的意思。
首先假设在每一个窗口内透射率 t(x)为常数,并且 A 值已经给定,然后对式(4)两边求两次最小值运算,得到下式:c cc cy ( x ) c y ( x ) cI ( x) J ( x)min (min ) t( x) min---------------------------------------------------------------最新资料推荐------------------------------------------------------ (min ) 1 t( x)A A = + (5)上式中,J 是待求的无雾的图像,根据前述的暗原色先验理论有:0 )) ( min ( min ) () , , ( ) (= = y J x Darkcb g r c x y (6)因此,可推导出:0 )) (min ( min) (= ccc x yAx J (7)把式(7)带入式(5)中,得到:)) (min ( min 1 ) () (ccc x yAx Jx t = (8) t(x)这就是透射率的预估值。
在现实生活中,即使是晴天白云,空气中也存在着一些颗粒,因此,看远处的物体还是能感觉到雾的影响,另外,雾的存在让人类感到景深的存在,因此,有必要在去雾的时候保留一定程度的雾,这可以通过在式(8)中引入一个在[0,1] 之间的因子,则式(8)修正为: )) (min ( min 1 ) () (ccc x yAx Jx t = (9) 2 本文算法改进与实现本文中所有的测试结果依赖于:=0.95。
上述推论中都是假设全球达气光 A 值是已知的;但在实际中,可以借助于暗通道图,从有雾图像中获取该值。
具体步骤如下:1)从暗通道图中按照亮度的大小取前 0.1%的像素。
2)在这些位置中,在原始有雾图像 I 中寻找对应的具有最高亮度的点的值,作为 A 值。
5 / 9继而可以进行无雾图像的恢复了。
由式(1)可知:J = ( I - A)/t + A 现在 I,A,t 都已经求得了,因此,完全可以进行 J 的计算。
因此,最终的恢复公式如下:Ax tA x Ix J +=) () () ( (10)算法改进 1、普通算法中的 A 最终是取原始像素中的某一个点的像素,本文实际上是取符合条件的所有点的平均值作为 A 的值,这样做是因为,如果是取一个点,则各通道的 A 值很有可能全部很接近 255,这样的话会造成处理后的图像偏色和出现大量色斑。
实际普通算法对图像的处理效果一般都不好,会出现明显的过渡区域。
对此,本文增加一个参数:最大全球大气光值。
当计算的值大于该值时,则就取该值。
本文将 A 的最大值设为 200。
2、直接去雾后的图像会比原始的暗,因此在处理完后需要进行一定的曝光增强,但普通算法往往没有考虑增强,因此,本文算法在去雾处理后,再用增加色阶方法 [7-8] 对其增。
3、普通算法的速度往往不够快,有着太多的浮点计算,虽然可以试着对代码进行深层次的优化,包括 SSE 处理、并行运行等,但由于算法本身的顺序执行,无法全程并行,使其时耗大,对于一幅---------------------------------------------------------------最新资料推荐------------------------------------------------------ 1024*768 的彩图进行去雾需要 90ms。
已有研究表明 [9-10] ,既然暗通道去雾的透射率图比其他的算法都来的精细,如果适当的降低一点点其精度,其去雾的效果理论上应该不会有太大的区别。
故本文在求取透射率时,并不是对原图进行求取,而是先对原图进行下采样,比如缩小为原图的 1/4,计算出小图的透射率,然后在通过插值的方式的获取原图大概的透射率。
经本文实验表明,这种方式大大的提高了执行速度,而且效果和原始的方案基本一致,对于 1024*768 的图像大约只需要(I3CPU)30ms 了,如果进一步取 1/9 的缩放,则只需要大约 20ms,完全可以满足工业实时性要求高的场合。
3 实验与讨论为了验证本文算法的可行性与优越性,本文并将当前的图像去雾性能较好的算法:文献[6]视为对照组,记为 B 算法。
取=0.95,A=200,对照组算法=0.85,A=180。
以雾天原图为测试对象,如图 1、4、7 所示。
再利用本文算法与对照组算法对其进行去雾,结果见图 2、3、5、6、8、9所示.从图中可知,本文算法具有更佳的去雾性能,复原图像清晰,去雾效果明显。
传统去雾算法效果不佳,如图 3、6、9 所示。
这表明本文去雾算法优于传统 B 算法。
7 / 9原因是普通算法中的 A 最终是取原始像素中的某一个点的像素,使得各通道的 A 值很有可能全部很接近 255,导致处理后的图像偏色和出现大量色斑,出现明显的过渡区域;而本文算法增加一个参数:最大全球大气光值,取符合条件的所有点的平均值作为 A 的值;且利用增加色阶方法 [7] 对直接去雾后的图像进行了曝光增强,而普通算法往往没有考虑增强。
从而使得本文算法具有更好的去雾质量。