APP下载

结合光流法和卡尔曼滤波的视频稳像算法*

2020-03-26王传胜李利荣曾春艳

计算机工程与科学 2020年3期
关键词:角点卡尔曼滤波补偿

熊 炜,王传胜,李利荣,刘 敏,曾春艳

(1.湖北工业大学电气与电子工程学院,湖北 武汉 430068; 2.美国南卡罗来纳大学计算机科学与工程系,南卡 哥伦比亚 29201)

1 引言

随着自媒体的发展,通过智能设备拍摄短视频已经成为人们记录生活的主流方式。虽然当今部分品牌手机内部嵌入防抖摄像功能,但是在手持移动设备拍摄视频的过程中,由于外在相关条件的影响,拍摄的视频依旧很不稳定。视频稳像技术的目的主要是消除或减少视频的抖动,以便生成稳定的视频[1],提高视频图像质量。

视频稳像算法通常分为2D[2,3]方法、2.5D[4]方法和3D[5]方法。3D方法常用于耗时的3D重建。2.5D方法适用于专业拍摄设备。2D方法由于处理速度快和较好的鲁棒性,常被用于解决视频稳像问题。

视频稳像方法一般包括3个部分:运动估计、运动平滑和运动补偿。近年来,国内外专家学者在该领域提出了不同的研究方法。2011年,Grundmann等人[2]提出L1优化处理平滑算法稳定抖动视频,算法主要基于线性编程框架,从而最小化摄像机路径的一阶、二阶和三阶导数;2013年,Liu等人[6]提出捆绑相机路径算法进行视频稳像,将视频划分为均匀网格,该算法采用基于网格的空间变量运动表示和自适应的时空路径对抖动视频进行优化;2014年,Liu等人[3]提出运动模型SteadyFlow来表示相邻视频帧之间的运动以进行稳定;2016年,Liu等人[7]提出一种新型的运动模型MeshFlow来实时稳定抖动视频;2018年,Nie等人[8]在视频拼接中考虑视频稳像,提出一种结合识别视频背景和捆绑相机路径的方法来拼接视频。随着计算机视觉、人工智能技术以及机器学习的发展,2018年,Xu等人[9]提出使用对抗网络来处理抖动视频;2019年,Wang等人[10]提出一种StabNet神经网络模型来处理抖动视频,但最终稳像效果并不理想;2019年,Yu等人[11]直接将帧的外观变化建模为连续帧的密集光流场,同时提出了一种新的优化方法,将非凸问题转化为卷积神经网络CNN(Convolutional Neural Networks)优化问题,它在每个特定的输入视频中从头开始训练卷积神经网络CNN,并且有意地过度拟合CNN参数,以在输入视频上产生最佳结果。

针对手持设备拍摄的视频抖动问题,本文提出一种结合金字塔光流法和卡尔曼滤波的视频稳像算法。结合文献[11]的思路,首先在预稳定阶段,通过光流法跟踪视频帧的最小特征值特征点,由此求解出每个视频帧的2D仿射变换矩阵,并将其作用于下一步输入视频的帧,从而将最终生成的裁剪视频作为预稳定阶段的输出。然后对预稳定视频帧进行Shi-Tomasi角点检测[12],并对角点进行LK(Lucas-Kanade)角点跟踪;随后利用RANSAC(RANdom SAmple Consensus)算法[13]估计全局运动;再使用卡尔曼滤波器对得到的运动参数进行滤波,以达到平滑的目的;最后由原始相机路径与平滑路径的关系进行运动补偿,从而得到稳定视频。本文算法流程如图1所示。

Figure 1 Flow chart of the algorithm in this paper图1 本文算法流程

2 预稳定

(1)

其中,H表示预稳定处理后的单应性变换矩阵。

求解得到的Ht用于下一步输入视频的帧,并且作为预稳定输出的结果。其中光流法跟踪效果如图2所示。

3 全局运动估计

全局运动估计主要分为以下3步:首先选取预稳定视频第1帧作为基准,进行相邻帧间处理,进行Shi-Tomasi角点检测;然后再利用LK跟踪算法对相邻帧间的角点进行跟踪;最后根据RANSAC算法估计相邻帧间的仿射变换矩阵,由此计算得出原始相机路径。

3.1 Shi-Tomasi角点检测

角点也称极值点,是指像素变化较快的拐角位置或直线相交处。Shi-Tomasi角点检测是对Harris角点检测的改进,是一种局部特征检测方法,主要思想是通过改变移动窗口计算出窗口内灰度值的变化。令E(x,y)表示视频图像在坐标(x,y)处的灰度值,窗口移动(Δx,Δy)引起的灰度值变化如式(2)所示:

(2)

为了得到角点位置,只需要求得E(Δx,Δy)的极大值即可。对式(2)进行泰勒展开并舍去高阶项,可得式(3):

(3)

