引 言
光流法是实现运动目标跟踪的一种有效方法,光流法的优势在于没有图像背景的历史信息情况下,可以对独立运动目标进行跟踪,而且在动态背景情况下同样适用。但光流法易受噪声影响,而且运算量大,因此在硬件实现上,存在着计算精度和系统资源占用之间的矛盾。FPGA是一种资源配置灵活,不限制流水线级数,可实现全并行处理的一种器件,非常适合作为视频运动目标跟踪系统的硬件平台[ 1,2 ]。本文采用LK(Lucas-Kanade)算法在FPGA平台上实现光流场的计算,提出了三维高斯平滑滤波方法,改善图像噪声抑制效果,改进了传统3D导数计算方法,采用非高斯匹配导数滤波器,提高了光流场的计算精度。硬件方面,在FPGA平台上设计了超级流水线结构和四端口图像缓存单元,实现了对30帧/s速度下640×480分辨率视频的实时运动目标跟踪。
1 LK算法优化
LK算法是一种计算光流场的差分方法,也就是计算图像在空间和时间坐标上的偏导数。假设I(x,y,t)为(x,y)点在t时刻的灰度值,像素点的对应速度为 v =[vx,vy],为满足光流约束方程,需使下式最小[ 3 ]:


根据LK算法公式,光流场的计算包括三个步骤:一是图像预处理,即通过高斯平滑滤波来降低图像噪声,并使相邻像素之间产生较高的相关性;二是3D导数计算,即通过合适的核(滤波模板)进行3D导数滤波,计算3D导数;三是计算最小二乘矩阵,得到各个像素点在x轴和y轴的速度分量。
(1)图像预处理算法优化
传统的图像预处理一般是对图像进行二维高斯平滑滤波,但是视频是一系列时间上连续的图像,各个像素点之间除了空间关系外还存在时间上的关联性。因此,本文提出在传统二维高斯滤波基础上增加时间轴滤波,构成了三维高斯滤波。根据高斯滤波模板的旋转对称性,这种扩展是可行的。以宽度为5的高斯滤波模板[ 1, 4, 6, 4, 1 ]/16为例,为了减少计算量,首先对连续5帧图像进行一维时间轴滤波,得到一帧图像,再进行传统二维5×5空间滤波。
图 1(a)为使用5×5二维高斯滤波模板的滤波效果,作为对比图 1(b)为使用5×5×5三维高斯滤波模板的滤波效果,可看出后者的模糊效果明显好于前者。三维高斯滤波有效地降低了噪声,提高了相邻像素之间的相关性。
![]() | 图 1 图像滤波效果 Fig. 1 The effect of image filter |
(2)3D导数算法优化
3D导数的计算关系到光流场的计算精度,3D导数就是通过导数滤波器分别计算图像在x轴、y轴和t轴的导数 I x、 I y和 I t。传统图像求导方法比较简单,即导数核直接与图像进行卷积,例如可使用导数核[-1 1],分别在求导方向上与图像进行卷积。这种对图像求导的传统方法导致光流场计算结果不准确,图 2(a)是这种方法下光流场的计算效果,可以看出速度的方向错误率较高,另外像素点速度大小也出现了较多的错误。
为改善光流计算精度,本文提出将Sobel算子思想应用到3D导数计算中。Sobel算子垂直卷积核[ 4 ]表达式为

