一、概念:
利用软件或硬件的方法使存在抖动的视频变得稳定。从成本和效果两者综合方面分析,软件方法较有优势,接下来本文主要讨论软件的方法。
二、分类
视频稳像利用软件方式进行稳像处理主要分为3种方式:二维稳像方法,三维稳像方法,介于二维和三维之间的方法(2.5维稳像方法)。
三、基本步骤
视频稳像主要分为三步:1.全局运动估计;2.运动平滑;3.运动补偿。
四、要点
1)全局运动估计是要利用背景追踪的方法对相机运动进行估计。其中涉及到的要点有:1.前景的去除;2.参考帧的选取;3.累积错误;4.单向运动估计的弊病(可以利用双向运动估计来估计两种方向的运动)。
2)运动平滑主要是对估计的抖动轨迹进行平滑处理。其中涉及的要点有:1.自定义平滑路径;2.平滑路径对优化后视频的影响(丢失像素以及局部扭曲或整体崩溃)。
3)运动补偿是利用平滑的轨迹对原视频进行反向补偿。其中涉及的要点有:1.弥补丢失的像素;2.对模糊的图片进行清晰化处理等。
从功能上看,运动平滑与运动补偿是有很大关联的。因此,在做运动平滑时,在时间轨迹平滑基础上会加入许多空间约束来约束矫正后的视频留有较好的空间结构。
五、二维稳像方法
目前,二维稳像主要是利用二维平面旋转,平移,缩放这三个参数来解决特定的图像序列。主要用到的运动估计方法有surf,sift,投影变换,块匹配,光流追踪等,结合RANSAC(改进方法)等来估计特定运动轨迹(不要将所有运动用一类参数来代替)。主要用到的平滑方法有低通滤波法(高斯,三角函数法,kalman),曲线法(贝塞尔曲线,二次曲线)等。
代表性代码:
L1稳像:https://github.com/ishit/L1Stabilizer
六、三维稳像方法
三维方法分为利用三维变换来进行稳像和利用整个帧的光流进行稳像。
代表性代码:
待续
七、介于二维和三维之间的方法详述
此方法主要是利用特征轨迹来稳像,用于平衡稳像质量和速度。
代表性代码有:
bundle稳像:https://github.com/SuTanTank/BundledCameraPathVideoStabilization
subspace稳像: https://github.com/higerra/SubspaceStab
卷积摄像机拍摄的视频处理:https://github.com/alexgo1/Video-Stabilization
如果在计算时没有好的工具,可以尝试 cvx 工具