一种复杂环境下的运动目标检测方法及FPGA 实现*
2020-12-23欧明敏
欧明敏,易 金,武 义
(福州大学,福建 福州 350108)
0 引言
运动目标检测[1]作为计算机视觉领域的重要研究方向,涉及图像处理、模式识别以及人工智能等学科。实时准确的检测到运动目标是关键,也是目标跟踪和识别的前提条件。运动目标检测广泛应用于安全监控、智能交通、人机交互以及视觉导航等领域[2-3]。目前,运动目标检测算法主要包括帧间差分法、背景差分法和光流法[4-5]。
基于视频图像的运动目标检测技术,国内外众多学者对其进行了大量研究。文献[6]中,王旭等人提出基于改进的视觉背景提取算法的运动目标检测方法,通过动态调整像素点在空间的传播速率以提高鬼影消除的速度,经过分析像素点的区域信息调整匹配阈值,在一定程度上克服了动态背景带来的干扰,但没有考虑到低照度等复杂环境下图像对比度差、噪声多的情况,且算法采用计算机实现运行效率低、实时性差。文献[7]中,Zhang C 等人分析了传统混合高斯模型背景差分法对慢速运动目标检测的局限性,考虑了目标的空间连续性,提出结合前景匹配机制和短期稳定性测度的方法。该方法能够在背景相对简单的环境中有效检测运动缓慢的目标,但检测精度受动态背景特别是光照的影响较大,在低照度等复杂环境下误检率高。
针对复杂环境下特别是低照度环境下视频图像呈现对比度低、噪声大以及层次感弱等难以有效检测其中的运动目标的问题,考虑到视频图像数据量大,对于复杂算法的处理难以保证其实时性,本文提出一种FPGA 实现的复杂环境下的目标检测方法。利用FPGA 可并行计算的特点,采用流水线技术对图像数据进行算法处理,实时性优势显著。该方法采用CLAHE 算法[8]对视频图像中的亮度分量进行处理,提高了图像的对比度,增强了层次感,同时有效降低了图像噪声。它采用改进的背景差分法提取运动目标并对背景构建模型,完成了背景的自适应更新。针对背景差分法中阈值选取不当易导致目标提取不完整的问题,本文对差分图像采用OTSU算法[9]确定最优阈值并应用于下一帧处理,从而有效区分了目标和背景,最后经过形态学处理得到了完整的运动目标。
1 检测算法原理
1.1 算法流程
首先,对采集的视频图像进行去噪处理,调整对比度以提高像素灰度值的动态范围。其次,提取运动目标,去除存在的噪声孤立点,并填充目标中的空洞。对现有图像增强和目标检测算法进行分析与研究,提出一种FPGA 实现的复杂环境下的目标检测方法。本文的运动目标检测流程如图1 所示。
图1 本文的运动目标检测方法流程
1.2 限制对比度直方图均衡
数字图像的直方图描述了整幅图像中不同灰度级的像素个数,体现的是灰度值在图像中的分布规律。在低照度环境下,基于直方图均衡算法[10]可以改善图像质量,增强对比度。CLAHE 算法在传统直方图均衡算法的基础上改进而来,克服了传统算法在对整幅图像进行对比度增强时导致的局部细节缺失问题,适用于低照度下的图像增强。
CLAHE 算法主要包含以下4 个步骤。
(1)图像子块划分。根据图像的分辨率,自适应划分为大小相等的图像子块。
(2)限制对比度直方图统计。首先设置一个合适的裁剪值,然后分别对图像子块进行直方图统计,比较子块中每一个灰度级的统计值与裁剪值,把超过裁剪值的部分平均分配至整个灰度区间上。
(3)灰度值映射。根据限制对比度直方图的统计结果,对每一个灰度级进行累积直方图统计,最终通过式(1)的映射函数得到映射后的灰度值。
式中,S(xj)为像素级k的像素个数;W和H分别为图像宽和高的像素个数;L为灰度级个数;Tk为灰度级xk经映射后的新灰度级。
(4)灰度值重构。若每一个子块中的像素其灰度值直接采用该子块的映射值,则整幅图像将会呈现块状效应,应采用线性插值运算解决这一问题。
1.3 目标检测
通过研究主要的运动目标检测算法发现,背景差分法克服了帧间差分法所提取的目标存在“空洞”的问题,可以完整地提取出运动目标。与光流法相比,背景差分法计算量小且实时性强,适合于FPGA 硬件实现。因此,本文采用背景差分法检测运动目标。
设I(x,y)和B(x,y)分别为视频的当前帧图像和背景帧图像,像素点(x,y)的差分结果为:
式中,T为阈值。若差分结果大于T,则该像素点判定为目标,否则判定为背景。
由于光照变化或某些干扰目标长时间停留于背景中,若不进行背景更新,那么之后的检测结果将不准确。因此,本文采用基于前景检测的背景更新策略自适应更新背景,即通过判断前景检测的结果自适应更新背景。背景更新模型为:
式中,Bk(x,y)为更新后的背景图像;Bk-1(x,y)为上一帧的背景图像;σ为更新速率系数,控制场景以一定的速率成为背景,值越大,目标融入背景的速度越快。
1.4 最大类间方差
背景差分法得到的差分图像通常含有目标和噪声信息。此时,阈值的选取至关重要。传统的阈值选取方式是根据经验确定的,阈值是固定不变的。当环境发生变化时,传统方式的分割效果不理想,抗干扰能力弱。
OTSU 算法是一种无参调控、自动寻优的图像分割方法,原理简单,计算高效,分割效果显著,在图像分割领域得到了广泛应用。因此,本文提出将OTSU 算法应用于阈值选取。首先将当前帧的差分图像进行OTSU 算法处理,得到使目标和噪声方差最大时的阈值,然后将该阈值应用于下一帧的背景差分法中。该方法可以根据环境的变化自适应确定阈值。
OTSU 算法的基本思路如下。设初始分割阈值为T,将图像分为目标和背景两部分。令图像像素点总数为N,其中属于目标的像素点个数为N0,平均灰度值为μ0;属于背景的像素点个数为N1,平均灰度值为μ1。这两部分像素占整幅图像的比例分别为η0和η1,计算公式如下:
总平均灰度值为:
目标与背景的方差为:
将式(5)带入式(6),得到方差的等价公式:
通过不断迭代计算,得到使目标和噪声方差取得最大时的阈值。
2 算法的FPGA 实现
本文以FPGA 作为核心处理器。目标检测方法的硬件结构如图2 所示,由6 个功能模块组成——灰度变换模块、中值滤波模块、CLAHE 算法模块、背景差分及更新模块、OTSU 算法模块和形态学处理模块组成。
图2 FPGA 目标检测方法硬件结构
2.1 中值滤波模块
图像传感器采集的图像难免存在噪声,降低了图像质量。中值滤波可以很好地滤除孤立的噪声,改善画质。本文采用5×5 矩阵窗口实现快速中值滤波,如图3 所示。首先对矩阵窗口的每一行进行排序得到最大值、中值和最小值;其次,对排序结果进行列排序,得到第一列中的最小值、第二列中的中值和第三列中的最大值;最后,对排序结果进行一次行排序,最终得到5×5 矩阵窗口的中值。
图3 快速中值滤波过程
2.2 CLAHE 算法模块
CLAHE 算法模块的FPGA 实现分为图像子块划分、限制对比度直方图统计以及灰度值映射与重构3 个部分。
2.2.1 图像子块划分
本文采集的图像分辨率为640×480,根据比值大小可将图像平均分为12 个子块,每块的大小为160×160。在视频行信号有效期间,通过对像素进行计数得到像素的横坐标。在场信号有效期间,对行信号进行计数得到像素的纵坐标。这样即可判断当前像素所属的图像子块,并将该子块的标志信号置高。
2.2.2 限制对比度直方图统计
以图像子块1 为例,限制对比度直方图统计采用如图4 所示的状态机实现,其他子块与之一致。
图4 限制对比度直方图统计状态机
当行信号有效时,状态机从IDLE 状态跳转至Hist_Statistics 状态,在此状态根据像素所在的图像子块进行直方图统计,并将统计结果以灰度值为地址存储于位宽为16、深度为8 的双口RAM(RAM1)中。当检测到场信号的下降沿时,状态机跳转至Threshold_Limit 状态,在该状态对直方图进行裁剪。遍历子块的整个灰度级,若某些灰度的直方图统计值高于设定的阈值,将超过的部分累加存储于GLOBAL 寄存器中。遍历完整个灰度级后,状态机转至Excess_Redistri 状态,在此状态下将GLOBAL寄存器中的数据平均分配至整个灰度级上,从而完成限制对比度直方图统计,同时状态机跳转至Clear_RAM2 转态,在此状态下清空RAM2 中的数据为存储累积直方图做准备。
在CDF_Statistics 状态中,需要完成累积直方图统计。本文采用一个双口RAM(RAM2)用于储存子块的累积直方图。首先,读取RAM1 中地址0 的数据并写入RAM2 中地址0 对应的数据存储空间;其次,将RAM2 地址加1,同时以新地址读取RAM1 中的数据并加上RAM2 中上一地址对应的数据,共同写入RAM2 中新地址对应的数据存储空间。以此类推,完成子块中整个灰度级的累积直方图统计,之后将状态机转至Clear_RAM1,并清空RAM1中的数据为下次直方图统计做准备。
2.2.3 灰度值映射与重构
在行场信号有效期间,根据当前像素所在的图像子块,从该子块的RAM2 中取出以当前灰度值为地址的数据即对应的累积直方图,后根据式(1)计算映射后的灰度值,并根据像素所在的位置执行不同的重构策略。如图5 所示,与图像子块划分类似,本文将像素所在的位置分为Corner、Edge 和Center 共3 个部分。其中,Corner 部分由4 个大小为80×80 的正方形组成;Edge 部分由2 个大小为480×80 和2 个大小为80×320 的矩形组成;Center部分由6 个大小均为160×160 的正方形组成。
图5 像素位置划分
(1)当像素位于Corner 部分时,以Co1区域为例,灰度重构值为子块1 的灰度映射值Tk(1),即:
(2)当像素位于Edge 部分时,以Ed1区域为例,灰度重构值的计算公式为:
式中,l1=y-3/2h,l2=H-1/2h-y。
(3)当像素位于Center 部分时,以Ce2区域为例,灰度重构值的计算公式如下:
2.2.4 目标检测模块
由于背景差分法需要缓存一帧背景图像,若使用外部DDR 存储,则可以减少FPGA 内部资源。但是,考虑到DDR 控制的复杂性和程序的可移植性,同时FPGA 内部RAM 资源充足,本文采用一个位宽为8、深度为307200 的双口RAM(RAM3)缓存背景图像。与灰度变换实现类似,背景更新也采用先放大后缩小的方法处理,以避免浮点数的计算。
针对背景差分法中阈值的选取,本文采用OTSU 算法自适应确定阈值。考虑到FPGA 具有优异的并行处理能力,本文在背景差分法中插入流水线结构进行OTSU 算法的处理。对于差分图像,在该图像的行场信号有效期间进行灰度直方图统计,并将统计结果分别存储于256 个位宽为16 的寄存器中。在差分图像的场信号消隐期间,对目标和噪声的类间方差进行迭代计算,找到使目标和噪声的类间方差取得最大时的阈值。为了加快阈值确定的速度,可以根据实际环境增大阈值的初始值和减小阈值的最大值。融合OTSU 算法和背景差分法的目标检测模块的实现结构,如图6 所示。
3 实验结果及分析
本实验选用Xilinx 公司的XC7A200T FPGA 芯片作为核心处理器,工作频率为200 MHz,图像传感器选用OmniVision 公司的OV5640 Sensor,HDMI编码芯片选用Silion 公司的SiT9134 chip,最高支持1080 P@60 Hz 视频输出。
图6 目标检测模块结构
为了验证在复杂环境下特别是低照度环境下本文提出的检测方法的有效性,在室外光线较暗的环境中做验证实验,实验结果如图7 所示。其中,图7(a)~图7(f)依次为原始背景帧、原始当前帧、经CLAHE 算法处理后的背景帧、经CLAHE 算法处理后的当前帧、未经CLAHE 算法处理检测到的运动目标和经CLAHE算法处理后检测到的运动目标。
图7 复杂环境下运动目标检测结果
从实验结果可知,在低照度等复杂环境下,图像噪声被放大,传统的背景差分法得到的差分图像中噪声与目标由于灰度值接近而无法根据固定阈值检测出完整的运动目标。本文提出的方法可以有效降低图像噪声,提高图像的对比度,扩大差分图像中目标与噪声的灰度差,能够根据环境的变化自适应确定背景差分法中的阈值。结果表明,在低照度等复杂环境下提取的运动目标轮廓完整清晰。
整个工程采用Verilog 硬件描述语言编写,在Vivado 2018.2 软件中完成综合、编译以及功能仿真,最后在本文所搭建的硬件平台上实现。FPGA 资源占用情况如表1 所示。
表1 FPGA 资源使用情况
可见,本文提出的运动目标检测方法硬件实现所消耗的资源总体较少,但其中的BRAM 资源占用较多,这是因为在设计背景差分模块时未采用外置的DDR3 而是使用双口RAM 缓存一帧背景图像。
4 结语
本文提出了一种基于FPGA 实现的复杂环境下的运动目标检测方法,充分利用FPGA 可并行处理能力,采用模块化思想,运用流水线技术进行硬件实现,同时在室外复杂环境下进行了实验。实验结果表明,提出的检测方法可以在复杂环境下有效检测出运动目标。