基于FPGA的雾霾视频图像实时复原系统研究
2019-10-15黄品高刘建伟
叶 懋,黄品高,吕 洋,唐 宁,刘建伟
(1.桂林电子科技大学 机电综合工程训练国家级实验教学示范中心,广西 桂林541004;2.中国科学院 深圳先进技术研究院,广东 深圳518005;3.西安应用光学研究所,陕西 西安 710065)
引言
港口、高速路口等处的户外监控设施易受季节性雾、霾天气的影响,造成对比度降低、色彩失真、细节丢失等成像问题,使这些户外视频设备难以发挥其应有的作用,严重时甚至造成人员和经济损失。因而雾、霾气象条件下视频图像实时复原技术的研究受到广泛的关注。
相对于传统雾霾图像复原算法,基于物理模型的图像复原方法在近年来有了长足发展,图像复原效果更佳且运行速度更快[1-4]。在视频实时除雾方面,随着FPAG(field programmable gate array)、ARM(advanced RISC machine)等芯片的发展,使视频实时处理不再依赖上位机成为可能;目前基于先验暗通道算法及其改进算法在FPGA上的实现[5-6],由于先验暗通道复原算法较大的计算量,使得这些研究都仅在单一图片的除雾上获得成功;还有利用FPGA及在其内部嵌入RISC(reduced instruction set computer)处理器软核,共同实现实时视频除雾[7],这种方法使用了RISC因而对FPGA的要求较高,不利于产品化后降低成本,降低了系统的可移植性。
为保证视频除雾处理的实时性及降低硬件开销,本文以一种快速雾霾图片复原算法[4]为参考,提出了一种采用流水线设计方法、局部与全局计算相结合、窗口中心像素处理为核心的实时视频复原处理算法的FPGA实现方案,并在DE2-115 FPGA开发板上进行了系统的验证。
1 雾霾图像复原算法及其框图
1.1 雾霾图像复原算法
McCartney在Mie散射理论的基础上提出了著名的大气散射模型[8],在雾、霾等恶劣气象条件下,因光线在传输过程中受空气中悬浮微粒的影响,使得在成像端获取的视频或图片不清晰,该模型将这一过程表达为
H(x)=F(x)e-β d(x)+A(1-e-β d(x))
(1)
为简化(1),令,
G(x)=A(1-e-β d(x))
(2)
则由(1)式可得:
(3)
式中:H(x)是由成像设备获取的已退化的有雾图像,需从H(x)中估计出环境光G(x)和全局大气光A即可要获得复原的图像F(x)。
文献[4]给出的环境光估值方程为
G0(x)=min(min(ρmav,0.9)Mave(x),M(x))
(4)
式中:M(x)是每个像素在R、G、B3个通道的中的最小值,对M(x)进行均值滤波后获得Mave(x),mav(0≤mav≤1)是M(x)中所有元素的均值;ρ是调节除雾深度的参数,其取值范围为0≤ρ≤1/mav。经过大量实验验证,当增大ρ的取值时,能够获得较小的透射率,使得最终保留的雾小,但会增加除雾过程的能量损失,使最终图像整体亮度下降[9]。
文献[4]给出大气光的估值方程为
max(Mave(x)))[111]T
(5)
1.2 算法实现的框图
从(4)、(5)式可以看出,复原算法都是围绕着M(x)的计算展开的,如果以帧为单位计算M(x),就必须缓存一帧R、G、B三个通道的数据加上M(x)自身的存储,需要640×480×4个8 bit的寄存器,这样的计算方式首先会降低系统的实时性;其次不利于控制系统的硬件成本;最后降低系统的可移植性。
考虑到数字视频的像素是在时钟信号控制下串行传输的,因此以流水线的处理思路将算法修改为:在一个时钟周期内以单一像素的计算为核心,对于整个模块而言,在一个时钟周期里输入一个像素同时也输出一个处理好的像素,这样极大地提高了模块的数据吞吐率,提高了可复用性和可移植性。
由于FPGA内部处理是并行运行的,将算法分割为一系列小模块,使大部分的处理在一个时钟周期内完成,因此可以将算法实现分解为如图1所示的流程。
图1 复原模块框图Fig.1 Block diagram of recovery module
2 除雾算法的FPGA实现
遵循以单一像素计算为核心的思路,选择以均值滤波窗口大小来确定计算窗口的划分。如图2所示为均值滤波不同窗口对最终处理效果的影响,左图为使用3×3窗口、右图使用15×15窗口,所得结果主观上无明显差别,考虑占用存储空间较少因此选用3×3窗口。
图2 滤波窗口大小与最终结果的比较Fig.2 Comparison of different filter window sizes
2.1 移位寄存器的设计
为实现3×3窗口均值滤波获得Mave,就要求在每个时钟周期获得同一列相邻3行的3个像素信息。因此,输入的串行像素数据首先经过图3所示的行缓存(Line buffer),完成行数据的移位暂存与串并转化,使相邻3行的数据得以并行输出。
图3 Line bufferFig.3 Line buffer
在最后计算输出时还需要用到原始的像素信息,所以在行缓存后还要使用一个移位寄存器,来存储原始数据,其结构如图4所示。其中的Reg均为24 bit,在系统中使用3组这样的移位寄存器分别对应于R、G、B通道,其shift in[0∶24]分别连接图3中{taps0[0∶7],taps1[0∶7],taps2[0∶7]}。
图4 移位寄存Fig.4 Shift register
2.2 三个通道的最小值M(x)与像素最大值的求取
M(x)需要每个像素3个通道中的最小值,因此只需要进行8次比较,实现时使用阻塞赋值方式,使得比较模块被综合成为一个纯组合逻辑电路,因此9个数据的比较在一个时钟周期内得以完成。图5中LESS_THAN4和MUX21的组合就是综合后的两数比较算法的实现,MUX21输出端就是两数中的小值。
图5 两个数的比较Fig.5 Sub-module of two number comparison
同样,像素最大值模块也是使用阻塞赋值方式,在一个时钟周期内完成同一列的相邻3行的3个像素9个值的比较,其结果在与暂存的现有最大值比较,直至一帧数据比较完后获得像素的最大值max。
2.3 最小值M(x)均值滤波及滤波后的最大值
每个时钟周期最小值模块都能输出同一列相邻行3个像素的最小值,因此需维持如图6所示的移位寄存器,在每个时钟周期进行一次该移位寄存器内数据的均值求取,即可完成3×3窗口的均值滤波获得Mave。同时将该结果与当前暂存的均值滤波的最大值Mavemax比较,如果大于当前最大值,则将当前结果替换Mavemax的值。
图6 3×3窗口结构Fig.6 Structure of 3×3 window
2.4 以帧为单位计算均值滤波的平均值
由大气散射模型可知大气光是全局量,估算大气光至少需要一帧的数据来进行估算,考虑到视频相邻两帧之间大气光值变化不大,可选择以前一帧的大气光来计算当前帧。为此将每个时钟周期产生均值滤波的结果Mave累加,当累加完一帧的数据后,然后将累加的结果除以640×480×256即得mav,即(4)式中的mav。
2.5 估计大气光A、环境光G以及除雾后的图像
至此估算环境光G所需的数据均已获得,因FPGA不支持浮点运算所以要将参与(4)式运算的数左移16位而后再进行计算,其中调节参数ρ由FPGA系统的外部11位拨码开关来提供。
待一帧数据处理完后,根据(5)式大气光A只需要将一帧像素的最大值max与均值滤波后的最大值Mavemax作平均即可,在实现的时候直接将二者的和左移15位即得大气光A的估计值。
最后根据(3)式分别计算R、G、B三个通道处理后的值,并完成输出。
2.6 系统的FPGA实现
本文的算法系统是在友晶科技的多媒体处理开发平台DE2-115上实现的,系统架构如图7所示。视频信号源输出的视频信号,经由ADV7180解码得到8 bit的兼容ITU-RBT.656标准视频分量信号,该视频分量信号在BT656解码模块中,进行串并转化为16 bit的YCbCr色空间信号,进而利用SDRAM进行转存,将隔行视频信号转化为逐行视频信号,利用YCbCr解交织模块和YCbCr转RGB模块将信号最终转化为24 bit的RGB信号,视频复原模块将RGB视频信号进行雾霾复原处理后,经由VGA控制模块输出到ADB7123中,从而完成整个系统流程。
图7 系统架构Fig.7 Structure of system
3 实验结果及分析
本文FPGA的程序是使用Verilog在版本为13.0的Quartus II上进行逻辑综合与下载的,运行平台为友晶科技的DE2-115。使用的测试仪器是TEKTRONIX型号MSO 2012B。实验测试环境如图8所示。
图8 测试环境Fig.8 Testing environment
3.1 模块时序分析与测试
当像素p进入模块开始处理时,在第一个时钟周期内完成N8(p)各像素的三通道最小值M(p),以及最大值max,在第2个时钟周期完成M(p)的均值滤波求得Mave(p),并判断当前像素是否是完成一帧,如果完成则求取mav,否则继续累加;第3个周期完成估算G,并判断是否完成一帧,如果是则计算A;求取像素p的最后处理结果;第4个周期处理后像素p。
为方便测试模块的工作时序,测试将通道R和通道G的输入全为“0”,通道B每隔5个时钟周期输入一个“255”,逻辑分析仪的D9-D15接B通道输入信号(受测试仪器输入端口数量限制,缺少最高位)、D8接时钟、D7-D0接模块的B通道输出信号,测试结果如图9所示;播放视频时实际测试波形如图10中所示。在两图中D8时钟信号分别为26.999 9 MHz和27 MHz,在图10的D15、14红框标记处是输入像素的第2高位和第3高位,其对应输出为D6、D5的红框标记处,需要说明的是:在图10中由于是实时播放的视频图像,所以在经过处理后每个像素的值,相对于输入值均可能会产生变化,正如图10中输入输出通道中红框下面各位的值均有变化。图9、10的测试结果表明当一个像素进入模块后,3个周期内完成处理并在第4个周期进行输出,与理论分析一致。
图9 时序测试结果Fig.9 Timing test results
图10 播放视频时实测波形Fig.10 Measured waveform when playing video
3.2 实验结果
DE2-115开发板使用的是Altera公司Cyclone IV系列EP4CE115F29的FPGA芯片,本文所提出系统经逻辑综合后,系统以及图像复原模块占用资源情况如表1所示。
表1 系统及模块占用资源情况
实验所用视频为雾天高速路口监控录像其分辨率为640×480 pixel、帧率29帧/s。视频处理效果如图11所示,第1列为原始视频图像、第2列是ρ为1.5时的效果、第3列是ρ为1.9时的效果,从中可以看出处理后的图像能够比较清晰地看到远处房屋及近处车辆细节,特别是左上角区域复原后能够显示出较为清晰的细节,随着ρ的增加,除雾的程度也随之增加,由于能量的损失致使图像偏暗。
图11 视频原图及不同调整系数的复原效果Fig.11 Comparison with different parameter ρ
3.3 客观评价
受FPGA系统存储空间、不能浮点运算等实际情况的限制,以及为满足系统对视频处理实时性的要求,本文对原算法做了一定修改。为衡量修改前后对视频的影响,分别计算原算法处理结果与原图的能量损失比例、FPGA系统处理结果与原图的能量损失比例[9]。计算结果如表2所示:同一幅图片在同一参数下,原算法与FPGA处理算法损失能量差异最大为2.26%、最小为0.68%,说明修改后算法与原算法基本一致。
表2 复原前后能量损失对比
4 总结
实验结果表明修改后的算法相对于原算法能量损失的差异最大为2.26%、最小为0.68%;对于分辨率为640×480 pixel,帧率29帧/s的视频,系统播放流畅无卡顿,完全满足实时处理的要求。且系统占用资源少,可以完全移植到C3系列部分FPGA中,从而降低硬件成本,也可作极少量的修改,实现对高清视频的处理。