由于大气散射使得图像质量严重退化、对比度下降、层次不丰富[1],雾天图像去雾处理成为了国内外的研究热点。根据不同的图像处理方式将去雾算法分为基于物理模型方法和基于非物理模型方法[2]。睢丹等[3]提出了基于混沌性的加权滤波算法,有效地降低了雾化、减少了浓雾噪点。郭伟[4]提出了基于多种先验知识的单幅雾天图像复原算法;何凯明等[5]提出了“基于暗通道优先的单幅图像去雾”方法,两种方法主要针对单幅图像,去雾效果明显,但算法的时间和空间复杂度较高。何凯明等[6]进一步提出导向滤波算法,以提高暗通道优先算法的处理速度,但其计算复杂度仍较高。魏先民[7]提出了自适应直方图均衡算法(adaptive histogram equalization,AHE),该算法自适应好、鲁棒性强,但是其存在过度放大均匀区域噪声的缺陷。基于此,Zuiderveld[8]提出了限制对比度自适应直方图均衡(contrast limited adaptive histogram equalization,CLAHE)算法,提升了图像的局部对比度并突出图像细节。由于CLAHE算法有优异的去雾效果,计算简单且易于并行化实现,因此得到研究者青睐。杨光等[9]重点研究了CLAHE算法框架及其FPGA实现,实验表明该算法具有良好的去雾效果。周卫星等[10]提出的方法改善了图像的整体视觉效果。文献[11-12]以FPGA为硬件平台实现了CLAHE算法,系统满足实时性且图像对比度明显增强。孔壮等[13]利用CLAHE算法设计基于高分辨率的视频图像去雾系统,但是图像分辨率仅为1 004×1 004。周晓波等[14]利用FPGA设计了支持多种分辨率的图像高速实时去雾系统,但其算法复杂度以及系统实时性仍有改善的空间。虽然现有去雾系统取得了不错的去雾效果,但大多数系统针对单幅图像进行处理,稳定性和实时性不足,且存在亮光区域过曝的缺陷。针对这些问题,笔者设计并构建了一种基于FPGA的1080P全高清视频图像实时增强去雾系统。测试结果表明:系统对分辨率为1080P视频图像去雾效果明显、图像层次感强,同时具有较强的实时性和稳定性,系统功耗小于5 W。
图1 系统框图
Figure 1 System architecture
图1为系统硬件框图。高速相机输出图像分辨率为1 920×1 080,帧频为30 f/s。相机通过HD-SDI接口传输至去雾系统,接口芯片为GV7600,用于视频图像配置,系统可实现图像自检、镜像、电子变倍以及电十字叠加等功能,并完成图像增强去雾。通过RS-422串口命令对系统功能进行控制,其经过FPGA软核解析并转发给逻辑实现控制FPGA内部功能。图2为FPGA内部功能图,图3为系统实物图,其尺寸为103 mm×60 mm,质量小于100 g。
图2 FPGA功能模块
Figure 2 The functional modules of FPGA
图3 系统实物图
Figure 3 The photo of the system
CLAHE算法将图像进行分块,对每个子块采用对比度限幅操作来克服AHE算法过度放大噪声的缺陷。CLAHE算法步骤如下。
步骤1 将图像划分为4×4个大小相同的子块(非重叠图像,1≤i,j≤4),分别对子块进行直方图统计,即统计各灰度级的像素数。
步骤2 利用截断阈值β对直方图进行削峰填谷操作,截断阈值β的计算如式(1):
(1)
式中:N为每个子块的总像素数;M为像素灰度级数[0,255];参数s为控制指定像素值周边的对比度放大程度,取值范围为1~4的整数;α为截断系数,取值范围为[0,100]。当α=100时,β取最大值此时的增强效果达到最大。
步骤3 对削减后的直方图进行均衡,将多出的像素数分配到像素数小于β的灰度级中,以1作为像素分配步长,通过迭代的方法进行像素重分配,直至像素分配完毕,得到均衡后的结果。
步骤4 根据直方图均衡结果可得到每个子块直方图映射f以及其中心像素点的灰度值,其他点的像素通过与其邻近的4个子块的直方图映射f采用双线性插值算法获取。图4为图像第j-1行至第j行、第i-1列至第i列的局部示意图(i,j≥2),其中P为待增强像素点,x、y、w、r数值关系确定P点和参考点的位置关系,根据其处于角落、内部、边界来确定各相邻子块的权重关系,加权计算得到最终的像素值,如式(2)所示:
(2)
式中:Pold为原始像素点的灰度值;Pnew为增强去雾后新灰度值。
图4 第(i,j)子块中像素P及其相邻的4个子块
Figure 4 The four adjacent blocks of the sub-block(i, j)
图5为改进CLAHE算法的FPGA实现流程图。整个系统划分成6个模块,分别为输入模块、直方图统计模块、直方图均衡模块、灰度值映射模块、双线性插值模块以及输出模块。其中,直方图统计模块采用分块分通道统计,将多通道直方图合并于一个直方图中,用于后面的削峰填谷;针对直方图均衡模块,原CLAHE算法以1作为分配步长,该过程需要多次的迭代,像素重分配操作需要进行多次迭代,使得图像处理延时较大。而笔者将该过程利用映射算法进行计算,将多出的像素灰度值个数均匀的分配给256个灰度级,且仅需要进行一次削峰填谷操作,提高了算法的效率。各个模块均采用标准axi_stream接口进行互联。
图5 FPGA实现流程图
Figure 5 The FPGA program block diagram
输入模块:输入模块通过SDI接口采集相机输出的高速图像数据,将图像数据从YUV颜色空间转换为RGB颜色空间,并将数据流转换为标准的axi_stream接口,方便与后续模块互联。
直方图统计模块:本系统将视频图像划分为多个非重叠子块,对每个子块分RGB通道进行直方图统计,并将多通道直方图进行合并,合并后的直方图数据存入乒乓RAM中。如图6为子块1的直方图统计,分RGB通道统计各分块的灰度直方图信息,采用边输入边计算的方法,将每个通道灰度值对于像素数存入对应的RAM1_R、RAM1_G、RAM1_B存储器中。当该子块所有像素输入完成之后,读出该子块每个通道像素值并将其进行叠加统计,最后将整合的直方图写入乒乓RAM1_RGB中。截断阈值β可以由上位机通过RS-422设置。当某个灰度值的个数M′大于或者等于β时,由β代替该像素的个数M′存入到RAM_RGB中,并将超过门限值的像素点个数M′-β累计到对应子块的寄存器REG_cnt中,用于后续的直方图均衡操作。
直方图均衡模块:直方图统计完成后,通过削峰填谷对其进行均衡操作,如图7所示。β为输入阈值,由于实际环境的多变性,单一阈值无法对所有情况都达到良好的去雾效果,因此本系统提供了多个可供选择的β值。
图6 子块1的直方图统计
Figure 6 The histogram statistics
图7 直方图均衡
Figure 7 The histogram equalization
均衡算法步骤如下:
步骤1 初始化参数。 计算分配步长L=REG_cnt/256,设置截断阈值β,初始化当前灰度级i=0的像素个数M′,均衡后的灰度级个数K=0以及灰度级范围i∈[0,255]。
步骤2 计算均衡后的灰度级像素个数K=L+M′[i]。
步骤3 若K>β,则当前灰度级像素个数M′[i]为β;否则灰度级像素个数M′[i]=M′[i]+L。
步骤4 更新灰度级i=i+1。
步骤5 停止准则,判断i是否达到最大灰度级255。若满足则输出均衡后各灰度级的像素数;否则转步骤2。
原始CLAHE算法像素重分配操作需要进行多次迭代,使得图像处理延时较大,将变量REG_cnt与灰度级的个数作商,将多出的像素灰度值个数一次性均匀地分给各个未饱和灰度级,提高了实时性的同时节约了系统资源。
灰度值映射模块:利用映射算法,通过原始图像灰度值映射出增强后的灰度值。
映射算法步骤如下:
步骤1 初始化每个子块的总像素数N、灰度级i=0以及其对应的原始灰度级像素值Yi=0。
步骤2 计算中间过度值
步骤3 计算增强后的灰度级像素值
步骤4 更新灰度级i=i+1。
步骤5 判断停止条件,判断i是否达到最大灰度级255。若满足则输出增强后各灰度级的数值;否则转步骤2。
将均衡后的灰度值直方图数据采用乒乓的方式按奇偶帧存入RAM中。
双线性插值模块:图8为双线性插值模块功能框图。双线性插值模块包括数据选取、权值计算以及插值计算。从RAM中读取像素数据时,同时计算权值因子,需对像素时钟做一定的延时来保证两者的同步性。位于角落、内部、边界位置的像素对应不同的插值计算。最后,利用视频图像相邻两帧直方图的高度相似性,以前一帧直方图均衡后的映射灰度值作为当前帧图像处理的数据,可避免缓存一帧的数据,避免了大容量外部存储器的使用,节约了资源,提高了实时性。
图8 插值计算模块
Figure 8 The interpolation calculation
像素点在图像中的位置由像素时钟和行同步信号(LVAL)计数获得,即确定其所属子块中的位置。
输出模块:输出数据通过芯片GV7600/DS90CR288解析,通过SDI/Cameralink接口传送给显示端。
为验证本文算法的有效性,将本文算法与原始CLAHE算法进行对比。图9为两种去雾算法效果图。仅对原始CLAHE算法中Y方向分量做均衡使得图片的整体亮度有一定的增强,但其色彩暗淡,对比度较低;而本文算法处理效果明显,图片色彩均匀,图片的层次感较强。
图9 两种算法去雾效果对比
Figure 9 The fogging effect of the two algorithms
采用Xilinx Vivado软件对FPGA程序进行布局布线,FPGA资源消耗如表1所示。其中,共消耗了53 064个查找表(LUT),占总查找表的26.04%;消耗103个块存储单元(BRAM),占总BRAM的23.15%;消耗了60个DSP资源,占总DSP的7.14%。
表1 FPGA资源消耗
Table 1 The resource consumption of FPGA
项目资源占用资源/个可用资源/个所占百分比/%LUT53 064203 80026.04LUTRAM3 92464 0006.15FF50 077407 60012.29BRAM10344523.15DSP608407.14IO13840034.50BUFG123237.50MMCM31030.00PLL11010.00
图10为直方图统计模块MODELSIM仿真的结果图。将像素灰度值按一定的时序写进RAM中,图中:rgb_vld为数据有效标志(高有效);rgb_data为灰度值(如0×71、0×72等);ram_wr_cnt为灰度值个数(如0×4 100(16进制))。
图11为双线性插值模块的MODELSIM仿真结果图。按一定的时序从RAM中读取直方图均衡后的灰度值,通过读取原始像素值查找新映射表来索引增强后的像素值。以读取B通道数据为例,其中:ram1_en_pi_b为读B值使能(高有效),ram1_addr_pi_b为B的数据地址(如0x85、0x84),ram1_din_pi_b为B的数据值(如0x92),pipe1_row_cnt与pipe1_line_cnt为子块1的行列计数(如0x20、0x3f),以确定该值所在子块1中位置。
图10 直方图统计仿真结果
Figure 10 The simulation of histogram statistics
图11 双线性插值仿真图
Figure 11 The simulation of bilinear interpolation
图12为本文算法MATLAB实现和FPGA实现效果图。FPGA与MATLAB实现结果图对应位置像素点的RGB值一致,说明了FPGA实现的正确性。
图12 MATLAB和FPGA 实现效果图
Figure 12 The fogging effect of this algorithm in MATLAB and FPGA
图13为系统外场测试结果。可以看出,原始有雾图像图片不清晰、对比度较低,很难识别图中的目标(图中房屋轮廓);而去雾图像对比度增强、突出细节、层次感增强。结果表明,该系统具有较强的实时性和稳定性,系统功耗测试仅为4.848 W,可应用于低功耗领域。
图13 系统去雾效果图
Figure 13 The fogging effect of this system
以FPGA为硬件平台,设计并构建了一种基于1080P高分辨率视频图像实时增强去雾系统,对CLAHE算法进行一定的改进,完成了改进后的CLAHE算法各个模块的设计和硬件实现。系统测试结果表明,系统具有极好的稳定性和实时性,图像的对比度明显增强,图像内容清晰,层次感强,能够达到很好的去雾效果,同时还具有低功耗特性。
[1] 王欣威,李颖,董慧颖,等.基于大气模型的天气退化图像复原方法及应用[J].沈阳理工大学学报,2005,24(1):32-35.
[2] 郭璠,蔡自兴,谢斌,等.图像去雾技术研究综述与展望[J].计算机应用,2010,30(9):2417-2421.
[3] 睢丹,张亚利,杨杰.雾霾污染下基于混沌性的图像去雾算法改进[J].郑州大学学报(工学版),2016,37(4):91-96.
[4] 郭伟. 基于多种先验的单幅雾天图像复原算法研究[D].厦门:厦门大学,2014:58-61.
[5] HE K M, SUN J, TANG X O. Single image haze removal using dark channel prior[J]. IEEE transactions on pattern analysis & machine intelligence,2011, 33(12):2341-2353.
[6] HE K M, SUN J, TANG X O. Guided image filtering[J].IEEE transactions on pattern analysis & machine intelligence, 2013, 35(6):1397-1409.
[7] 魏先民.自适应直方图均衡方法研究与应用[J].信息技术与信息化,2005(4):124-125.
[8] ZUIDERVELD K. Contrast limited adaptive histogram equalization[M].San Diego, CA, USA: Academic Press Professional Inc. 1994:474-485.
[9] 杨光,李晶,吴钟建,等.基于FPGA的实时视频增强[J].电视技术,2013,37(19):19-23.
[10] 周卫星,廖欢.基于高频强调滤波和 CLAHE 的雾天图像增强算法[J].电视技术,2010,34(7):38-40.
[11] KENTARO K, MARUYAMA T. Real-time processing of contrast limited adaptive histogram equalization on FPGA[C]//International Conference on Field Programmable Logic & Applications. Milano, Italy: IEEE, 2010:155-158.
[12] FERGUSON P D, ARSLAN T, ERDOGAN A T, et al. Evaluation of contrast limited adaptive histogram equalization (CLAHE) enhancement on a FPGA[C]//2008 IEEE International SOC Conference. Newport Beach, CA, USA: IEEE, 2008:119-122.
[13] 孔壮,何衡湘,代俊,等.高分辨率视频图像实时增强系统的设计[J].电视技术,2015,39(20):115-118.
[14] 周晓波,何魁华,周聪. 基于FPGA的图像高速去雾实时系统设计实现[J].电视技术, 2018,42(4):67-72.