刘光飞,胡辽林
(西安理工大学 机械与精密仪器工程学院,西安 710048)
暗通道先验去雾算法的改进及FPGA实现
刘光飞,胡辽林
(西安理工大学 机械与精密仪器工程学院,西安 710048)
随着数码设备的普及和消费类电子产品对高品质成像的强烈需求,对图像进行实时修复就成为一个迫切问题。为了对有雾图像进行实时高速去雾处理,在保证去雾效果的前提下,在暗通道去雾算法的基础上,提出了用阈值比较的方法独立求解三个通道的全局大气光,及图像边缘部分和非边缘部分分开处理的方法快速有效地获取透射系数。实验结果表明,改进后算法在FPGA上实现,可恢复出清晰图像,并将处理速度大幅提高到毫秒级,可以满足实时处理的要求,为实现实时去雾系统提供了一种可靠、有效的方案。
暗通道;去雾;FPGA;实时
在视频监控、摄像、导航控制、目标跟踪等技术领域,都涉及对有雾图像的处理。在雾霾等恶劣天气下物体的反射光在大气中发生散射和吸收,导致获取的图像不清晰,信息丢失,可视性差,色彩淡化。随着数码设备的普及和消费类电子产品对高品质成像的强烈需求,对图像进行实时修复就成为一个迫切问题。
由于雾霾问题的特殊性,目前大多数都是从算法出发通过软件对图像去雾。一些算法已经获得了很好的去雾效果,如在亮度分量上进行多尺度Retinex处理的去雾算法[1-2]、双边滤波去雾算法[3]、基于已知景深模型的去雾算法[4]。这些算法都需要一些特定的先验信息,不利于系统的整体实现,也不利于实际应用中硬件实现。对于单幅图像的快速去雾也有不少学者在研究,如利用中值滤波及导向滤波细化透射率的去雾算法[5]、仅利用均值滤波估计全局大气光的快速去雾算法[6]、对大气散射模型简化后的快速去雾算法[7-8]、基于边界邻域最大值滤波的去雾算法[9]、利用快速双边滤波保持边缘特性的去雾算法[10-11]、分割不同雾浓度区域获取大气光的快速去雾算法[12]。这些算法速度相对较快,但仍达不到实时处理的需求,或者满足不了对视频处理的要求。文献[13]利用暗通道先验理论求出粗略的大气透射率,然后结合软抠法(soft matting)得到了比较细腻的透射率,去雾效果较为显著,但该算法软件运算复杂度较高,运算速度较慢,无法满足实时处理的要求。
鉴于FPGA的流水线操作、并行性强、易于系统模块化实现等特点,本文采用Verilog硬件描述语言在FPGA芯片上对文献[13]的暗通道先验去雾算法进行实现。在原算法基础上,提出了用阈值比较方法获取三个通道的全局大气光,边缘部分和非边缘部分分开处理获取透射系数,得到了较好的结果,将处理速度大幅提高到毫秒级,可以满足实时处理的要求。
暗通道先验去雾算法是对有雾图像的雾浓度进行准确估计,从而达到去雾的目的。在计算机视觉和计算机图形学中,通常采用下面的物理模型来描述雾霾天气对图像造成的影响,该模型表达式为:
I(x)=J(x)e-rd(x)+A[1-e-rd(x)]
(1)
式中,I(x)为有雾图像,J(x)为恢复后的无雾图像,r表示大气散射系数,d表示景物深度,A表示全局大气光。
用介质透射率t(x)来替换指数衰减项e-rd(x),即:
(2)
将式(2)代入式(1)得:
(3)
式(3)中I(x)已知,现求解目标值J(x)。
假设图像尺寸为N,公式(3)有3N个已知量,4N+3个未知量,它有无数个解,是病态问题。求解病态问题的一个常用方法是对未知量添加先验信息,缩小解空间的维度。将式(3)变形得:
(4)
式中上标c表示R(红)、G(绿)、B(蓝)三个通道。
(5)
其中Ω(x)表示x的一个邻域。
暗通道先验是指在无雾图像中景物的阴影或投影以及色彩鲜艳的物体表面区域,总有某些像素在至少一个通道的值很低,且趋于零,即:
(6)
可得:
(7)
把式(7)代入式(5)得:
(8)
晴朗天气时,少量雾的存在从视觉上能使人感觉到景深的存在,在去雾的同时应该保留少量雾,以维持人眼对远景的真实感。这可以通过引入因子ω(0<ω≤1)达到保留少量雾的效果,则式(8)修正为
(9)
上述讨论假设全局大气光A是已知的,而实际中,A值是通过暗通道获取的。在暗通道中提取最亮的前0.1%个像素点,在原始有雾图中寻找这些点相应位置上的具有最高亮度的点,并以这些点像素值作为A值。考虑到当透射率t(x)值趋近于零时,恢复出来的图像容易产生噪声,于是设置阈值t0,当t(x)值小于t0时,令t(x)=t0,通常取t0为0.1。
如果上述所有未知量均已求出,可以恢复出无雾图像,恢复公式如下:
(10)
利用暗通道算法去雾系统框图如图1所示。首先将一幅彩色有雾图像的R、G、B三个通道分别存入三个大小相同的只读存储器(ROM)中,由同一个地址发生器提供地址,同时按照相应地址读出每个像素值进行最小值滤波,再取三个通道最小值滤波后的最小值,即为暗通道;再由暗通道和原图共同求出全局大气光A;然后再由大气光A、暗通道以及原图求出透射率t(x);最后由透射率t(x)、大气光A以及原图恢复出无雾图像。
2.1暗通道的实现
暗通道的获取中最重要的是实现最小值滤波,而最小值滤波需要产生3×3模板,再对模板中的9个像素值取最小值。3×3模板的形成框图如图2所示,ROM_X为任意通道的像素数据,像素数据依次输入到两个行缓冲器(Line buffer)中,由读写控制器(R&W controller)控制行缓冲器的读写信号在特定时间读写像素数据,经过列延时(Delay)之后形成3×3模板,该模板中的9个像素值经过最小值滤波后输出到下一模块处理。
图1 去雾硬件框图Fig.1 Block diagram of dehazing system
图2 3×3模板形成框图Fig.2 Block diagram of 3×3 template
行缓冲器使用FIFO(First In First Out)实现,其作用是让先输入的数据先输出,以流水线的方式传输,保证数据顺序不混乱。两个缓冲器同时工作时,可以实现对前两行数据的缓冲。当第一行数据到来时先写入行缓冲器2;第二行数据到来时,行缓冲器1写入第一行数据同时行缓冲器2读入第二行数据;第三行数据到来时,三个数据输出口同时输出三行数据,通过列延时截取每行数据的前三个数据形成滤波模板。
本文选用4幅图像,即河流、南瓜、花和草丛来做研究,分别用MATLAB和FPGA处理得到的暗通道见图3。由图3可知,在相同的滤波半径下,由MATLAB和FPGA得到的暗通道几乎没有差异。
图3 由MATLAB和FPGA得到的暗通道对比Fig.3 Comparison of dark channels by MATLAB and FPGA
2.2全局大气光A的实现
文献[13]中提取暗通道中亮度最高的0.1%点,将这些点在原始有雾图像中相应位置的亮度值作对比,得到亮度最大的值作为全局大气光A。而本文重点在硬件实现,数据以流水线方式在各个模块间传输,无法预先确定亮度最高的0.1%点,并且在获取暗通道所有数据之后进行对比排序,运算过程复杂。即使实现了也会耗费大量的逻辑资源和处理时间,无法满足实时性要求。
基于上述原因,要完成全局大气光A的硬件实现,必须对算法进行改进。首先设定一个阈值,在暗通道中小于该阈值的点舍弃,对于大于该阈值的点,在原始有雾图像各通道中寻找对应位置上像素值作对比,如果大于原像素值则将该值作为A值,否则取暗通道中的值。如此重复比较,每个通道中若当前一个A值小于后一个,则当前A值将被后一个值取代,只有将整个暗通数据送入全局大气光A计算模块,才能将最终确定出的值作为每个通道的全局大气光A。
进行三个通道独立并行运算以获得每个通道的全局大气光A,有利于系统的构成以及模块化设计,在对恢复结果没有影响的前提下简化了硬件电路设计。Modelsim仿真图如图4所示,三个通道独立计算各自的全局大气光A_r、A_g、A_b,随着暗通道的输入各通道的A值逐渐增大,最终当整个暗通道输入后取到最大值,将该值作为全局大气光A值。不同于文献[13]只确定一个全局大气光,本文将其引入三个通道得到各通道的全局大气光。
图4 全局大气光A仿真结果Fig.4 Simulation result of A
2.3透射率t(x)的实现
得到暗通道以及全局大气光A之后,可求透射率。如果直接采用最小值滤波之后得到的暗通道,获得的透射率图很粗糙,恢复出来的图像边缘很不协调。文献[13]中为了获取更为细腻的透射率图,采用了soft matting方法,但是该算法复杂度高,运算速度慢,在硬件实现中存在很大的局限,所以本文针对硬件特点对透射率图的获取方法进行了改进。
本文的改进方法是通过边缘检测将图像边缘检测出来[14-16],在获取暗通道时分成边缘部分和非边缘部分,边缘部分不进行最小值滤波,非边缘部分进行最小值滤波。这对整幅图像的暗通道获取几乎没有影响,获取的透射率图变得相对细腻,最终恢复出的图像效果也相对较好。图5(a)为有雾原图,(b)为由MATLAB得到的透射率图,(c)为由FPGA得到的未改进处理的透射率图,(d)为由FPGA得到的改进后处理的透射率图。改进前的透射率图明显不够细腻,与MATLAB处理的结果有较大差别,改进后的透射率图与MATLAB处理的结果几乎没有差异。
图5 由MATLAB和FPGA得到的透射率t(x)图比较Fig.5 Comparison of t(x)by MATLAB and FPGA
在硬件电路实现过程中,由于透射率的值在[0,1]之间,不利于Verilog代码实现,因此需要对式(9)两边同时扩大256倍,这样可以保证得到的透射率值在[0,256]之间,有利于硬件的实现。在硬件中实现任意数之间的乘法需要乘法器,但乘法器消耗逻辑资源多,并且效率低。当等式两边同时扩大256倍时相当于所有数据向左移八位,因此可以将一个复杂且消耗资源较多的乘法运算简化为一个简单高效且消耗资源少的移位运算。
2.4无雾图像的恢复
在实现了暗通道、全局大气光A、透射率之后可以恢复出无雾图像。由于在计算透射率时,对原算法进行了简化和修改使透射率有所扩大,所以在恢复时必须将所求的值缩小为正常值,在此步骤中不选用效率低且消耗资源多的除法器,只对数据进行向右移位操作即可。
经上述处理,我们在FPGA上实现了基于暗通道去雾算法。图6(a)为256×256的彩色有雾图像,几幅图像的景深和景物复杂度变化很大;图6(b)为MATLAB去雾结果,图6(c)为FPGA去雾结果。直观上看,FPGA处理的图像的对比度更大且颜色更加鲜艳。
在处理速度上,如表1所示,用MATLAB处理图6所示河流、南瓜、花和草丛四张图片时,运行环境为2.53 GHz的酷睿i5双核处理器、2 GB内存,处理时间均超过14 s,而采用硬件FPGA处理时,均只有0.001 3 s左右。采用硬件处理在处理效果上稍有改善,在处理速度上远远超过软件,可以达到实时处理的要求,从而为高速视频实时去雾提供了可行性方案。
表1 MATLAB和FPGA处理时间比较
图6 由MATLAB和FPGA去雾结果对比Fig.6 Comparison of dehazing results by MATLAB and FPGA
本文利用FPGA实现了基于暗通道的去雾算法,结合硬件系统的特点,对文献[13]的算法进行了改进,将全局大气光A引入到三个通道,独立并行运算;在FPGA上利用优化之后的方法得到了较细腻的透射图,具有利于硬件实现、实时处理性强等优点;相比软件处理,速度得到了大幅提高,可以满足实时处理的要求。在对一些去雾之后相对较暗的图像,通过图像增强处理,也可以得到效果较好的结果。但该设计目前只针对单幅图像的去雾,下一步工作是对视频图像进行去雾处理,使该设计得到更加广泛的应用。
[1]郭璠,蔡自兴,谢斌,等.单幅图像自动去雾新算法[J].中国图象图形学报,2011,16(4):516-521.
GUO Pan,CAI Zixing,XIE Bin,et al.New algorithm of automatic haze removal for single image[J].Journal of Image and Graphics,2011,16(4):516-521.
[2]汪荣贵,傅剑峰,杨志学,等.基于暗原色先验模型的Retinex算法[J].电子学报,2013,41(6):1188-1192.
WANG Ronggui,FU Jianfeng,YANG Zhixue,et al.A novel Retinex algorithm based on dark channel prior model[J].Acta Photonica Sinica,2013,41(6):1188- 1192.
[3]SHWARTZ S,NAMER E,SCHECHNER Y Y.Blind haze separation[C]//computer vision and pattern recognition.2006 IEEE computer society conference on vol.2.2006:1984-1991.
[4]王一帆,尹传历,黄义明,等.基于双边滤波的图像去雾[J].中国图象图形学报,2014,19(3):386-392.
WANG Yifan,YIN Chuanli,HUANG Yiming,et al.Image haze removal using a bilateral filter[J].Journal of Image and Graphics,2014,19(3):386-392.
D T,NGUYEN T Q.An Investigation of dehazing effects on Image and Video Coding[J].IEEE Transactions on Image Processing,2012,21(2):662-673.
[6]刘倩,陈茂银,周东华.基于单幅图像的快速去雾算法[C]//第25届中国控制与决策会议论文集,2013:3780-3785.
LIU Qian,CHEN Maoyin,ZHOU Donghua.Fast haze removal from a single image[C]//The 25th Chinese control and decision conference,Guiyang,2013:3780-3785.
[7]刘巧玲,张红英.单幅图像快速去雾霾算法[J].西南科技大学学报,2014,29(3):76-81.
LIU Qiaoling,ZHANG Hongying.Single image fast dehazing algorithm[J].Journal of Southwest University of Science and Technology,2014,29(3):76-81.
[8]孙伟,李大健,刘宏娟,等.基于大气散射模型的单幅图像快速去雾[J].光学精密工程,2013,21(4):1040-1046.
SUN Wei,LI Dajian,LIU Hongjuan,et al.Fast single image fog removal based on atmospheric scattering model[J].Optics and Precision Engineering,2013,21(4):1040-1046.
[9]陈露,和红杰,陈帆.基于边界邻域最大值滤波的快速图像去雾算法[J].光子学报,2014,43(11):108-113.
CHEN Lu,HE Hongjie,CHEN Fan.A fast image defogging algorithm based on edge-maximum filter[J].Acta Photonica Sinica,2014,43(11):108-113.
[10]甘佳佳,肖春霞.结合精确大气散射图计算的图像快速去雾[J].中国图像图形学报,2013,18(5):583-590.
GAN Jiajia,XIAO Chunxia.Fast image dehazing based on accurate scattering map[J].Journal of Image and Graphics,2013,18(5):583-590.
[11]庞春颖,嵇晓强,孙丽娜,等.一种改进的图像快速去雾新算法[J].光子学报,2013,42(7):872-877.
PANG Chunying,JI Xiaoqiang,SUN Lina,et al.An improved method of image fast defogging[J].Acta Photonica Sinica,2013,42(7):872-877.
[12]褚宏莉,李元祥,周则明,等.基于黑色通道的图像快速去雾优化算法[J].电子学报,2013,41(4):791-797.
CHU Hongli,LI Yuanxiang,ZHOU Zeming,et al.Optimized fast dehazing method based on dark channel prior[J].Acta Electronica Sinica,2013,41(4):791-797.
[13]HE Kaiming,SUN Jian,TANG Xiaoou.Single image haze removal using dark channel prior[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,2011,33(12):2341-2353.
[14]樊巧云,张广军.离散噪声图像的光斑质心算法及其硬件实现[J].光学精密工程,2011,19(12):2992-2998.
FAN Qiaoyun,ZHANG Guangjun.Spot centroiding algorithm for discrete noise image and its hardware implementation[J].Optics and Precision Engineering,2011,19(12):2992-2998.
[15]张恒,雷志辉,丁晓华.一种改进的中值滤波算法[J].中国图像图形学报A辑,2004,9(4):408-411.
ZHANG Heng,LEI Zhihui,DING Xiaohua.An improved method of median filter[J].Journal of Image and Graphics,2004,9(4):408-411.
[16]陈伦海,黄君凯,杨帆,等.基于FPGA的实时边缘检测系统[J].液晶与显示,2011,26(2):200-204.
CHEN Lunhai,HUANG Junkai,YANG Fan,et al.Real-time edge detection system based on FPGA[J].Chinese Journal of Liquid Crystals and Displays,2011,26(2):200-204.
(责任编辑王卫勋,王绪迪)
Improvement and FPGA implementation of dark channel priori dehazing algorithm
LIU Guangfei,HU Liaolin
(School of Mechanical and Precision Instrument Engineering,Xi’an University of Technology,Xi’an 710048,China)
With the digital equipment popularization and strong demand for high-quality imaging in area of digital and electronic products,the real-time image restoration has become an urgent problem.In order to carry out the real-time and high-speed dehazing treatment of haze images and in the prerequisite of ensuring the basic dehazing effect,this paper proposes the method with threshold comparison on the basis of dark channel algorithm to independently seek solutions to the global atmospheric light of three channels so as to obtain the transmittance coefficient via the image edge portion and non-edge portion separate processing method with better results quickly and effectively.The results indicate that the improved algorithm can realize and recover the clear images on FPGA,and the processing speed can be improved by a wide margin to the millisecond,whereby satisfying the requirement of real-time processing or treatment.
dark channel;dehazing;FPGA;real-time
10.19322/j.cnki.issn.1006-4710.2016.01.014
2015-03-16
陕西省自然科学基金资助项目(2014JM7273)
刘光飞,男,硕士生,研究方向为图像处理。E-mail:435462966@qq.com
胡辽林,男,副教授,研究方向为光纤传感及光纤通信。E-mail:huliaolin@163.com
TP3
A
1006-4710(2016)01-0077-06