其中,M用式(4)表示:

(4)

其中,Ix和Iy分别表示x和y方向上的梯度值,⊗代表张量积运算。设λ1和λ2为M的2个特征值,且给定一个阈值λ,如果某像素点满足min(λ1,λ2)>λ,则存在Shi-Tomasi特征点;反之,则不存在特征点。Shi-Tomasi角点检测结果如图3所示,本文算法设置检测100个角点。

Figure 3 Shi-Tomasi corner detection result图3 Shi-Tomasi角点检测结果

3.2 LK角点跟踪

检测到Shi-Tomasi角点后,需要对其进行跟踪。LK跟踪算法也称KLT(Kanade-Lucas-Tomasi)跟踪算法,是常用的角点跟踪算法,也是一种以待跟踪窗口相邻帧间的灰度平方和SSD(Sum of Squard Differences)作为度量的匹配算法。

假设一个包含特征纹理信息的特征窗口W,设t时刻对应的视频帧用I(x,y,t)表示,t+τ时刻对应的视频帧用I(x,y,t+τ)表示,其对应的位置满足式(5):

I(x,y,t+τ)=I(x-Δx,y-Δy,t)

(5)

其中,Δx和Δy为特征点X(x,y)的偏移量。而在I(x,y,t+τ)中的每个像素点都可以根据I(x,y,t)中相对应的像素点平移d(Δx,Δy)求得。

假设相邻帧I和J,为了找到能够使SSD(用ε表示)最小化的d。定义ε为:

(6)

其中,W是特征窗口,ω(X)是权重系数。

为了得到最佳匹配点,对J(X+d)进行泰勒展开,且去掉最高次项,仅保留前2项,而g是泰勒展开式的一阶泰勒系数,gx和gy分别为x和y方向上的一阶泰勒系数。对式(6)进行求导并化简得:

(7)

再对式(7)进行牛顿迭代,由此找到最佳匹配。最终解如式(8)所示。

(8)

其中,dk表示第k次迭代计算得到的d值,其初始值d0=0。

3.3 运动估计

相邻帧间的复杂变换主要表现在相似变换、刚性变换和仿射变换等。本文采用仿射变换作为相邻帧间的全局运动,利用RANSAC算法估计出帧间的仿射变换矩阵。其数学模型可表示为:

(9)

抖动视频产生的原因在于视频内容运动与相机主运动方向不一致。RANSAC算法可将与相机主运动方向不一致的角点或者特征点剔除,这些点会使得视频帧运动模型的求解结果出现偏差。

假设视频帧I与J是相邻的2帧图像,运动参数求解用式(10)表示:

(10)

其中,(x,y)为视频帧I的中心像素点,Tx为水平方向平移值,Ty为垂直方向平移值,X′表示初始水平方向偏移量,Y′表示初始垂直方向偏移量。仿射变换包含6个自由度,且包含刚性变换、相似变换等。

根据预稳定视频跟踪到的角点,利用RANSAC算法估计出相邻帧间的仿射变换矩阵。求解得到预稳定视频的第t帧到第t+1帧的单应性变换矩阵Ht,由此可计算出原始相机路径Ct,如式(11)所示:

Ct=Ct-1Ht,t=1,2,…,N

(11)

其中,N为视频总帧数。

4 运动平滑及补偿

4.1 卡尔曼滤波平滑相机路径

运动平滑主要是为了去除原始相机路径的抖动,使得路径变得平滑。运动平滑通常可以通过高斯滤波器、卡尔曼滤波器或者曲线拟合等方式来完成。本文主要通过卡尔曼滤波器对上一步原始相机路径进行平滑处理。

卡尔曼滤波[14]利用递推估计,从运动矢量中提取有意义的运动矢量,可由视频前一帧的估计值预测当前时刻值。利用卡尔曼滤波对运动路径做优化的预测模型可用式(12)表示:

(12)

其中,X(t|t-1)表示第t帧对应状态量预测的结果,X(t-1|t-1)表示第t-1帧对应状态量的最优估计值,P(t|t-1)表示第t帧对应的状态协方差,F表示系统转移矩阵,Q表示预测噪声的方差。

卡尔曼滤波器的更新模型用式(13)表示:

(13)

其中,M(t)表示第t帧的卡尔曼增益,HG表示观测矩阵,I表示单位矩阵,R表示测量噪声的协方差,P(t|t)表示滤波后的协方差。

预稳定后的视频依然存在抖动部分,使用卡尔曼滤波对得到的运动参数进行滤波,滤波后的运动参数反映出原始路径的运动变化。

原始路径与滤波后的路径对比如图4所示,由图4可知,在水平方向和垂直方向上均得到良好的平滑效果。

Figure 4 Comparison of original path and filter path图4 原始路径与滤波路径对比

4.2 运动补偿

