王 帮 元
(安徽经济管理学院信息工程系,安徽 合肥 230051)
OpenCV耦合改进暗通道先验的图像去雾算法研究
王 帮 元
(安徽经济管理学院信息工程系,安徽 合肥 230051)
为提高当前图像去雾算法的稳定性,改善在大雾天气雾气很严重时的去雾质量。提出了基于OpenCV耦合改进暗通道先验的图像去雾算法与实现机制。分析了暗通道先验理论与雾图形成模型;对先验理论进行了改进,推算出去雾公式;引入OpenCV实现机制,增强系统运行效率。实验结果表明:与普通的图像去雾算法相比,在雾气很严重时,算法具有更好的去雾效果,准确还原了图像的清晰度,失真度较小,可应用于雾气严重情况下的退化图像复原。
图像去雾;暗通道先验;雾图形成模型;OpenCV
随着通信、电子技术、图像处理算法的蓬勃发展,视频监控、视频目标识别已运用在各个领域,并且已取得很大的发展,推动了科技和社会的进步[1]。然而,在实际生活中,由于雾天原因,导致安全监控目标的清晰受到破坏,严重影响了目标识别精度。因此,图像去雾功能非常重要,图像去雾技术成为很多大型设备或者系统正常运作的先决条件。为了取得良好的图像去雾效果,诸多学者进行了研究,并提出了许多不同的图像去雾算法。王一帆等人[2]提出,首先在计算暗通道函数时,定义了一类暗区域,对图像边缘的低强度像素点进行描述,该区域像素点的暗原色中值取其三原色通道的最小值,以代替原来的中值滤波运算值,此滤波方法不仅能有效去除Halo效应,而且避免了黑斑效应;然后基于大气散射物理模型定义一种伪去雾图,将其与原去雾图进行像素级融合,对原图进行色度校正,实现了柔性去雾,改善了现有方法易出现过去雾的缺陷,实验结果表明该算法去雾后图像具有较好清晰度及色彩恢复度,去雾鲁棒性强。在大雾和图像色彩失真严重的情况下,仍可有效恢复图像。
郭璠等人[3]提出融合策略,无需依靠大气散射模型或场景结构信息,只需通过原始衰退图像来获取其输入图与权重图,其中2幅输入图的主要作用是对原有雾图像进行颜色校正和对比度增强,而3幅权重图则突显了图像雾气较浓区域的细节信息。融合策略将上述输入图与权重图相融合以生成对比度高、色彩丰富的去雾图像[4]。此外,还从人类视觉感知的角度提出了一个新的去雾效果评价指标,从而为图像去雾与去雾效果评价问题提供了新的解决思路[5,6]。
尽管上述这些图像去雾机制能够取得较好的视觉效果,但是这些算法不稳定,当在大雾天气很严重时,这些算法就难以使用,图像去雾质量较差。
为了解决上述问题,本文提出了一个基于OpenCV耦合改进暗通道先验的图像去雾算法与实现机制。首先分析暗通道先验理论与雾图形成模型,然后对先验理论进行改进,推算出本文的去雾模型,最后引入OpenCV来增强系统运行效率,并测试了本文算法的图像去雾性能。
首先对暗通道先验与雾图形成模型进行研究,然后基于改进的暗通道理论进行图像去雾。
(1)
式中Jc表示彩色图像的每个通道,Ω(x)表示以像素x为中心的一个窗口,Dark(x)表示暗通道图像中对应原图x处点的灰度值。式(1)的意义:首先求出每个像素RGB分量中的最小值,存入一副和原始图像大小相同的灰度图中,然后再对这幅灰度图进行最小值滤波,滤波半径由窗口大小决定,一般有Window Size=2×Radius+1。暗通道先验理论指出:
(2)
实际生活中造成暗原色中低通道值主要有3个因素:一是汽车、建筑物和城市中玻璃窗户的阴影,或者是树叶、树与岩石等自然景观的投影;二是色彩鲜艳的物体或表面,在RGB的3个通道中有些通道的值很低(比如绿色的草地/树/植物,红色或黄色的花朵/叶子,或者蓝色的水面);三是颜色较暗的物体或者表面,例如灰暗色的树干和石头。总之,自然景物中到处都是阴影或者彩色,这些景物图像的暗原色总是很灰暗的[7]。
(3)
其中,I(X)就是现在已经有的图像(待去雾图像),J(x)是要恢复的无雾图像,A是全球大气光成分,t(x)为透射率。现在的已知条件就是I(x),要求目标值J(x),显然,这是个有无数解的方程,因此需要先验。将式(3)演变为:
(4)
如上所述,上标C表示R/G/B 3个通道的意思。首先假设在每一个窗口内透射率t(x)为常数,并且A值已经给定,然后对式(4)两边求两次最小值运算,得到下式:
(5)
上式中,J是待求的无雾的图像,根据前述的暗原色先验理论有:
(6)
因此,可推导出:
(7)
把式(7)带入式(5)中,得到:
(8)
t(x)是透射率的预估值。在现实生活中,即使是晴天白云,空气中也存在着一些颗粒,因此,看远处的物体还是能感觉到雾的影响,另外,雾的存在让人类感到景深的存在,因此,有必要在去雾的时候保留一定程度的雾,这可以通过在式(8)中引入一个在[0,1]之间的因子,则式(8)修正为:
(9)
文中所有的测试结果依赖于:ω=0.95。上述推论中都是假设全球大气光A值是已知的,但在实际中,可以借助于暗通道图,从有雾图像中获取该值。具体步骤如下:
1)从暗通道图中按照亮度的大小取前0.1%的像素。
2)在这些位置中,在原始有雾图像I中寻找对应的具有最高亮度的点的值,作为A值。继而可以进行无雾图像的恢复。由式(1)可知:J=(I-A)/t+A。在求得I,A,t之后,就可以进行J的计算。因此,最终的恢复公式如下:
(10)
2.1 算法改进
1)普通算法中的A最终是取原始像素中的某一个点的像素,本文实际上是取符合条件的所有点的平均值作为A的值,这样做是因为如果是取一个点,则各通道的A值很有可能全部很接近255,这样会造成处理后的图像偏色和出现大量色斑。普通算法对图像的处理效果一般都不好,会出现明显的过渡区域。对此,本文增加一个参数:最大全球大气光值。当计算的值大于该值时,则取该值。本文将A的最大值设为200。
2)直接去雾后的图像会比原始的暗,因此在处理完后需要进行一定的曝光增强,但普通算法往往没有考虑增强,因此,本文算法在去雾处理后,再用增加色阶方法[8,9]对其增强。
3)普通算法的速度往往不够快,有太多的浮点计算,虽然可以试着对代码进行深层次的优化,包括SSE处理、并行运行等,但由于算法本身的顺序执行,无法全程并行,时耗增大,对于一幅1 024×768的彩图进行去雾需要90 ms。已有研究表明[10,11],既然暗通道去雾的透射率图比其它的算法都来的精细,如果适当降低一点精度,其去雾的效果理论上应该不会有太大的区别。故本文在求取透射率时,并不是对原图进行求取,而是先对原图进行下采样,比如缩小为原图的1/4,计算出小图的透射率,然后再通过插值的方式获取原图大概的透射率。经本文实验表明,这种方式大大地提高了执行速度,而且效果和原始的方案基本一致,对于1 024×768的图像大约只需要(I3CPU)30 ms,如果进一步取1/9的缩放,则只需要大约20 ms,完全可以满足工业实时性要求高的场合。
2.2 算法部分关键代码
double doDarkChannel(IplImage* in,int patchsize)
{
int height,width,step,channels;
int i,j,k;
uchar*data2;
height=in->height;
width=in->width;
int patch=patchsize/2;
IplImage*mout=cvCreateImage(cvSize(in->width+patchsize,in->height+patchsize),in->depth,in->nChannels);
cvCopyMakeBorder(in,mout,cvPoint(patch,patch),IPL_BORDER_REPLICATE);
IplImage* jout=cvCreateImage(cvSize(in->width,in->height),in->depth,1);
step=jout->widthStep/sizeof(uchar);
data2=(uchar*)jout->imageData;
for(i=0;i { for(j=0;j { cvSetImageROI(mout,cvRect(j,i,patchsize,patchsize)); IplImage* patch_out=cvCreateImage(cvSize(patchsize,patchsize),in->depth,in->nChannels); cvCopy(mout,patch_out); cvResetImageROI(mout); double MinValue; double MaxValue; double B_Min,G_Min,R_Min; CvPoint MinLocation; CvPoint MaxLocation; cvSetImageCOI(patch_out,1); cvMinMaxLoc(patch_out,& MinValue,& MaxValue,& MinLocation,& MaxLocation); B_Min=MinValue; cvSetImageCOI(patch_out,2); cvMinMaxLoc(patch_out,& MinValue,& MaxValue,& MinLocation,& MaxLocation); G_Min=MinValue; cvSetImageCOI(patch_out,3); cvMinMaxLoc(patch_out,& MinValue,& MaxValue,& MinLocation,& MaxLocation); R_Min=MinValue; int dark_point=(int)mini(B_Min,G_Min,R_Min); data2[i*step+j]=dark_point; cvReleaseImage(&patch_out); }; }; double MinValue; double MaxValue; double B_Min,G_Min,R_Min; CvPoint MinLocation; CvPoint MaxLocation; cvSetImageCOI(jout,1); cvMinMaxLoc(jout,& MinValue,& MaxValue,& MinLocation,& MaxLocation); cvReleaseImage(&mout); return MaxValue; }; 为了验证本文算法的可行性与优越性,将文献[6]视为对照组,记为B算法,对照组算法取:ω=0.85,A=180。当前的图像去雾算法:取ω=0.95,A=200。 以雾天原图为测试对象,如图1、4、7所示。利用本文算法与对照组算法对其进行去雾,结果见图2、3、5、6、8、9所示。从图中可知,本文算法具有更佳的去雾性能,复原图像清晰,去雾效果明显。传统去雾算法效果不佳,如图3、6、9所示。这表明本文去雾算法优于传统B算法。原因是普通算法中的A最终是取原始像素中的某一个点的像素,使得各通道的A值很有可能全部接近255,导致处理后的图像偏色和出现大量色斑,出现明显的过渡区域。而本文算法增加一个参数:最大全球大气光值,取符合条件的所有点的平均值作为A的值,且利用增加色阶方法[7]对直接去雾后的图像进行曝光增强,而普通算法往往没有考虑增强,从而使得本文算法具有更好的去雾质量。 图1 原图 图2 本文算法的去雾效果图 图3 传统机制效果图 图4 原图 图5 本文的去雾效果图 图6 传统机制效果图 图7 原图 图8 本文的去雾效果图 图9 传统机制效果图 为了对雾天图像进行去雾处理,以提高图像的清晰度,本文提出了基于OpenCV耦合改进暗通道先验的图像去雾算法与实现机制。首先分析暗通道先验理论与雾图形成模型;然后对先验理论进行改进,推算出本文的去雾公式;之后引入OpenCV实现机制,增强系统运行效率;最后测试了本文算法的去雾性能。结果表明:与普通的图像去雾算法相比,在大雾天气很严重时,本文算法具有更好的去雾效果,准确还原了图像的清晰度。 [1]张小刚,唐美玲,陈华,等.一种结合双区域滤波和图像融合的单幅图像去雾算法[J].自动化学报,2014,40(08):1733-1739. [2]王一帆,尹传历,黄义明,等.基于双边滤波的图像去雾[J].中国图象图形学报,2014,19(03):386-392. [3]郭璠,唐琎,蔡自兴.基于融合策略的单幅图像去雾算法[J].通信学报,2014,35(07):199-207,214. [4]和晓军,乔寅.基于暗原色的单一图像去雾算法的研究[J].计算机应用研究,2014,31(01):304-306. [5]桓宗圣,陶青川,田旺.野外视频监控图像去雾算法研究[J].计算机工程,2014,40(02):240-245. [6]陈剑鹏,毕笃彦,张晟翀,等.基于暗通道理论的快速单幅图像去雾算法[J].计算机工程与设计,2014,35(06):2047-2051. [7]何健.基于暗原色的单一图像去雾算法[J].硅谷,2011,(04):22-23. [8]Noori H,Saryazdi S,Nezamabadi P H.A bilateral image inpainting [J].IJST Trans Electr Eng,2011,25(E2):95-108. [9]Kuang Y,Zhang L,Zhang Y.An adaptive rank-sparsity K-SVD algorithm for image sequence denoising[J].Pattern Recogn Lett,2014,45:46-54. [10]张红英,张赛楠,吴亚东,等.基于人眼视觉特性的快速单幅图像去雾算法[J].计算机应用,2014,34(06):1753-1757,1761. [11]Zujovic J,Pappas,T N,Neuhoff D L.Structure texture similarity metrics for image analysis and retrieval[J].IEEE Trans Image process,2013,22(07):2545-2558. [责任编辑:郑秀亮 英文编辑:刘彦哲] Image Fogging Algorithm Based on OpenCV and Improved Prior Dark Channel WANG Bang-yuan (Department of Information Engineering,Anhui Economic Management Institute,Hefei,Anhui 230051,China) To improve the stability of current image fogging algorithm,and enhance the fogging quality when the fog is very serious.In this paper the image fogging algorithm and its realization mechanism based on OpenCV coupling the improved dark channel prior were proposed.Firstly,the dark channel prior theory and fog image formation model were analyzed;and then the fogging function was deducted by improving the prior theory;Finally,the system running efficiency was enhanced by introducing the OpenCV realization mechanism.Simulation results show that compared with common image fogging algorithm,when the fog is very serious,the fogging effect of this algorithm is better for accurately resrotation the image definition.this algorithm can be applied to reconstruct the degrade image with seriously foggy weather. image fogging;prior dark channel;fog formation model;OpenCV 安徽省教育厅自然科学研究项目(KJ2013Z038) 王帮元(1963-),男,安徽含山人,安徽经济管理学院信息工程系副教授。 TP 391 A 10.3969/j.issn.1673-1492.2015.02.005 来稿日期:2015-01-163 实验与讨论
4 结 论