单尺度Retinex图像增强算法在Xilinx FPGA上的高性能实现

2019-01-02 08:36任梦洁石胜斌
火炮发射与控制学报 2018年4期
关键词:图像增强照度高斯

任梦洁,石胜斌

(陆军炮兵防空兵学院 高过载弹药制导控制与信息感知实验室,安徽 合肥 230031)

弹载电视成像技术是在弹载平台下,以高性能的成像器件为基础,对地面、海面等各种场景下的目标进行侦察、定位和制导的技术。

由于军事作战中往往面临严峻复杂的地理环境和恶劣的光照条件,在景物反射光线亮度分布不均或逆光情况下,成像器件对光线亮暗变化的动态适应性差,低照度情况下无法实现清晰化成像;由于成像器件的分辨率是固定的,当弹目距离较远时,目标图像信息较少,其特征得不到体现,从而严重影响目标的识别精度。

因此,笔者利用SSR算法对成像器件采集到的图像进行预处理,增强图像中有用的信息,从而提高图像的视觉效果,有利于后续的目标检测与跟踪。由于SSR算法的实时性较差,传统硬件处理芯片无法做到对视频图像的实时处理。考虑到嵌入式系统FPGA具有大规模并行处理能力,笔者将SSR图像增强算法应用于FPGA平台,构建了一种基于Xilinx FPGA的弹载电视成像系统。

1 Retinex理论

图像增强主要分为基于空域的增强算法和基于频域[1]的增强算法。如Singh等[2]和Lee等[3]提出的基于灰度水平来实现图像的增强算法。这些算法可以提高亮度与对比度,但往往也会带来信息丢失的问题,而且对于高动态范围的低照度图像,这些算法不能压缩动态范围。Land等[4]提出的基于Retinex理论的图像增强方法具有动态范围压缩大和颜色恒常性等特点。最经典的Retinex算法是美国国家航空航天局的Jobson提出的单尺度Retinex(SSR)算法[5]。

Retinex理论[6-7]的基本思想是入射光决定了一幅图像中的所有像素点的动态范围的大小,而物体自身所固有不变的反射系数决定了图像的内在固有属性。所以将一幅图像分为照度图像与反射图像两部分,通过去除或者降低照度图像对反射图像的影响,就能得到图像的本质视觉感知,从而达到增强图像的目的。根据Retinex理论,可以得到:

I(x,y)=R(x,y)·L(x,y)

(1)

式中:I为输入图像;R为反射图像;L为照度图像。

为了符合人眼在获取信息的非线性特性与简化运算,将式(1)改为对数形式:

r(x,y)=i(x,y)-l(x,y)

(2)

式中:i(x,y)=log2I(x,y);r(x,y)=log2R(x,y);l(x,y)=log2L(x,y)。

反射图像对应于图像的高频部分,照度图像对应于图像的低频部分。因此,求取照度图像L就是图像I与一个低通滤波器进行卷积的结果。在Retinex理论中,光照是分片平滑的,所以光照区域分得越准,区域内细节平滑得越充分,照度图像就会估计得越准确,反射图像也就越能反映图像的本质。因此,低通滤波器的选择对于Retinex算法至关重要。SSR算法是最经典的基于中心环绕的Retinex算法[8],它可以表示为

r(x,y)=i(x,y)-i(x,y)⊗G(x,y)

(3)

式中:⊗表示卷积符号;G表示高斯函数,

(4)

式中,σ为高斯函数的标准差,也是SSR的尺度参数。当σ较小时,阴暗部分的细节能够得到较好的增强,但颜色失真很严重;当σ较大时,颜色保真效果好,但动态压缩能力变差,细节模糊。因此在单尺度Retinex算法中,需要选取一个合适的σ[9],使得图像的细节得到增强的同时,图像的颜色失真程度低。

2 Vivado HLS实现单尺度Retinex算法

2.1 Retinex算法的尺度值的确定

为了确定Retinex算法的尺度值,对两组图像进行分析,图1为低照度图像,图2为正常光照下的雾天图像。选取了σ=3~100,间隔为3的不同尺度,使用OpenCV软件对不同尺度下的两组图像进行图像增强,比较图像增强效果。

从图1、2可以看出,图(a)为原始图像,图(b)的高斯滤波的σ=6,图像的细节部分增强效果较好,但是图像的颜色失真度比较高。图(c)的高斯滤波的σ=27,图像的细节部分增强效果较好,而且图像的颜色保真度相对来说也比较高。图(d)的高斯滤波的σ=81,图像的颜色保真度比较高,但是图像的局部细节部分增强效果差。

通过以上的比较可以看出,在σ=27时,图像的动态压缩能力和颜色保真程度之间达到平衡。因此,在本实验中,取Retinex算法的尺度为27。

