一种在FPGA上实现实时图像去雾霾算法的研究
2018-07-12石潇让丁宇璇南京邮电大学电子光学与工程学院
石潇让 丁宇璇 南京邮电大学电子光学与工程学院
引言:近年来,雾霾问题变为了大众一直关注的问题。众所周知,雾霾会影响人们的身体健康和生命安全,尤其是交通安全,严重的雾霾天气甚至导致高速公路和机场等交通设施的关闭,严重影响人们出行的便利。那么,如何有效降低雾霾天气对交通的影响程度就成为了学者们研究的方向之一。
1 实现原理
现有算法难以在FPGA上实现的主要原因就是大部分现有算法包含了大量的浮点运算,而FPGA并不适合浮点运算。本文提出的算法尽量避免了浮点运算,转而大量使用了定点运算和整数运算,大大提高了算法在FPGA上的运行速度,从而实现了图像实时去雾霾的的效果。
本文提出的算法基于现有的Retinex算法等,主要根据FPGA的特点对算法进行了优化,使算法能够在FPGA上运行。
1.1 算法介绍
众所周知,Retinex理论的基本内容是,物体的颜色由物体反射长(红),中(绿)和短(蓝)光的光线的能力决定,而不是反射的绝对值光强度。物体的颜色不受光线不均匀性的影响,并且具有一致性,即Retinex基于颜色一致性(颜色恒定性)。
根据Rand的理论,给定图像S(x,y)可以分解成两个不同的图像:反射图像R(x,y)和亮度图像L(x,y)。
对于观察者观察到的图像中每一个像素S(x,y),可以认为
事实上,如何确定R并没有一个明确的结论,所以根据不同的方法,也可以产生各种各样的算法。本文采取了一种最适合FPGA的估计方法。
步骤一:利用对数的方法将入射光和反射光分离
事先使用Matlab求出0到255的整数对数表,在FPGA中写一个ROM并将上表存入ROM中。这一步使用了对数运算,但由于RGB空间中R、G、B取值有限,所以可以事先将对应结果算好存入FPGA的ROM中,这样不仅降低了算法的复杂程度,还大大提高了算法在FPGA中的运行速度。
步骤二:我们将最终反射图像估计为空间平滑图像(物理解释是通过计算图像和周围区域中像素的加权平均值来计算图像中的照明变化,并将其去除;最后, 只保留图像中物体的反射属性),因此可以使用高斯模板来卷积原始图像,相当于对原始图像进行低通滤波以得到低通滤波图像D(x,y )。这一步骤可以用如下公式表示,F(x,y)表示高斯滤波函数:
这一步骤其实就是对图像进行了一次低通滤波,从而除去了步骤一中产生的高频噪点。本文选择了非常成熟的中值滤波器设计。中值滤波算法首先在n*n窗口中对数据进行排序,然后将(n2+1)/2数字作为当前像素点的新值,即用中值替换原始值。 因此,选择正确的排序算法是提高滤波器性能的关键。由于中值滤波器只需求中值,不需要对序列进行完全分类,结合FPGA并行计算的特点,可以改善排序算法。
3×3二维中值滤波窗口中的数据定义如表1所示。
首先,对窗口中的每一行进行排序,得到3行的最大值,中值和最小值,分别表示为Max,Med和Min。 对于第一行窗口数据,有:
然后,对经过第1次比较后的数据进行分组,将每行的最大值分在一组,记为Max={Max1,Max2,Max3}。将每行的中值和最小值也各分为一组,记为Med和Min,其中,Med={Med1,Med2,Medl3},Min={Min1,Min2,Min3}。由于要找的是中值,因此只需取最大值组中的最小值MinofMax,中值组中的中值 Medofmed以及最小组中的最大值 Magoffin来进行比较,其他值均可舍弃不参加排序比较。最后, Minimax、 Medofmed、 Magoffin的中值即是最终要求的中值。即Medofwin=Med{ Minimax, Medofmed, Magoffin}。
步骤三:在对数域中,从原始图像中减去低通滤波图像以获得高频增强图G(x,y):G(x,y)=logS(x,y)-logD(x,y)
步骤四:对G(x,y)取反对数以获得增强图像R(x,y):
2 结束语
本算法基于前人的工作,针对FPGA的特点提出了一个实时图像去雾霾算法,充分利用了FPGA快速、功耗小、开发周期短的特点。