马鸿悦 张海悦
中国电影科学技术研究所(中央宣传部电影技术质量检测所),北京 100086
年代久远的电影胶片难免会出现齿孔收缩的现象,导致在银幕上放映时产生画面的抖动问题,因此影片去抖动是修复老旧影片时经常会面对的一个关键问题[1]。目前,原版电影的数字修复是大势所趋,如何高效地实现影片自动化去抖动成为亟待解决的问题。
数字视频稳像 (Digital Video Stabilization)技术的目的为消除或减少视频的抖动,自动获取视频抖动信息并补偿,生成稳定的视频[2]。
目前数字视频稳像技术的常见处理流程如图1所示,主要包含三个步骤,即运动估计、运动平滑和补偿以及图像修补[3]。首先根据前后帧的图像,对当前输入视频帧的抖动进行运动估计,得到当前帧的全局运动信息;然后对运动估计的结果进行处理和拟合,对抖动进行抑制,从而得到更接近真实场景的运动估计路径,并根据处理后的运动模型计算补偿分量,对抖动视频进行运动补偿;补偿的视频帧图像会经过不同程度的平移、缩放、旋转等变换操作,在图像边缘可能会产生空白的边缘,需在最后通过剪切或填补的方式对图像进行调整,合成得到最终视频输出结果。
一般的视频稳像技术普遍针对的是手持摄像机、手机,或者如无人机、机器人等运动设备拍摄的情况,而对于老旧影片的修复,其应用需求和实际操作步骤略有不同。
影片修复中的抖动问题主要表现为幅度较轻且没有规律性,一般以随机的上下跳动和左右抖动为主[4]。因此,在影片自动去抖动修复中,重点是要采用合适的运动估计方法找到“抖动”的画面,修正其位置。相对于解决手持设备拍摄所产生的连续性的或幅度较大的运动视频抖动问题,影片去抖动通常不需要使用太复杂的运动平滑和补偿方法,并且如果贸然使用错误的运动平滑可能反而造成失真、扭曲等不良结果。影片修复的图像修补环节一般是对画面运动补偿处理后产生的空白边缘进行填补,在该环节主要通过参考前后帧画面利用修补 (Inpaint)等方法进行剪切填补,但可能存在较多的运动物体,有时需要结合手动方式进行精准修复。
因此,针对影片自动修复应用场景,本文将重点对运动估计环节的方案选择、实际效果和计算效率做进一步分析研究。
运动估计是稳像流程中最重要的步骤,其估计结果会直接影响最终稳像结果。运动估计的思路一般是先估计视频帧局部的运动向量,再经汇总校正后计算得到全局运动向量[5]。局部运动的估计方法可分为两类,即基于像素点的方法和基于特征点的方法。局部运动向量的汇总校正包括错误估计向量剔除等操作。
基于像素点的运动估计方法是一种直接方法[6],其原理一般相对简单且实现方便,典型算法包括块匹配法[7]和光流法[8]。
(1)块匹配法
块匹配法思路是将视频帧分块,然后在附近帧寻找当前帧中特定块的位置,从而获得当前块运动估计向量,综合所有匹配块的运动向量即可构成整个视频帧的运动向量。但是这种方法在两种场景下无法有效地进行运动估计[9]:一是场景中有快速运动的物体;二是场景简单、变化较少。
(2)光流法
光流指空间运动物体在观察成像平面上的像素运动的瞬时速度。光流法是利用视频中的像素在时间域上的变化以及相邻帧之间的相关性得到运动信息的方法。一般适用于亮度相对稳定、运动不剧烈的视频。
这一类运动估计算法较为简单直接,其适用条件一般较为苛刻,目前在视频稳像领域无法得到广泛应用。
在运动估计方面,特征点方法要比像素点方法计算速度更快[10],应用也更加广泛。特征点即为易于在不同帧图像之间进行准确高效定位追踪的点,一般分为角点 (Corner)和斑点 (Blob)两种。角点是极值点,例如角落或线条交叉等;斑点指比周围更亮或更暗的区域。
特征点检测的基本目的是把高维的图像数据进行简化,通过交叉对比特征点的位置,获得运动信息[11],由于一个特征点可能在视频连续多个帧内出现,因此特征点方法往往可以更好地获得全局运动估计[12]。目前常见的稳像领域的特征点算法有SIFT(Scale-Invariant Feature Transform )[13]、SURF(Speeded Up Robust Features)[14]、FAST (Features from Accelerated Segment Test)[15]、BRIEF (Binary Robust Independent Elementary Features)[16]、BRISK(Binary Robust Invariant Scalable Keypoints)[17]、ORB(Oriented FAST and Rotated BRIEF)[18]、KAZE[19]、AKAZE (Accelerated-KAZE)[20]等。
基于特征点的算法众多,近年来也有不少人对各种方法进行了不同程度的分析整理和比较。Amisha等人[12]对SIFT、SURF、FAST、BRIEF和ORB算法进行了分析,并总结了各自的优缺点;Chien等人[21]对SIFT、SURF、ORB 和AKAZE算法,利用KITTI数据集进行了实验对比,结果表示SURF和SIFT 算法的准确度较高,而ORB算法的计算速度最快,新兴的AKAZE 算法则在准确性和计算效率上取得了一定的平衡;Tareen 等人[22]对 SIFT、SURF、KAZE、AKAZE、ORB 和BRISK 算法利用两组图像数据集进行了分析对比,得到了相似的结论,即SIFT 算法的准确度最高,ORB和BRISK 算法的速度最快。
综合以上文章的研究结论,在运动估计步骤中:建议在追求速度和实时性时,可重点考虑围绕ORB或FAST算法进行改进;面对视频抖动较大的情况,需重点关注准确性时,可考虑利用SIFT或SURF算法;考虑速度和准确性的折衷,可选择KAZE或AKAZE算法。
由于视频内物体的运动等原因,无论是基于像素点的方法,还是基于特征点的方法,都面临着错误检测的问题,从而影响运动轨迹的估计结果。对于这一难点,目前有两种方式进行处理。
(1)帧间分析
这种错误值剔除方式的思路是,由于受到运动物体影响的检测结果与实际需要判定的全局检测结果不一致,故可将那些少数运动轨迹与其他检测点不同的点进行剔除,以大多数检测点的运动轨迹作为最终估计结果。目前较为常用的是RANSAC (Random Sample Consensus)算法[23],其利用不断迭代的方式获取最优的数学模型,完成对特征点进行筛选,去除噪点,得到最终特征点检测结果,从而计算得到运动估计结果。不过,当多数检测点的运动估计结果不符合某一帧的估计时,此种方法可能会失效。
(2)视频流分析
除了利用附近帧信息对错误值进行剔除,还可以利用较长的视频流信息完成检测点的筛选与处理,不过这一方法需要检测点在较长的视频中出现。一般运动的物体会较为快速地离开画面,那么在视频流中轨迹较短的检测点就可以认为其不适合标记全局运动,予以剔除[24]。此外较短的轨迹也可能对应的是错误的检测点,通过对比轨迹长短,也可将部分错误的检测点剔除。
综合上文介绍的多种方法的特性和优缺点,针对影片抖动问题修复准确率优先和效率优先两种应用情况,分别选择最匹配的运动估计方法,并进行实验分析。
方案一针对于抖动程度较大,追求准确度的情况:使用SURF 算法进行特征点的检测,结合MSAC (M-estimator SAmple Consensus)算法[25]对错误匹配的特征点进行剔除。
SURF算法是一种斑点检测方法,其在SIFT算法的基础上,对抗干扰性和速度进行了优化,具有尺度和旋转不变性,准确度较高。算法的主要步骤是:首先构建黑塞矩阵 (Hessian Matrix)形成兴趣点,构建尺度空间,并用盒式滤波器代替SIFT算法中的高斯滤波器,加快计算速度;然后统计特征点领域内的哈尔小波 (Haar Wavelet)特征,得到各特征点主方向;在特征点周围取一个正方形框,统计框中每个16个子区域内,25个像素的哈尔小波特征,产生64维向量的特征描述子;最后根据特征描述子的欧氏距离确定特征点匹配结果。
MSAC算法是一种传统RANSAC算法的变形,其对阈值的选取更加不敏感,可以稳定有效地剔除错误匹配结果。
方案二针对于修复速度要求较高、追求实时性的情况:使用FAST 算法进行特征点的检测,并利用FREAK (Fast Retina Keypoint)算法[26]对检测得到的特征点进行描述和匹配,最后结合MSAC算法对图像中错误匹配的特征点进行剔除。
FAST 算法是一种角点检测方法,虽然不具备尺度不变性,但是与方案一中的SURF 算法相比速度更快。FAST 算法的主要思路是:考察某一点周围16个相邻像素点,如果有连续的12 (或9)个像素点与中心点的灰度差的绝对值大于某一给定阈值,则该点被检测为FAST 特征点。
FREAK 算法是一种特征提取算法,其采用接近于人眼视网膜接收图像信息的采样模型,生成从模糊信息到细节信息的512bit的二进制描述子,同样可根据描述子的欧氏距离确定特征点匹配结果。
为给出更直观的老旧影片去抖动结果,利用两种方案分别对旧胶片电影视频片段进行修复去抖动。这段去抖动实验视频片段是追逐场景,画面背景建筑和右下角车辆维持不动,但画面中间存在多辆快速来往的车辆,同时画面的左下角也有人物快速运动。
图2和图3分别给出了两种方案检测的特征点并将前后两帧图像进行匹配,其中前后两帧图像重叠,分别以蓝、红通道进行显示,并用红色圆圈和绿色箭头分别标记前后两帧图像检测出的特征点,以黄色线连接两帧匹配的特征点。从图2 (a)可以看出,方案一采用的SURF 算法有效地检测出了图像中的特征点。但如图2 (c)所示,可以看到有一些特征点位于运动物体上,且受到运动物体的影响,出现了明显的错误匹配现象。此外如图2 (d)所示,在静止的背景建筑中也存在正确全局运动路径。从图3 (a)中可以看到,方案二采用的FAST 算法同样检测到了多个特征点,与方案一相似,但数量明显较少,同样也存在运动物体上的错误检测匹配现象。但是经MSAC 算法剔除错误值后,从图2(b)和图3 (b)中都可以看到,最终仅保留了背景环境中的特征点及其匹配结果,画面中间运动车辆和左下角运动人物上的特征点被剔除,得到了正确的运动估计结果。
图2 方案一特征点检测匹配结果
图3 方案二特征点检测匹配结果
图4和图5分别给出了利用两种方案对连续两帧图像去抖动处理后的效果,为方便比较,将前后两帧图像叠加并分别用蓝、红通道进行展示。从图4 (c)和图5(c)可以明显看出,原始图像存在左右抖动,电线杆部分红蓝差别较大,不重合。而经两种方案处理后的图像,如图4 (d)和图5 (d)所示,红蓝部分重合,达到了较好的去抖动效果。实验结果证明本文提出的两种方案都可以有效地规避运动物体的影响,去除了全局画面抖动,具有一定的可行性。
图4 方案一去抖动效果对比
图5 方案二去抖动效果对比
从两部旧电影中选取画面复杂度不同、运动物体数量不同、运动程度不同的7个视频片段,分别用两种方案进行去抖动修复,并记录修复时间和修复效果。7个视频片段具体情况如表1所示,其中画面复杂度一定程度上可以影响特征点检出个数,而运动程度可以影响错误值剔除效果。7个视频片段平均图像如图6所示。
表1 实验视频片段详情
图6 实验视频片段平均图像
两种方案的去抖动修复时间和修复效果记录如表2所示。其中平均特征点数指在实验视频片段中,平均每帧图像检测出并经错误值剔除后的有效特征点数量。
从表2中可以看出,方案一的SURF算法要比方案二的FAST 算法能检测出更多有效特征点,这使得方案一最终去抖动的效果更好,但是速度更慢;而方案二利用较少的特征点依然可以实现较好的去抖动效果,且速度更快,其用时只有方案一的一半左右。实验证明了本文提出的两种方案可满足其对应的应用需求,具有一定的有效性。
表2 有效性实验结果比较
在实验过程中发现两种方案对部分视频片段进行去抖动处理时失效,失效的两个实验视频片段平均图像如图7所示。在图7 (a)月亮视频片段中,只有画面中央的月亮在不断放大,周围云彩部分保持不动;在图7 (b)骑车视频片段中,画面中下部的人物几乎没有运动,位置相对固定,但背景的房屋等在迅速移动。
图7 失效实验视频片段平均图像
图8为月亮片段的特征点筛选后结果和去抖动后视频的平均图像,可以看到经过筛选后错误保留了不断缩放月亮上的特征点,将其局部运动路径当作了全局的运动路径,导致最终结果维持了月亮不动,无法实现去抖动效果。
图8 月亮片段错误值剔除失效和最终效果
图9为骑车片段的特征点筛选后结果和去抖动后视频的平均图像,可以看到经过筛选后错误保留了运动背景建筑上的特征点,将运动物体的路径当作了全局运动路径,导致无法实现去抖动效果。
图9 骑车片段错误值剔除失效和最终效果
可以看到两段视频具有相似之处,就是只有部分画面中的物体在运动,但运动物体的画面复杂度较高,如2.3节中所述,这就使得算法容易在运动物体上也识别出大量特征点,在错误值剔除环节时,无法有效地仅保留静止物体上的特征点,最终导致运动估计失败,无法去除抖动。
针对以上问题,本文利用两种手段进行处理和解决。由于静止物体会固定在画面的某一位置,故可以限制特征点检测范围,使之只检测静止物体所在的画面部分。图10图像帧与图8 (a)相同,将一矩形覆盖画面中央,使得缩放的月亮部分排除在特征点检测范围之外,可以看到特征点集中于相对全局画面静止的四周云彩上,从而可得到正确的运动估计结果,实现对月亮视频的去抖动处理。
图10 限制特征点检测范围处理后的特征点
第二种思路是,由于一般情况下,全局运动的运动程度较轻,画面中运动物体的运动程度较高,故可以按照运动程度进行错误值剔除,仅保留运动程度较轻的特征点。图11图像帧与图9 (a)相同,但在应用此方法后,可以看到筛选后的特征点集中于相对全局画面静止的骑车人手部,从而可得到正确的运动估计结果,实现对骑车视频的去抖动处理。
图11 限制运动程度处理后的特征点
本文从影片自动去抖动修复的角度出发,首先对数字视频稳像技术的流程和影片去抖动修复的应用需求进行了介绍和分析,阐述了运动估计方法在影片去抖动修复环节中的重要性;然后分别从局部运动估计和错误值剔除两个方面分析介绍了多种应用于运动估计的算法;重点针对影片修复的应用需求,根据不同使用需求和算法特点,给出了两种建议的运动估计方法选择方案;最后利用多个胶片电影片段对提出的方案进行实验验证,结果表明本文给出的两个选择方案均可以有效地得到抖动视频的正确运动估计结果,达到了影片自动去抖动的预期效果。
本文提出的运动估计方案仍存在一定改进空间。例如当画面中大部分为运动物体,且背景较为单一时,如人脸特写镜头,检测出的特征点将集中在运动物体上,在静止的背景中无法检测出足够的特征点,从而导致去抖动失效,未来将考虑结合基于像素点的方法进行改进。此外,对于具有运镜的视频片段,本文方案会将运镜也一并稳像处理,无法实现理想的效果,未来将考虑通过运动连续一致性进行判定以实现进一步优化。❖