2.2 实现单尺度Retinex算法需要的基本流程

单尺度Retinex算法的实现使用了FPGA厂商Xilinx公司2012年发布的高层次综合工具Vivado HLS,该工具突破了传统上对FPGA的设计都是基于硬件描述语言的RTL级描述[10],可以实现直接使用C、C++以及System C 语言规范对赛灵思全可编程器件进行编程,无需手动创建RTL,从而可加速IP创建。另外,HLS包含大多数开源函数库OpenCV图像处理函数,设计者可以轻松实现OpenCV C++视频处理设计到RTL代码的转换,将其转换为可以在ZYNQ实现的硬件加速器或者在FPGA上实现的实时硬件视频处理单元[11]。

在FPGA上实现单尺度Retinex算法需要的基本流程为[12]:

1)从摄像头中获取图像I(x,y),获取图像为彩色图像,图像每个像素的颜色分量为三通道8位的无符号整型,将图像中每个像素的分量分别转化为32位的浮点型,从而方便后续的对数处理。

2)计算高斯模板,对图像I(x,y)进行高斯滤波,得到图像L(x,y),高斯滤波模块的尺度σ=27。

3)将原图像和高斯滤波后的图像映射到对数域,得到i(x,y)和l(x,y);需要注意要将原图像I(x,y)中的每个像素值加1,再转换到对数域,防止当图像像素为0取对数出错。

4)根据式(2),计算得到r(x,y),即增强后的图像,由于图像是彩色图像,因此每个通道均有一个r(x,y)。

5)对增强后的图像进行灰度拉伸,增强对比度,其中局部的对比度增强法的具体方法如下。

计算整张图片的平均值m和方差s0;任取一个像素值g(x,y),计算以该点为中心的w邻域的平均灰度值M和方差s,按照公式(5)进行处理:

G(x,y)=M+c(k-1)[g(x,y)-M]

(5)

式中:k为比例系数,k=s0/s;c为修正系数,默认情况下c=1,若系数c(k-1)>0,则将大于局部平均灰度的像素值放大,小于局部平均灰度的像素值减小,从而增强图像的局部对比度。

2.3 高斯滤波器设计

在Retinex算法中,原始图像通过高斯滤波器得到图像的照射分量。因此高斯滤波在Retinex算法中十分重要。在此考虑对高斯滤波器进行设计,则可以大大降低算法的运行时间,满足实时处理的要求。笔者利用高斯滤波线性可分的特性,将二维高斯滤波器分解为一维行滤波器GaussFilter_H和一维列滤波器GaussFilter_V。先对图像进行横向滤波,然后再进行纵向滤波,如图3所示。

2.4 高斯滤波器数据流并行处理设计

在本模块设计中,主要对函数内部逐像素操作和函数任务层进行流水线处理。

2.4.1 函数内部流水线处理

由于滤波器需要对图像进行逐像素操作,因此首先对像素操作的for循环进行流水线化,目标初始间隔为1。

横向/纵向滤波器for循环流水线优化:

LOOP_HCVR:

for(HLS_SIZE_Ti=0; i

LOOP_HCVC:

for(HLS_SIZE_T j=0; j

#pragma HLS LOOP_FLATTEN off

#pragma HLS PIPELINE II=1

…… }

}

在高斯纵向滤波器RTL模块性能描述中,LOOP_VCVC循环的Pipelined显示为yes,表示该循环模块已经按照要求流水线化了,并且达到了初始间隔II=1的目标要求。

2.4.2 函数间流水线操作

高斯尺度空间建立模块并行化设计主要包含两个部分:高斯滤波器横向滤波与纵向滤波间的并行化设计和各层高斯滤波间的并行化设计。

通过调用#pragma HLS DATAFLOW指令来完成。高斯滤波模块的单幅图像处理时间延迟为373 931个时钟周期,远远小于高斯滤波模块内部各个子模块时钟延迟之和,因此各个子模块之间实现了流水线处理,达到了并行处理的目的。

3 图像增强视频系统设计

3.1 静态图像处理效果比较

为验证本文算法的可行性,验证弹载环境下图像的处理效果,选取多组低照度图像进行实验。由于传统的弹载平台是将采集图像通过无线链路传送到PC端进行处理,因此对比经过FPGA和PC处理后的图像,如图4、5所示。FPGA处理图像的硬件平台是Xilinx公司的Zedboard开发板,以XC7Z020-CLG400-1为核心处理器件。PC处理图像的平台是操作系统为Windows 8、CPU为2.7 GHz Intel酷睿i5,内存为8 G的PC机,运行环境为OpenCV 2410。SSR的参数σ=27。

