杨 光,李 晶,吴钟建,陈咸志,代 俊,罗镇宝,曾 军,罗冠泰
(西南技术物理研究所,四川 成都610041)
责任编辑:时 雯
视频增强的首要目标是处理视频中的每场图像,使其比原始图像更适合于特定应用,比如目标识别、跟踪等[1]。在图像制导应用中,雾霾等恶劣天气引起图像质量严重退化,形成低对比度的目标图像,导致目标跟踪不稳定,致使制导武器偏离目标。图像实时增强技术作为提高图像质量的手段,对其研究具有重大的工程价值和现实意义。一般情况下,不同的增强算法的应用领域不尽相同,在图像光照反差较大场合,Retinex算法可发挥较好的作用,但是战场环境复杂多变,增强算法不能局限于某种特殊的场合,因此目标跟踪对增强算法的鲁棒性提出更高要求[2]。一些基于物理模型的图像恢复算法增强效果通常可以满足跟踪需求,但是算法的实时性往往不能达标,甚至存在某些场的处理时间高于单场周期的现象,对目标跟踪性能造成恶劣影响[3]。
基于局部直方图均衡的对比度增强方法具有自适应好、鲁棒性强等特点,广泛应用于图像增强领域。Tom等人于1982年提出的自适应直方图均衡算法[4](Adaptive Histogram Equalization,AHE),根据图像局部特征计算灰度变换函数,克服了全局直方图均衡难以适应局部灰度分布的缺陷,对比度增强效果较好,但过高的时间复杂度使其难以应用于实时增强场合;针对AHE算法执行时间较长问题,Zimmerman等人于提出子块非重叠自适应直方图均衡算法(Non-Overlapped Sub-Block Adaptive Histogram Equalization,NSAHE),可以有效降低AHE算法的时间复杂度,但各子块灰度分布不均匀导致产生方块效应,对目标识别造成很大干扰[5];针对于NSAHE算法的块效应以及AHE算法的局部可能出现过增强问题,Zuiderveld等人于1994年提出限制对比度自适应图像增强算法(Contrast Limited Adaptive Histogram Equalization,CLAHE),将图像划分为非重叠子块处理,大大降低了算法时间复杂度,通过对比度限制手段有效避免图像过度增强,保证图像局部具有较高的动态范围[6]。CLAHE算法首先将子块直方图中大于截断门限值的像素重新分散到其他灰度级上,然后计算子块直方图查找表,最后通过双线性插值完成整幅图像的像素映射、加权处理。CLAHE算法具有计算简单、易于并行的特点,结合FPGA并行处理优势,本文利用视频相邻两场直方图的高度相似性特点,采用直方图边计算边查找的处理方式,简化CLAHE算法架构,降低逻辑设计复杂度,并在FPGA视频图像处理平台上硬件实现,提高跟踪系统整体的实时性和稳定性。
CLAHE算法起初仅用于医学图像处理,随后发现该算法可以很大程度提高低对比度图像的结构层次,也可以配合其他手段广泛应用于图像去雾领域。
AHE算法中的过增强问题可通过限制各子块增强程度来解决,这些子块的直方图中通常拥有多个尖峰,即有很多像素存在于单一灰度级上。CLAHE算法设置子块直方图单一灰度级拥有像素个数的上限,将超出上限的像素均匀分配到其他灰度级上面,降低直方图映射函数的斜率,限制对比度增强程度,解决AHE算法的过增强问题[6]。
CLAHE算法将图像分为非重叠子块处理,这种分块方式会导致子块边界区域灰度分布不均匀,在视觉上表现为方块效应,一般采用低通平滑方法消除方块效应,CLAHE采用双线性插值平滑策略,以每个子块的中心像素作为参考点,处理除参考点意外剩余像素,解决灰度间断问题,获得较为平滑的图像效果。
CLAHE算法是一种典型的局部直方图均衡算法,步骤如下:
1)图像分块。图像划分为尺寸相同的非重叠子图像(子块),每个子图像含有M个像素。
2)直方图计算。子块直方图用Hi,j(k)表示,k表示像素灰度级,取值范围为[0,N-1],N为可能出现的灰度级数,对于8 bit灰度图像,N等于256;i,j分别表示图像分块后子图像的行数和列数。
3)门限值计算。式(1)用来计算子块直方图单个灰度级的截断门限值
式中:参数smax为最大斜率(累加直方图的最大斜率),它与对比度增强程度成正比;smax取值为1到4之间的整数;参数α称为截断系数,它的取值范围是[0,100]。当α=0时,β取得最小值M/N;当α=100时,β取得最大值smaxM/N,此时对比度拉伸效果最明显,超出门限的像素个数存入excess变量中。
4)像素重分配。使用β对每个子块的直方图Hi,j(k)进行削减,将削减下来的像素重新分配到子块直方图未饱和(即灰度级上像素个数小于截断门限)的灰度级中,直至将所有被削减的像素分配完毕,并用Fi,j(k)表示Hi,j(k)经重新分配处理后的结果。
5)直方图均衡。利用Fi,j(k)计算最终的直方图均衡映射,均衡结果用Ci,j(k)。
6)像素重构。根据Ci,j(k)得到各子块中心像素的灰度值,以它们为参考点,采用双线性插值策略计算图像中其余各点的灰度值,重构示意图如图1所示,图1b是图1a中第j-1行至第j行、第i-1列至第i列图像局部的放大,位于1象限的点p为待增强像素,根据p点和参考点位置关系确定权值,加权获得最终处理结果,见式(2)[7-8]
式中:Pold为增强前的像素;fi,j为子块直方图映射;Pnew为增强后的像素。
图1 CLAHE算法像素重构示意图
在深入理解CLAHE算法原理之后,采用D触发器阵列存储直方图查找表,方便数据读写操作,然而经过资源分析后,发现此方案不可行。为此需要一种切实可行的优化设计方案,在满足图像实时增强指标的基础上实现资源优化。本文选择片上的BRAM(Block RAM)资源替代D触发器阵列存储结构的优化方案,虽然此方案对RAM读写时序要求较高,但是可以节省更多的逻辑资源。
对于256×256×8 bit的灰度图像,CLAHE算法子块大小设置为64×64(共16个子块),截断门限为β,下文分析FPGA资源详细占用。
BRAM资源占用情况为:
统计RAM,根据截断门限β设置数据宽度,地址宽度等于输入图像位数。
查找RAM,数据宽度与地址宽度均等于输入图像位数。
综上所述,每个统计RAM占用资源为26(23等于512 bit,每个查找RAM占用资源为28(23等于2 kbit,统计RAM和查找RAM共计32个,需要32个M18K(M18K为V5系列FPGA可配置的最小容量BRAM单元)。
乘法器IP核中,权重计算需要4个乘法器、加权累加需要4个乘法器,乘法器IP核通过FPGA片上的DSP48E Slice配置,共需要8个DSP48E Slice,不占用额外的逻辑资源。
DCM(Digital Clock Manager):数字时钟管理器,提供数据处理时钟和RAM读写时钟。
本文采用统计存储模块和查找存储模块(简称统计RAM和查找RAM)双存储架构,采用直方图边统计边查找的工作模式,即场正程计算统计直方图同时执行像素增强,场逆程计算查找直方图同时执行RAM清零处理,形成流水处理方式,确保输入像素在两个数据时钟周期增强后输出。
如图2所示,整个系统分为4个模块:统计RAM、查找RAM、统计计算模块和双线性插值模块。单个像素流水处理时间为两个时钟周期,第一个时钟周期从查找RAM读取采样数据,第二时钟周期利用采样数据以双线性插值方式进行像素重构,同时读取下一个待重构像素的采样数据。
工作数据流如下:
第n场场正程期间,输入像素进入统计RAM和查找RAM,分别直方图统计计算和直方图查找数据采样,下一个时钟根据查找RAM的采样数据以双线性插值方式进行像素重构,同时读取下一个待重构像素的采样数据,单个像素流水处理时间为两个时钟周期;第n场场消隐期间,首先将查找RAM清零,统计计算模块根据统计存储模块生成查找直方图映射,然后将映射写到第n+1场的查找RAM,最后将统计RAM清零,等待第n+1场输入像素来临。
图2 系统框图
1)存储模块(统计RAM和查找RAM)
在场正程行有效期间,在RAM读写时钟(数据时钟二倍频)上升沿,以输入像素灰度值作为统计RAM的读写地址,读出统计RAM数据,在下一个时钟上升沿,如果读出数据小于第1章所述的截断门限,将读出的数据加一重新写入统计RAM中,如果读出数据等于截断门限,统计RAM内容保持不变,将超出的像素个数统计到第二章所述的excess变量中,等待统计计算模块进行像素重分配处理;与此同时,根据输入像素灰度值及行列计数(灰度值作为查找RAM度地址、行列计数使能相应的查找RAM进行采样),从查找RAM中读出映射灰度值,然后送入双线性插值模块处理。
在场消隐期间,首先将查找RAM清零,然后将excess变量中的超出门限的像素均匀分配到其余灰度级上,再进行直方图正规化处理,将结果写入查找RAM,最后将统计RAM清零,至此单场图像处理结束。
2)统计直方图计算模块
统计直方图计算架构如图3所示,该模块由像素重分配模块和直方图累加模块构成,模块内子块并行处理,互不影响,当所有子块的像素分配标志位拉高时,直方图累加模块开始工作。
图3 统计直方图计算模块框图
像素重分配模块:CLAHE算法在像素重分配以1为步长,这种分配方式会延长单场图像FPGA处理流水时间,为此提出一种新的像素分配策略,将excess变量与灰度级个数(对于8 bit灰度图像,拥有256个灰度级)作商,得到excess_avr变量,以excess_avr作为分配步长,将excess变量中的像素分配到统计RAM中,通过这样的思路可提高算法执行的效率,为其他模块处理提供一定的时间余量。
直方图累加模块:先读取统计RAM中数据进行累加,然后实施直方图映射正规化操作,避免将较大的数据写入查找RAM,需要减少查找RAM的数据宽度,防止占用过多的RAM资源(即将查找灰度值映射至[0,2n-1],其中n为图像位数),最后将正规化映射结果写入查找RAM。
3)双线性插值模块
双线性插值模块从查找RAM获取采样数据,模块涉及数据选取、权值计算、插值规则选择、加权乘累加多个操作,权重、乘累加运算中还涉及多位乘法操作,导致该模块无法在一个时钟周期内完成,为此调用乘法器IP核、设计二倍频(输入数据时钟频率的二倍)状态机(四个状态),将处理时间压缩在一个时钟以内,状态机说明如下:状态0表示读取采样像素,同时计算权值,将采样数据用状态机时钟延迟一拍,保证像素灰度值和权值的同步性;状态1~3表示根据像素点的位置(1角落、2边界、3内部),选取不同的插值规则加权累加,像素增强后进入下一级处理,状态机转换流程如图4所示。
图4 双线性插值模块状态机转换图
本文选用Intel Core4 Xeon CPU E5507,主频为2.27 GHz,内存为2.99 Gbyte的计算机,采用MATLAB 2007a、MOLDELSIM SE 6.5e和Xilinx开发软件ISE12.4,所选图像为256×256×8 bit灰度图像,FPGA平台输入视频为256×256×8 bit挂飞视频,帧频为50 f/s(帧/秒)。算法参数如下:CLAHE算法子块大小为64×64,截断门限设置为63。
硬件平台采用的FPGA芯片是Xilinx公司Virtex-5系列XC5VSX50T,其总逻辑单元Total logic slice为8 160个,Total Block RAM为4 752 kbit,可配置成264个MK18,132个MK36。
首先利用MATLAB软件将需要增强的图像写入文本文档,然后在仿真Testbench中利用readmem系统函数将图像读到输入像素缓存变量dat_mem中,再将像素按照数据时钟和行场时序送给增强模块,处理完成的像素返回给Testbench,在输出使能信号out_en处在高电平时,利用fdisplay系统函数将增强后的像素写入文本文档,最后在MATLAB软件上读入图像数据,观察增强效果。
如图5所示为图像第238行的实验波形,数据时钟是20 MHz的clk信号,第238行第一个像素灰度值datin为65,65作为读地址从查找RAM读出数据hist_acc_dato,再将hist_acc_dato送入双线性插值模块处理得到最后的增强结果dato等于39,整个图像增强过程流水时间为两个数据时钟周期,即100 ns,完全保证了图像增强的实时性。
图5 CLAHE算法MODELSIM仿真图(截图)
如图6所示,图6a和图6d分别以雾天都市和开发区图像作为测试图像,对比图6b和图6c、图6e和图6f以及表1中增强前后图像客观质量的评价数据,CLAHE算法MATLAB的串行实现和MODELSIM的并行实现获得了相同的增强效果,经过CLAHE增强算法处理,有效增强原图像的对比度和纹理,增强后的图像层次分明,显示了较好的增强效果,为跟踪器提供了较为清晰的图像。
在Xilinx的XC5VSX50T FPGA平台上,采用雾天采集的实时航拍视频验证CLAHE算法增强的实时性和可靠性。对比图7中的增强效果,增强前图像近处画面模糊不清,图像远处画面缺乏层次,丢失很多细节,通过CLAHE算法增强处理后,图像细节得到凸显,整体画面非常清晰,具有真实自然的视觉效果,保证图像增强实时性的基础上获得良好的增强效果。
图6 CLAHE算法增强效果
表1 增强前后图像质量客观评价对比
图7 CLAHE算法FPGA实现增强效果图
本文以逻辑资源和BRAM资源较少的FPGA作为硬件平台,以CLAHE算法为基础实现视频实时增强。结果表明,该方案对于对雾天不同退化程度的低照度实时视频,能有效增强其对比度和局部细节,在亮度、对比度和细节方面都能取得较好的视觉效果。
基于局部直方图均衡的图像增强FPGA实现方案具有自适应好、鲁棒性强等优点,因此该方法具有一定的通用性。利用视频相邻两场的直方图高度相似性特点,将CLAHE算法成功移植到FPGA硬件平台,整场图像增强处理流水时间仅为100 ns(两个数据时钟),为后续处理提供了充足的时间,提高了整个跟踪系统的实时性和稳定性。
[1]GONZALES R,WOODS R.Digital image processing[M].2nd ed.Beijing:Publishing House of Electronic Industry,2007:59-84.
[2]李建彬,韩军,邱君华.基于Retinex的旧视频序列增强算法[J].电视技术,2011,35(5):21-24.
[3]TAN R.Visibility in bad weather from a single image[C]//Proc.IEEE Conference on Computer Vision and Pattern Recognition.Washington,DC:IEEE Computer Society,2008:2347-2354.
[4]TOM V,WOLFE G.Adaptive histogram equalization and its applications[C]//Proc.SPIE Application on Digital Image Processing IV.San Diego:SPIE Press,1982:204-209.
[5]ZIMMERMAN J,PIZER S.An evaluation of the effectiveness of adaptive histogram equalization for contrast enhancement[J].IEEE Trans.Medical Imaging,1988,7(4):304-312.
[6]ZUIDERVELD K.Contrast limited adaptive histogram equalization.graphics gems IV(Eds.)[M].MA:Academic Press,1994.
[7]周卫星,廖欢.基于高频强调滤波和CLAHE的雾天图像增强算法[J].电视技术,2010,34(7):38-40.
[8]KOKUFUTA K,MARUYAMA T.Real-time processing of contrast limited adaptive histogram equalization on FPGA[C]//Proc.International Conference on Field Programmable and Applications.Milano:IEEE Press,2010:155-158.