另外滤波模板并没有选择高斯模板,而是采用了Simoncelli提出的非高斯匹配滤波模板[ 5 ],其中:
导数滤波核 [-0.109 604,-0.276 691,0,0.276 691,0.109 604]
平滑滤波核 [0.037 659,0.249 153,0.426 375,0.249 153,0.037 659]
图 2(b)是经过优化的非高斯匹配3D滤波下光流场的计算结果,与传统方法相比,光流场速度大小的精确度和速度方向的一致性得到了明显改善。
![]() | 图 2 光流场计算结果 Fig. 2 The results of optical flow |
FPGA不限制流水线级数,可实现全并行计算,非常适合做高速实时视频处理。在FPGA平台(DE2)上实现LK算法的视频实时处理的关键在于流水线结构的合理设计,LK算法流水线结构如图 3所示。
![]() | 图 3 LK算法流水线结构框图 Fig. 3 The pipelined architecture of LK algorithm |
FPGA平台上,LK算法分为五个步骤:
(1)三维高斯平滑滤波,摄像头输出的视频图像中经常伴有噪声,经过前面仿真可知,采用三维高斯滤波能起到良好的滤波效果,经试验采用3×3×3高斯模板即可满足后续计算光流场的精度要求。
(2)时间FIR滤波,3D导数计算中有两个步骤需要进行时间轴FIR滤波:一是计算时间轴导数 I t,二是计算空间导数 I x和 I y时,需要在时间轴进行平滑滤波。将这两个步骤结合起来,可一步完成,降低了FPGA资源占用率。
(3)空间FIR滤波,同样分为两种情况:一是计算 I t时在xy平面上进行平滑滤波,二是计算导数 I x和 I y。
(4)最小二乘矩阵,用于计算光流速度公式中的 I x· I x、 I y· I y、 I x· I y、 I x· I t和 I y· I t。
(5)浮点运算单元,通过上述结果求得光流场。
整体上LK算法的流水线结构分为五级,每级流水线内部也包含了优化的子流水线结构,图中标出了各级中包含的子流水线数量。图像在时间轴方向的滤波需要帧间处理,因此采用SDRAM作为图像缓存。步骤(1)中时间轴的平滑滤波与步骤(2)中时间轴FIR滤波结构相同,只是滤波核不同。由于时间轴滤波后图像数据量大大减少,仅一帧数据,因此在这两个步骤中均采用了先时间后空间的滤波顺序。
3 时间滤波算法的实现
根据实际测试选用3×3×3高斯平滑滤波模板完全可满足后续计算的精度要求,为实现3帧图像之间的运算,需要对3帧图像进行缓存并同时读取。为此编写一个四端口RAM来完成图像在时间轴的滤波算法,如图 4为其实现框图。
![]() | 图 4 四端口RAM实现框图 Fig. 4 The realization diagram of four-port RAM unit |
四端口RAM实际是将SDRAM存储器划分为3个Bank,每个Bank缓存一帧图像,并配合内存管理单元MMU实现的。MMU与SDRAM之间是以100 MHz的速度逐帧顺序写入图像的,而MMU与时间轴滤波模块间通过4个慢速的25 MHz端口连接,其中1个端口是图像写入,3个端口是图像读取。相对于100 MHz的带宽来说,这四个慢速端口恰好可以同时完成写入和读取,满足了时间轴滤波模块同时读取连续3帧视频图像的要求。
根据LK算法总体流水线结构,三维高斯平滑滤波和时间FIR滤波中均用到了图像的时间轴运算,这两种运算的结构相同,并且根据图像数据的特点,仅占用8位位宽。而SDRAM的数据总线为16位位宽,因此为了提高资源利用率,将SDRAM的高8位分配给三维高斯平滑滤波,低8位分配给时间FIR滤波,在FPGA逻辑单元和SDRAM空间占用不变的情况下,同时完成这两步运算。
4 速度矢量计算结构优化
通过最小二乘矩阵和浮点数运算单元可计算得到速度矢量。根据式(2)和式(3)构造最小二乘矩阵,即利用导数 I x、 I y和 I t,计算∑ W 2 I 2x、∑ W 2 I 2y、∑ W 2 I x I y、∑ W 2 I x I t和∑ W 2 I y I t。窗函数 W 的选择有两种方式,一是采用具有旋转对称性的高斯核[0.062 5,0.25,0.375,0.25,0.062 5][ 6 ],二是采用最简单的平均值滤波方式[ 7 ]。方式二计算过程简单,实验证明光流计算精确度仅次于方式一,但这种方式需要用到除法运算,因此占用FPGA资源较多。而方式一经过优化,可完全避免乘除法运算。
采用方式一设计最小二乘矩阵实现框图如图 5所示。将高斯核定点化为[ 1, 4, 6, 4, 1 ]/16,这个加权计算需要3次乘法、4次加法和1次除法运算。乘除法运算量较大,但是当乘数或除数为2的N次方时,可用移位操作来代替乘除法运算,从而大幅度降低FPGA资源占用率。定点化高斯核中只有乘6运算不满足2的N次方,将乘6运算拆分成两级流水线乘2、乘4和一次加法运算。经过上述优化,最小二乘矩阵的构造仅需要加法运算和移位操作,大大降低了FPGA 资源占用率,提高了光流场的计算速度。
![]() | 图 5 最小二乘矩阵实现框图 Fig. 5 The realization diagram of least-square matrices |
将最小二乘矩阵结果带入式(1)可计算得到最终的光流场速度。式(1)中包含矩阵求逆运算,计算量大,为避免中间结果溢出必须采用浮点数运算。浮点数运算单元结构如图 6所示,首先将上一步计算结果通过int to float模块全部转化为浮点数,然后进行浮点数基本数学运算,最后再将结果通过float to int模块转化为定点数。除流水线结构需自行设计外,所有的浮点数运算都使用Quartus II软件提供的IP核来完成。
![]() | 图 6 FPGA浮点计算单元框图 Fig. 6 FPGA floating point calculation unit block diagram |
5 系统测试效果
根据上述优化方法在FPGA平台上实现了基于LK算法的实时光流计算。在30帧/s的速度下,本系统可对640×480分辨率的视频进行实时处理,实现了对单个运动目标进行实时跟踪的目的。高阈值下实际测试的效果图见图 7(a);当速度阈值降低时,如图 7(b)所示,目标跟踪的灵敏度得到了提高,但物体的轮廓明显变粗,可通过腐蚀和膨胀等图像处理算法来得到清晰的目标轮廓,也可进一步运算得到物体的形心,实现对目标的轨迹进行跟踪。
![]() | 图 7 实际测试效果图 Fig. 7 The actual test rendering |
6 结 论
通过在图像预处理阶段增加时间轴滤波和在3D导数计算阶段增加匹配滤波,并使用优化的匹配滤波参数,提高了LK算法的计算精度。在视频的仿真中可明显看出,经过这些优化,光流场的精度得到了提高,方向一致性良好。在FPGA硬件平台上,通过对流水线结构进行充分的优化,并设计了四端口RAM进行图像缓存,实现了对30帧/s下640×480分辨率的视频实时处理,对运动目标实现了高速精确的视频跟踪。由于SDRAM仍有很大剩余空间,FPGA也未使用于最高频率,因此,在更换高速、高分辨率摄像头的情况下,该系统的性能还可进一步提升。
| [1] | 陈浙泊,林 斌.动态图像处理系统的设计与研究[J].光学仪器,2003,25(6):34-38. |
| [2] | 候宏录,高伟平.500 fps图像采集及实时显示关键技术研究[J].光学仪器,2013,35(2):52-57. |
| [3] | 刘松林,牛照东,陈曾平,等.基于加权Lucas-Kanade算法的目标跟踪[J].光学工程,2011,38(8):67-72. |
| [4] | 靳鹏飞.一种改进的Sobel图像边缘检测算法[J].应用光学,2008,29(4):625-628. |
| [5] | SIMONCELLI E P.Design of multi-dimensional derivative filters[C]//Proceedings of the IEEE International Conference on Image Processing,Austin,1994,1:791-793. |
| [6] | 潘金山,苏志勋,王 伟.运动细节估计的光流场方法[J].计算机辅助设计与图形学学报,2011,23(8):1433-1441. |
| [7] | 夏毓鹏,王 昕,胡 锋.光流场算法中优化图像梯度数据可信度方法[J].计算机工程与应用,2010,46(4):163-165. |
2014, Vol. 36
Issue (3): 208-212,218