从图4低照度图像和图5雾天图像的处理结果可以看出,在尺度参数σ=27的SSR算法中,用OpenCV处理后的效果要优于FPGA,主要体现在处理后的图像颜色保真度较高,原因是OpenCV具有较强的浮点计算能力,因此在计算整幅图像的均值、方差、映射到对数域等计算中基本没有偏差,处理后的图像颜色的保真度较高,比较接近真实图像。但是FPGA在进行浮点运算时需要消耗大量的资源,因此一般通过定点运算近似计算,在整幅图像的均值、方差、映射到对数域等计算中都有一定程度的偏差,处理后的图像颜色有一定程度的失真。但是OpenCV和FPGA处理后的图像细节基本一致,处理后的图像对比度都大大提升,因此FPGA处理后的图像能够达到效果。

3.2 静态图像处理时间和资源利用率比较

本设计采用的是100 MHz的时钟。输入不同分辨率的图片,将OpenCV和Vivado HLS进行SSR处理时间进行对比,对比结果如表1所示,表中时间均为连续处理10次之后的平均值。

表1 SSR算法处理时间对比

从计算时间上来看,处理同样的一幅1 920×1 080的彩色图像,在系统时钟为100 MHz的FPGA上运行用时大约比PC快了165倍;处理同样的一幅752×480的彩色图像,在FPGA上运行用时大约比PC快了154倍;处理同样的一幅512×512的彩色图像,在FPGA上运行用时大约比PC快了162倍。因此FPGA的处理速度远远高于PC机,这也是将SSR算法移植到FPGA的意义所在。

本系统摄像头采集图像的分辨率为752×480,在处理一幅752×480的三通道彩色图像时,增加HLS指令优化之后,除了DSP48E的利用率有一定程度的增加外,BRAM_18K、FF和LUT的资源利用率都有所下降,并且LUT的资源利用率从109%下降到75%,符合FPGA的资源利用率要求。

3.3 动态视频图像处理效果显示

基于单尺度Retinex图像增强的视频图像实时处理系统构架如图6所示[13]。采用CMOS图像传感器MT9V034采集视频图像大小为752×480的24位彩色图像。在Xilinx Zedboard开发板上进行实现,该开发板搭载XC7Z020芯片,扩展外设通过PMOD与摄像头连接。

将采集到的视频图像转化为AXI4-Stream类型传输到PL端(即FPGA),利用单尺度Retinex模块进行图像增强处理,将处理后视频图像通过VDMA模块传输到PS端(即ARM)的DDR3中进行存储,其中DDR3作为图像缓存使用,再将DDR3中的视频图像传输到PL端,选用ADV7511芯片将视频图像转化为适合HDMI输出的格式,并在显示器上显示出来。

利用摄像头采集图像,FPGA进行Retinex图像增强处理,处理后的图像显示到显示器上。处理前和处理后的图像如图7所示。

比较处理前后的画面,可以看出由于照度太低,图7(a)的书籍和图7(b)的窗户灰度值很低,细节部分也看不清楚。经过单尺度Retinex算法处理之后,图7(c)中图像的亮度增强,书籍上的文字的轮廓也变得清晰起来,图像颜色保真度也较高。图7(d)中图像的亮度也有很大程度的增强,可以看清楚窗框的轮廓,并且图像中的细节部分如窗户上映出的窗帘和窗户外的树的轮廓都凸显了出来。

计算增强后图像的峰值信噪比,利用公式求出图像像素的均方误差:

(6)

再利用公式求出处理后图像的信噪比:

(7)

通过计算求得第1幅处理后图像的信噪比为28.880 5,第2幅处理后图像的信噪比为28.899 1。因此该视频图像实时处理系统能满足图像增强的要求。

4 结束语

笔者构建的基于Xilinx FPGA的弹载电视成像系统,满足了FPGA的资源利用率要求和弹载电视成像系统对帧率的要求,实现了对SSR图像增强算法从PC软件处理平台向FPGA硬件处理平台的移植。经测试,由摄像机获取的视频流经过笔者设计的SSR图像增强视频系统,成功实时输出了752×480的视频流,经过处理后的视频图像整体的对比度和动态范围有所提升,细节部分得到了增强。

猜你喜欢
图像增强照度高斯
通过图像增强与改进Faster-RCNN网络的重叠鱼群尾数检测
一种基于轻量级深度网络的无参考光学遥感图像增强算法
图像增强技术在超跨声叶栅纹影试验中的应用
低照度环境对亲社会行为的影响:促进还是抑制*
数学王子高斯
天才数学家——高斯
基于非下采样剪切波变换与引导滤波结合的遥感图像增强
从自卑到自信 瑞恩·高斯林
游泳跳水馆场馆灯光照明系统的布局设计与照度测量