文献标识码:A
DOI:10.16157/j.issn.0258-7998.173727
中文引用格式:董梦莎,张尤赛,王亚军. 基于ZYNQ的Retinex实时图像去雾[J].电子技术应用,2018,44(4):52-55.
英文引用格式:Dong Mengsha,Zhang Yousai,Wang Yajun. Retinex algorithm for real-time image defogging based on ZYNQ[J]. Application of Electronic Technique,2018,44(4):52-55.
0 引言
由于雾霾天气会造成户外视觉系统所获取的图像质量严重退化,不仅模糊不清、对比度降低,而且还会出现严重的色彩偏移和失真,从而影响户外视觉系统的稳定性和准确性[1-2]。因此,对雾霾天气引起的降质图像进行有效、快速的去雾处理显得极为重要。
常见的去雾方法有两类:基于图像复原的去雾方法和基于图像增强的去雾方法[3]。前者是从图像退化的原因出发,建立去雾图像的物理模型,根据该模型来恢复出清晰的去雾图像。该类方法去雾效果良好,但算法复杂度较大,不便于在硬件平台上实现。基于图像增强的去雾方法不考虑图像雾化的原因和机理,而是有选择性地增强需要的细节信息。属于此类的去雾方法常用的是Retinex算法[4]。Retinex算法能较好地保留图像的边缘等细节信息,处理后的图像具有亮度适中、对比度高等优点。现有去雾算法多数在PC上实现,其移植性和灵活性等均限制了在户外视频系统中的应用。
ZYNQ是一种Xilinx体系的全可编程片上系统(All Programmable System on Chip),集成了双核ARM Cortex-A9和FPGA,拥有大量逻辑单元、数字信号处理器(Digital Signal Processor,DSP)等资源,能够满足户外视频系统的实时处理、小型化、可嵌入、可移植和低功耗等性能要求。
据此,本文提出一种基于ZYNQ的Retinex实时图像去雾方法,利用ZYNQ的ARM+FPGA软硬件协同的方式来提高户外视频系统的图像去雾性能。为了降低算法复杂度以及颜色保真,该方法在HSV颜色空间对亮度分量V进行Retinex去雾处理,对饱和度S做线性拉伸来扩展动态范围,保持色调H不变以避免颜色失真。在实现架构上,由ARM完成一些简单计算,如Retinex算法中的对数、减法运算以及线性拉伸、颜色空间转换等,而将高斯核函数与图像的二维卷积这种复杂耗时的计算交由FPGA采用并行算法来提高实时处理速度,ARM与FPGA之间的数据交互则由片内总线AXI4(Advanced eXtensible Interface 4)来承担[5]。
1 传统Retinex算法
Retinex理论认为一幅图像可分解为图像入射分量和反射分量,即:
2 算法优化
传统Retinex算法中对图像R、G、B 3个通道分别进行处理,容易造成颜色失真,而且在硬件实现中计算量非常大,难以满足系统的实时性要求。因此,本文采用基于HSV颜色空间的Retinex算法。将带雾图像由RGB颜色空间转换到HSV颜色空间,得到相关性较小的色调H、饱和度S和亮度V,保持图像的H分量不变,对饱和度分量S进行线性拉伸,仅对V分量进行单尺度Retinex算法处理,这样既可以降低算法的计算量,又可以避免传统Retinex算法容易造成颜色失真的缺陷。算法流程图如图1所示。
具体实施步骤如下:选取合适的σ值和模板大小,根据式(4)构造高斯核函数;将带雾图像从RGB颜色空间转换到HSV颜色空间;根据Retinex算法,对亮度分量V取对数得到V1;将分量V代入式(3)与高斯核函数卷积,然后取对数得到环境光的照度估计值V2;V1分量和V2分量相减,得到经去雾算法处理后的亮度分量V3;对饱和度分量S进行拉伸得到S1;将色调分量H、拉伸后的饱和度分量S1以及经Retinex算法处理后得到的亮度分量V3转化到RGB色彩空间并输出,完成图像去雾过程。
3 硬件平台实现
硬件平台是基于Zynq-7010的开发板,采用ARM+ FPGA的方式完成图像去雾系统的设计[6]。图像去雾系统中,图像数据作为数据输入;对数模块、颜色空间转换模块、减法器、线性拉伸S模块以及显示控制在ARM中完成;计算量大、占用时间长的卷积运算放在FPGA中运行。
3.1 图像数据的规格化
为了提高计算速度,降低FPGA资源消耗,设计中使用定点数保存数据并进行计算。实验表明,对于图像数据HSV的值域[0,1],当误差小于4×10-3时,不会出现明显的图像细节信息的丢失。因此用0.003 906规格化图像数据的值域[0,1],即可采用如图2所示的8 bit二进制定点小数来表示图像数据,小数点固定在最高位左边,表示范围为[0,0.996],最小分辨率为(0.00000001)2≈0.003 906。
3.2 ARM部分算法实现
3.2.1 对数模块
Retinex算法中需要对带雾图像I(x,y)和图像的入射分量(环境光的照度)L(x,y)进行对数运算。在ZYNQ系统中为了降低量化误差和提高运算的实时性,这里采用以2为底的对数查找表方法来实现对数运算。
由于图像数据I(x,y)、L(x,y)已被规格化为图2所示的8 bit二进制定点小数,因此其值域∈[0,0.996],最小分辨率为0.003 906,共有256个数据值。其中0的对数值是-∞,无法对其直接量化,故将[0,0.995]分为{0}∪[0.003 9,0.995]两个部分。[0.003 9,0.995]对应的对数域∈[-8,-0.007],在误差小于4×10-3时,对数值可采用1 bit符号位+7 bit整数位+8 bit小数位共16 bit的有符号二进制定点数表示;log20用16 bit有符号二进制定点数能表示的最大负数-128来近似。最后将量化之后的256个16 bit的对数值存于查找表LUT[ ]中。
用X统一表示图像数据I(x,y)、L(x,y)已被规格化的8 bit二进制定点小数,用Y表示对数运算结果的16 bit有符号二进制定点数,则上述对数查找表方法可以表示为:
式中函数int( )表示二进制数取整。
3.2.2 线性拉伸S
在去雾过程中,伴随着图像亮度V的增强,饱和度S会相对有所降低。因此为了保持图像颜色原有的鲜艳程度,还需要增强图像的饱和度S。这里采用三段线性拉伸的方式对饱和度S进行拉伸处理。
3.3 FPGA部分算法实现
3.3.1 高斯核函数的规格化
实验仿真表明,当σ=40,滤波模板为101×101时,Retinex算法的去雾效果较好。此时,高斯核函数的值域为[2.085×10-5,9.947×10-5],数值较小,如果直接量化,数据位数较宽,而且会增大资源消耗。由于卷积运算是线性运算,因此可以先将高斯核函数扩大表示,然后再将卷积的结果缩小相同的倍数,而不会影响最终计算结果。这里将高斯核函数扩大27倍,扩大之后的高斯滤波函数的值域为[0.002 7,0.012 7],误差小于2.56×10-4,去雾图像没有明显的细节信息丢失。然后用2.44×10-4规格化扩大27倍的高斯核函数的值域[0.002 7,0.012 7],即用1 bit符号位+3 bit整数位+12 bit小数位共计16 bit二进制定点小数来表示,如图3所示,值域为[-8,7],最小分辨率为(0.000000000001)2≈2.44×10-4,能够满足精度要求。最后将量化成定点数的高斯核函数的值以行的形式存储为初始化文件,直接以ROM的形式固化到FPGA的块随机存取存储器(Block RAM,BRAM)中。
3.3.2 卷积模块
卷积运算是由大量的矩阵乘法和加法运算组成的,由于其算法是并行结构,设计中将卷积运算放在芯片的FPGA中完成,算法整体框架结构如图4所示。
ARM通过AXI4总线将图片数据和控制信息分别发送给FPGA的控制寄存器CTRL_reg和图像数据寄存器Row_reg,并通过AXI4读取控制寄存器的当前状态和卷积寄存器Result_reg中的结果。
卷积运算顶层模块由高斯核函数ROM块Coe_ROM、图像块RAM Img_RAM和计算模块CALC_Module 3部分组成,卷积使用的高斯核函数存储在FPGA的BRAM中,以ROM的形式进行读取,图像块RAM大小与滤波核大小相同,主控程序分别从Coe_ROM和Img_RAM中读取高斯核函数和像素数据送入计算模块进行计算,并将计算的结果送入结果寄存器Result_reg。
由于高斯滤波核是90°旋转对称的,而且高斯核函数在程序中不发生改变,为了节省存储空间和减少逻辑控制的复杂度,在程序中只存储高斯核函数的上半部分,组成高斯核函数结构如图5所示。
为了提高计算速度,图像数据RAM块使用移位寄存的方式保存,图像RAM块采用从上到下、从左到右的方式滑动,在每一列的顶端重新准备卷积的数据,然后卷积块向下滑动,每计算一个点,向下滑动一行,图像块RAM的移位寄存器结构如图6所示。
4 实验结果与分析
实验中,硬件平台使用基于Zynq-7010的黑金开发板ALINX7010, FPGA时钟为250 MHz,编程使用Xilinx公司提供Vivado 2016.3,并使用自带仿真软件进行仿真。
4.1 实验结果
为了验证所提出的方法的性能,实验中将所提出的方法与在PC(Core i5 6600K,4.1 GHz主频,16 GB内存,MATLAB 2013a)实现的Retinex算法进行了性能比较。两种实现方法均选取σ=40,高斯模板大小为101×101。
FPGA资源占用指标包括:LUT、查找表RAM(LUTRAM)、BRAM、DSP等。表1给出了ZYNQ硬件部分FPGA 4种资源占用表。
实验中采用峰值信噪比、信息熵、运行时间作为评估图像去雾效果的3个客观技术指标。峰值信噪比是用于描述信号最大可能功率和影响它的破坏性噪声功率的比值。信息熵是衡量图像所含信息量、图像细节的丰富程度的技术指标,熵值越大图像所含信息量越大,图像细节越丰富[7]。
图7给出了3组图像去雾实验的效果对比图,表2则为上述3组实验示例在PC实现的Retinex算法和所提出的方法的峰值信噪比、信息熵、运行时间3个性能指标的对比。
4.2 结果分析
从表1可以看出,LUT占用FPGA资源76.31%,LUTRAM、BRAM、DSP占用FPGA资源均在50%左右,表明整个系统消耗Zynq-7010资源较少,即所需要的硬件成本较低,能满足实际工程的需求。
从图7的A、B、C 3组图像可以看出,经PC实现的Retinex算法和本文提出的图像去雾方法均有明显的去雾效果。
从表2可以看出,经两种算法处理后的峰值信噪比均达到了50 dB以上,能够有效滤除图像中的雾霾引起的噪声,改善图像的清晰度。处理后的图像的信息熵比带雾图像均有所提高,说明经过去雾处理后的图像细节信息得到了增强。本文提出的方法相比于PC上传统的Retinex去雾算法,在峰值信噪比、信息熵等指标上达到了同等水平,而运算速度则提高了28倍以上,达到了每秒25帧以上的实时处理速度。实验结果表明,在ZYNQ平台上实现图像去雾,在保证去雾效果良好的情况下,具有运算速度快、可移植性高、功耗低等优点,可以满足户外视频系统的实用要求。
参考文献
[1] Zhang Jingjun,Ding Yifan,Yang Yi,et al.Real-time defog model based on visible and near-infrared information[C].IEEE International Conference on Multimedia & Expo Workshops.IEEE Computer Society,2016:1-6.
[2] WANG Y K,FAN C T.Single image defogging by multiscale depth fusion[J].IEEE Transactions on Image Processing,2014,23(11):4826-4837.
[3] 高全明,孙俊喜,刘广文,等.基于FPGA的交通视频快速去雾系统的设计与实现[J].电子技术应用,2017,43(6):71-74.
[4] 曹永妹,张尤赛.图像去雾的小波域Retinex算法[J].江苏科技大学学报(自然科学版),2014,28(1):50-55,62.
[5] 张艳辉,郭洺宇,何宾.Vivado HLS嵌入式实时图像处理系统的构建与实现[J].电子技术应用,2016,42(9):115-117.
[6] 梁新宇.基于ZYNQ的行人检测系统软硬件协同实现[D].大连:大连海事大学,2016.
[7] Guo Fan,Cai Zixing.Objective assessment method for the clearness effect of image defogging algorithm[J].Acta Automatica Sinica,2012,38(9):1410.
作者信息:
董梦莎,张尤赛,王亚军
(江苏科技大学 电子与信息学院,江苏 镇江212003)