暗通道图像去雾算法的FPGA实现
2016-09-06李健吉陈力岳贵金
李健 吉陈力 岳贵金
暗通道图像去雾算法的FPGA实现
李健吉陈力岳贵金
本文针对何凯明提出的暗通道图像去雾算法过于复杂难以在硬件上实现的问题,对原算法进行改进之后在基于FPGA的硬件平台上进行了算法移植。文中详细介绍了算法移植过程中三个主要模块的实现过程:暗通道求取模块及大气光估计模块,边缘检测及滤波模块,图像复原模块。实验结果显示,本系统较好地完成了户外采集到有雾图像的复原工作,输出图像质量明显改善。
近年来,雾霾持续笼罩着我国大部分地区,同时也给户外图像的清晰度造成极大的影响。在军事侦察、视频监控、遥感监测中,图像的清晰度都是至关重要的。因此,为了实现户外视觉系统在雾霾天气下工作的可靠性和鲁棒性,必须对雾霾图像进行清晰化处理。
目前图像去雾算法主要分为基于图像增强和基于图像复原的两种类型,基于图像复原的去雾算法得到了更广泛的研究。何凯明等人在提出暗影通道先验的知识后,有效的实现了图像的去雾问题。然而,由于该算法中透射率细化过程中软抠图算法较为复杂,难以在实际中得到有效地应用,本文在保证改进后雾霾图像处理效果接近原算法的前提下,主要对原算法中耗时最长的透射率优化过程进行了改进,并且取得了较为理想的效果。之后在FPGA硬件平台上进行移植,实现了雾天图像的有效复原,从而为实现去雾系统提供了一种有效、可行的方案。
基于暗通道先验的改进去雾算法
物理模型及算法流程
公式(1)是目前常用的大气散射物理模型:
这个等式定义在RGB颜色通道,I代表得到的有雾图像,J 代表需要复原的图像,A 表示整体大气光,t( x)表示雾霾的介质传输率。去除雾霾的原理就是从I( x)中恢复出J( x )、t( x)和A。通过暗影通道先验可以估测到A和t,之后通过对粗估计的透射率的边缘部分进行单独滤波从而实现平滑过程,最后根据得到的三个参数反推得到需要复原的图像。
暗通道先验
在绝大多数非天空场景区域里的户外无雾图像中,每个像素点上至少存在一个颜色通道的亮度值是比较低的。形式上,对于一幅图像J ,我们定义:
其中Jc表示图像J的一个颜色通道(即RGB三颜色的一种),Ω(x)是以x 为中心的一个局部图像模块。如果J 是户外的无雾自然图像,去除天空区域,Jdark的强度值是非常低并且趋近于0,Jdark称为J 的暗影通道。
估算整体大气光A和透射率
挑选暗通道中最亮像素的0.1%个像素,然后将这些像素对应输入到原雾霾图像中并将最高亮度的像素选作整体大气光。此外,利用暗原色值和雾天图像退化模型可以估计出成像时刻的雾浓度和透过率t。由式(1)两端进行最小化操后,同除Ac可求得带雾图像的暗原色为:
其中, 等式(4)右侧最小值项即有雾图像局部区域的暗原色值,故可得到粗透射率t。
透射率优化平滑
透射率的粗糙估测图存在一些小方块, 在视觉上难以达到满意效果。本算法在充分考虑硬件实现的可能性,以及户外实时视频去雾系统对处理时间的要求较高后,主要通过对透射率图进行边缘检测,之后再对边缘部分进行均值滤波来实现透射率优化过程。
1) 用prewitt经典算子对透射率图进行边缘检测
该方法在图像空间利用两个方向模板与图像进行邻域卷积来完成的,首先计算水平和竖直方向的梯度,之后,此处梯度取二者的较大值作为输出梯度,即:
最后适当选取门限TH,如果P(i,j)>TH,则其为阶跃边缘点,其运算结果就是其边缘图像。
2) 对边缘部分进行平滑滤波
由观察可知原算法中块效应主要集中在图像的边缘部分,这里选用3*3区域模板进行均值滤波从而平滑边缘。其数学公式表达为:
式(7)中,g(Z,y)为处理后图像在该点上的灰度值,(x,y)为当前像素点,M为区域模板中包含像素的个数,M为9。
图像复原
利用公式(2-8)我们可以求解出复原图像:
公式中各个参数在前面的步骤中已经求得,进而可以得到复原图像J( x)。
系统结构和工作原理
系统结构
本系统以友晶公司生产的DE2-70以及TRDBD5M图像采集板卡作为开发平台,其硬件结构图如图1所示。该视频采集处理显示系统主要包括图像采集卡配置模块、图像采集模块、图像格式转换模块、图像存储模块、图像处理模块、图像显示模块。本系统主要通过两块SDRAM来实现去雾算法的存储计算过程。系统工作原理为:首先通过时钟复位控制I2C总线配置CMOS图像采集卡,经过一定延时后通过图像采集模块采集目标场景的图像,之后将BAYER模式的图像数据转换为常用的RGB数据并写入到SDRAM0中,最后对有雾图像进行算法处理后通过VGA模块进行显示。
图1 视频采集及处理系统硬件结构图
暗影通道求取模块设计及A的求取
暗影通道的求取过程要涉及每一个颜色通道,这里首先对3个颜色通道分别进行最小化处理,最后再从3个颜色通道中选取最小的作为最终输出暗通道值。通过quartus2提供的IP核altshift-taps(移位寄存器)在FPGA上实现对图像像素的区域化取小运算。该IP核可以实现串行数据的并行输出,并且可以指定宽度。在本算法中最小化模板选取3*3区域,需设置探头个数为3,而探头之间的间隔宽度设置为图像每行的宽度640即可实现最小化处理。如图2所示,即可实现同时读取相邻三行同一列的数据值:
那么,如何把理念转化为实践落地?韩光曙认为,无论优质、研究型,还是人文医院,最终的落脚点是人,应把人放在核心的位置上。
在同时得到三个探头的数据后需要对其进行比较取最小值,并且分别存储相邻三个时钟的最小值,之后再进行一次取小运算,即得到这个颜色通道的暗通道值,最后选取三个颜色通道最小值即可得到所求到的暗通道值。在每次求取到暗通道值时进行比较大小后得到整幅图像的最大值。之后读取原图像中该像素的J值作为整体大气光A。
透射率的求取模块设计
考虑到t的大小在0到1之间,并且浮点数运算会大幅度提高计算精度,故计算过程中的主要加减乘除均采用浮点数进行运算。这里需用到浮点数乘法器、浮点数除法器以及一个浮点数减法器,由于得到的t是32为浮点数,SDRAM数据宽度只有16位,故需要对t乘以一个因子K成为整数进行存储,为了避免t过小造成舍去误差,这里将后面与0.1的大小比较过程提前,取二者的较大值作为输出值,之后再乘以因子K,K选20。
透射率的边缘检测及平滑滤波模块设计
透射率边缘检测模块
Prewitt边缘检测的核心运算是对每个像素进行8邻域的模板卷积。这里同样要用到移位寄存器将串行数据转换为并行数据,然后再进行模板对应的乘加,最后通过判断水平梯度和竖直梯度的大小得到最后的梯度,将这一梯度与设置好的阈值进行大小比较。这里阈值通过外部按键进行输入设置,根据不同的外部环境来调节阈值大小来获得较为理想的边缘检测结果。边缘检测的主要过程如图3所示。
图3中MAC_3是利用quartusII提供的IP核ALTMULT_ADD(乘加器)来实现,主要实现同一行上连续三个数和模板的乘加运算;PA_3是利用quartusII提供的IP核PARALLEL_ADD(平行加法器)来实现,其主要实现同一时钟下3个乘加器的结果求和得到最后的梯度,故分别得到水平梯度pa0和竖直梯度pa1。
透射率边缘滤波模块
在得到带有边缘的透射图之后利用两个移位寄存器,一边对所有的图像数据进行均值化处理,另一边输出原透射图的数据,最终通过判断是否是边缘来选择输出。当其是图像边缘时,输出均值处理后的透射图;当其不是边缘时,输出原透射图数据即可。图4为均值滤波硬件实现框图。
图5 硬件复原图
图2 区域化处理在altshift-tap上的实现
图3 透射率边缘求取结构图
图4 边缘滤波过程结构图
从图4中可以看出,图中主要利用到了quartusII提供的移位寄存器、乘加器以及累加器IP核。其中最关键的部分是要保证判断部分同一时钟下数据的配合是否正确,这一部分主要通过设置IP核的延时以及通过仿真观察来修改时序实现正确的匹配。这里的透射率是放大后的整数,因此存在一定程度的误差。
复原模块设计
结果分析
如上文介绍,系统选用台湾友晶出品的DE2-70 和TRDB-D5M图像采集模块搭建系统,通过不断地调试,目前已完成了去雾算法在视频采集系统中对采集到图像的去雾处理过程。图5给出了显示器上输出的最后的复原图像,依次为原图、暗通道模块、透射率求取模块、复原后图像。
图5给出了部分硬件复原图,从复原图像中可以看出,该系统实现了雾天场景下采集到图像的有效复原,并且恢复后的图像色彩鲜艳,自然逼真,清晰度高。
结语
本文针对暗通道先验去雾算法在硬件移植中存在的问题,对算法中耗时最长的透射率优化过程进行改进,并详细介绍了算法移植到FPGA硬件平台中主要模块的实现过程,最后给出了实验的结果图。实验结果证明:该系统有效地实现了暗通道去雾算法在FPGA硬件平台上的有效去雾,基本满足了实时去雾的要求。
李 健吉陈力岳贵金
中航工业试飞中心
李健,硕士毕业于西安电子科技大学,现于中国飞行试验研究院测试所从事机载测试工作。
10.3969/j.issn.1001-8972.2016.07.017