通过卡尔曼滤波器对原始相机路径Ct进行平滑处理,处理后的平滑相机路径为Pt。求得平滑路径后,再逐一对视频帧进行补偿,假设补偿矩阵为Bt,它们之间的关系可以用式(14)表示:

Pt=CtBt

(14)

根据式(14)可以计算出相邻帧间的补偿矩阵Bt,如式(15)所示。

(15)

计算出每一帧的补偿矩阵后,可利用其对原始路径进行几何变换。

5 实验结果与分析

本文采用相邻帧间的PSNR(Peak Signal to Noise Ratio)[15]、SSIM(Structural Similarity Index)[16]均值及相应的标准差,以及Zhang等人[17]提出的稳像视频平均曲率作为客观质量评价指标;同时考虑各算法的运动估计时间复杂度,即运动估计阶段单帧处理时间。其中,PSNR值越大、SSIM值越接近1、视频曲率越小,表明最终视频稳定性越好,且单帧处理时间越短越有利于实时处理。

为了显示本文算法的稳定效果,选择最近几年性能较好的稳像算法进行比较,它们分别是Grundmann等人[2]提出的L1算法、Liu等人[7]提出的MeshFlow方法以及Snchez[18]提出的参数模型算法。同时选择6大类视频进行实验,分别为Regular类、Crowd类、Parallax类、Zooming类、Quick Rotation类和Running类。其中,每一类选取10个视频进行实验,总共60个视频。6大类视频均来自文献[6]提供的公开数据集,且视频分辨率均为640×360。

为了客观评价各算法性能,实验在同一硬件和软件环境下进行。实验所使用的CPU为AMD Ryzen5 2600 Six-Core Processor,GPU为NVIDIA RTX 2070,运行系统为Ubuntu16.04。表1所示为实验对比结果。

Table 1 Experimental comparison results表1 实验对比结果

通过表1可以看出,针对实验中所选取的6大类视频,稳像后的视频PSNR值与原视频PSNR值相比均有提高,由此说明视频帧间的灰度差变小,视频序列较为稳定。6大类原始视频帧间的平均PSNR值约为19.241 dB,本文算法视频帧间的平均PSNR值约为25.602 dB,稳像后的视频PSNR值平均提升6.361 dB。MeshFlow平均PSNR值约为23.609 dB,本文算法与其对比约提升1.933 dB。通过视频帧间的结构相似性(SSIM)均值可以发现,本文算法有效地提高了视频帧间的结构相似性,稳像后视频比原视频SSIM值大约提升了40%,相比MeshFlow约提升9.2%。原始视频平均曲率约为1.348,稳像后的视频平均曲率约为1.265,相比约提升了8.3%。由于参数模型算法在网页(http://www.ipol.im/pub/art/2017/209/)上生成,因此无法记录该算法的视频稳像处理时间。

图5为稳像前后视频对比图像,其中图5a为原始视频帧,图5b为稳像视频帧。通过对比发现,视频帧间出现不同的视角变化,这是因为对视频帧进行补偿时,变换后的视频帧出现黑边,而后对黑边进行裁剪。黑边问题也是视频稳像的一大难点,需要进一步深入研究。

Figure 5 Video contrast before and after video stabilization图5 稳像前后视频对比图像

6 结束语

本文提出了一种结合光流法和卡尔曼滤波的视频稳像算法。首先通过光流法预稳定抖动视频,对其生成的预稳定视频帧进行Shi-Tomasi角点检测,并采用LK算法跟踪角点,再利用RANSAC算法估计相邻帧间的仿射变换矩阵,由此计算得出原始相机路径,进一步通过卡尔曼滤波器优化得到平滑相机路径。最后由原始相机路径与平滑路径的关系,计算相邻帧间的补偿矩阵,再利用补偿矩阵对视频帧逐一进行几何变换,由此得到稳定的视频输出。实验结果表明,该算法在处理不同类型的抖动视频时均有较好的效果,其中稳像后的视频PSNR值相比原始视频PSNR值约提升6.361 dB,视频帧间的结构相似性(SSIM)大约提升了40%,平均曲率值约提升了8.3%。但是,本文算法依旧存有一些不足点,比如预稳定部分的引入,使得处理单帧的时间变长,由此很难实时处理视频,这需要后期进行更深入的研究。

猜你喜欢

角点卡尔曼滤波补偿
一种改进的Shi-Tomasi角点检测方法
基于深度强化学习与扩展卡尔曼滤波相结合的交通信号灯配时方法
多支撑区域模式化融合角点检测算法仿真
无功补偿电容器的应用
卡尔曼滤波在信号跟踪系统伺服控制中的应用设计
基于FAST角点检测算法上对Y型与X型角点的检测
基于递推更新卡尔曼滤波的磁偶极子目标跟踪
基于有色噪声的改进卡尔曼滤波方法
解读补偿心理
离婚时,能否要求家务补偿