一种高分辨率图像的实时光流计算方案
2021-09-27冯云迪王学渊邹传云
冯云迪,王学渊,邹传云
(1.西南科技大学 信息工程学院,绵阳 621000;2.特殊环境机器人技术四川省重点实验室,绵阳 621000)
0 引言
在视频测量(Video measurement)中,通常利用像素位移的结果来提取场景中对象的运动特征[1]。光流是描述视频序列中连续两帧之间像素相对位移的矢量场,光流法是估计该矢量场的方法[2],因此可以通过光流法获得对象的运动特征。目前光流法已应用于目标识别(在文献[3]中,根据像素的运动流对像素分类,将诸如汽车之类的刚体与人进行区分)、获得运动目标掩模[4]等领域。此外,光流法在风洞试验模型表面的全局摩阻测量[5]中也是必不可少的。
目前为了提高HS光流法[6]的实时性,研究人员一方面对算法进行改进[7,8],另一方面利用硬件平台对其加速[9~12],但对于高分辨率图像均难以达到实时光流计算的效果。HS光流法采用二维卷积计算像素点各方向的梯度值,通过计算整帧图像所有像素点获得光流场会面临以下问题:1)二维卷积操作存在数据的重复读取与计算,浪费大量时间;2)每次的光流计算会包含受光照变化影响而产生虚假更改的像素点,徒增无关计算量。
为此,提出了一种高分辨率图像的实时光流计算方案:1)基于动态灰度阈值的图像序列处理策略,对连续两帧图像之间改变的像素灰度值,设定自适应的阈值,剔除掉受光照变化影响的像素点,进而提升算法的计算效率;2)增量更新的数值求导方法,减少重复计算,节约梯度计算阶段的时间开销;3)基于GPU的图像并行存储检索结构与共享内存优化策略,减少数据传输耗时,提高数据访问速度。
1 HS光流法理论分析
根据文献[6]中的讨论,可知HS光流法通过以下方式获得光流:
基于HS光流法的计算可以分为4个阶段:图像预处理阶段P1、梯度计算阶段P2(Ix、Iy、It)、平滑过程P3以及迭代计算阶段P4(如式(1)、式(2)所示)。其中梯度计算阶段P2使用卷积操作获取图像的一阶梯度,其计算公式如下:
式中列索引i对应于图像中的y方向,行索引j对应于图像中的x方向,而k沿时间t方向,索引示意图如图1所示。
图1 索引示意图
另一方面,P3中用于计算u和v的拉普拉斯算子的公式如下:
2 本文方法
为了实现对高分辨率图像的实时光流计算,本文提出的加速方案分为三个部分:1)通过剔除受光照影响产生虚假更改的像素点,减少无关计算量的动态灰度阈值策略;2)减少重复计算的增量更新的数值求导方法;3)减少数据传输耗时,提高数据访问速度的图像数据并行检索结构和共享内存优化策略。
2.1 动态灰度阈值策略
在真实场景中,通常只有部分像素在帧与帧之间是真实变化,另外一部分像素会因不可避免的光照变化产生虚假更改。如果仅处理真实变化的像素,则可以减少许多计算。因此,本文提出在HS光流算法中引入一个自适应参数:动态灰度阈值T。T作为判断像素点是否进行光流计算的依据,如果连续两帧之间对应像素点的灰度值更改大于或等于T,则对其进行解算;否则不执行任何操作。T会随着每组图像进行自适应改变。
在进行光流计算的过程中,若T=0,则会处理所有像素点。通过增大T可以减少待处理的像素点,减少算法运行时间。但T过高,又会导致光流计算结果不准确,抹去真实的场景变化。因此如何设置合适的T,在剔除虚假更改的同时不影响目标区域解算结果显得尤为重要。文献[13,14]中的阈值算法对图像内容或环境依赖性作出了不同假设,导致普适性较差。为此,提出利用图像的灰度平均值来设置T。如果亮度恒定,连续两帧图像的灰度平均值相等,但当光照变化时,连续两帧图像之间的灰度均值会不同,这种由光照变化引起的差异便可以用来设置T。通过对整张图像进行灰度平均获取,其计算公式如式(8)所示:
式中n×m表示图像的大小,I表示灰度值,i和j是像素坐标(i,j=1K,2K,3K…,K=1,2,3,…N)。
动态灰度阈值T通过计算连续两帧图像的灰度均值之差的绝对值得到,如式(9)所示:
2.2 增量更新的数值求导方法
在梯度计算阶段(P2),单帧图像上各像素点的计算过程其实质为二维卷积操作,此操作存在重复计算,增加了不必要的时间开销。为此,提出增量更新的数值求导方法,将二维卷积分解为两个一维卷积,避免重复计算,加快求导速度。
若待求像素点坐标为(i,j),灰度值为I(i,j)。利用式(3)求解其Ix,在单帧图像上的计算过程为I(i,j+1)-I(i,j)+I(i+1,j+1)-I(i+1,j),会计算一次I(i,j+1)-I(i+1,j),如图2中虚线框所示;当待求点为(i+1,j),会重复计算一次I(i+1,j+1)-I(i+1,j);当待求像素点位于其它坐标时,以此类推。
图2 Ix计算示意图
因此,将求解Ix的二维卷积分为两个部分:1)按照y方向对每一行的像素点依次进行一维水平卷积I(i,j+1)-I(i,j),卷积结果替换原坐标上的灰度值;2)待水平卷积结束后再按照x方向对每一列的像素点依次进行一维垂直卷积I(i+1,j)-I(i,j),最终卷积结果与原二维卷积结果相同。
同理,利用式(4)计算像素点的Iy,重复部分如图3中虚线框所示。因此,将求解Iy的二维卷积分为两个部分:1)按照x方向对每一列的像素点依次进行一维垂直卷积I(i+1,j)-I(i,j),卷积结果替换原坐标上的灰度值;2)待垂直卷积结束后再按照y方向对每一行的像素点依次进行一维水平卷积I(i,j+1)-I(i,j),最终卷积结果与原二维卷积结果相同。由于It的卷积模板系数均为1,所以根据Ix或Iy分解方式进行计算均可。
图3 Iy计算示意图
若图像大小为M×N,按照原二维卷积的方式进行一阶求导,计算次数为M×N×3,而将二维卷积用两个一维卷积替代之后,在得到相同结果的条件下,计算次数为M×N×2。可以看出,转换之后计算量减少,能有效减少梯度计算阶段(P2)的时间开销。
2.3 光流法的并行加速及优化
为了提高光流计算过程在GPU上的并行能力,设计图像并行检索结构减少数据传输耗时,同时利用共享内存提高数据访问速度,以达到实时光流计算的效果。
2.3.1 基于GPU的图像数据并行存储检索结构
图像数据并行存储检索结构的作用是减少数据传输耗时,提高实时性,其结构如图4所示。
图4 图像数据并行存储检索结构
图5 光流解算流水并行结构
图4中原始图像数据缓存块Host为上位机内存,灰度数据缓存Dev为GPU内存。送往图像预处理模块的原始图像数据以及送往光流解算模块的灰度数据均采用乒乓操作完成,以此为基础利用了多条CUDA(Compute Unified Device Architecture)流进行并行光流计算(CUDAStream_0表示第一条CUDA流),也由此形成了整个解算过程的流水并行。
分析表1可得:1)每个序列的图像分辨率相同,而原HS光流法计算所有像素点,所以它处理不同实验环境但分辨率相同的图像序列时间开销相同;2)基于动态灰度阈值的光流法由于实验环境的不同导致剔除受光照影响的像素点数量不同,进而不同实验环境下处理单组图像的时间开销略有差异;3)基于动态灰度阈值的光流法计算效率较原HS光流法效率平均提升122.81%。
表1 单组图像的光流计算耗时
该实验表明:在风速和吹风角度不同的风洞环境中,动态灰度阈值策略均能有效剔除因受光照变化影响而产生虚假更改的像素点,提升HS光流法的计算效率。
3.2 增量更新的数值求导实验
在上位机进行增量更新的数值求导实验,求导计算的时间开销仅与像素点数量有关。本实验通过对一图像序列(分辨率:1106×1984,2000组)进行3次空间降采样,新增3种分辨率的图像序列,如表2所示。不同分辨率下传统数值求导方法与增量更新数值求导方法的单组图像处理平均耗时如下:
表2 不同分辨率下的效率提升
分析表2可得:对于不同分辨率的图像,增量更新的数值求导方法较传统方法效率提升分别为:16.41%、17.60%、17.82%、18.57%。该实验表明:增量更新的数值求导方法较传统方法效率提升明显,其效率随图像分辨率增加而提高。
3.3 光流并行计算实验
本节实验方法:1)在GPU和上位机(CPU)实现的光流算法结合了小节2.1动态灰度阈值策略与小节2.2增量更新的数值求导方法;2)在GPU实现的算法会采用小节2.3中的图像数据并行存储检索结构与共享内存优化策略;
图12(a)为采集图像实时显示。为了能可视化对比GPU与CPU的光流计算结果,利用它们的结果绘制了流线图与云图,并叠加显示。显示效果如图12(b)、图12(c)所示,其中流线箭头方向指明实验中目标运动方向,越亮的区域表示速度越大。
图12 图像的实时显示及其光流计算结果
章节1将整个光流解算过程分为了4个阶段。CPU重算与GPU实时计算的不同阶段时间开销如表3所示,相机帧率为80fps,分辨率为1728×2352。
表3 算法不同阶段的时间开销(单组图像)
分析图12可得:GPU实时解算结果与CPU重算结果一致。AAE(Average Angular Error)[15]用于判断结果的准确性,它越小说明CPU与GPU的结果越接近。经统计,GPU的计算结果相对于CPU的计算结果,其AAE为0,说明GPU的计算精度与CPU一样。
分析表3可得,对于分辨率为1728×2352的图像:1)利用共享内存的平滑过程(P3)加速效果最好;2)迭代计算阶段(P4)的加速效果不明显的原因是由于其计算复杂度高且反复访问内存;3)基于实时光流计算方案的光流法处理单组图像平均耗时12.43781ms。
该实验表明:对分辨率为1728×2352的图像,本文提出的实时光流计算方案实时处理速度达到80帧/秒。
4 结语
本文通过动态灰度阈值策略剔除受光照影响的像素点,缩减了光流计算的数据量;利用增量更新的数值求导方法减少了梯度计算阶段的时间开销;使用图像并行存储检索结构以及共享内存优化策略,减少了数据传输耗时,提高了数据访问速度。风洞实验表明:动态灰度阈值策略能有效剔除因受光照变化影响而产生虚假更改的像素点,提升HS光流法的计算效率。增量更新的数值求导实验表明:增量更新的数值求导较传统求导效率提升分别为16.41%、17.60%、17.82%以及18.57%,效率随着图像分辨率增加而提高。光流并行计算实验表明:该方案可实现高分辨率图像的实时光流计算,对于分辨率为1728×2352的图像,处理速度达到80帧/秒。此外,随着视频测量中图像分辨率的提高,提出的实时光流计算方案在目标识别等领域具有广泛的应用价值。