一. 视频稳像
视频去抖动,也叫视频稳像(Video Stabilization)。视频稳像系统的重点在于基于视频系列的运动估计,其中包括全局运动估计和局部运动估计。因此,根据运动估计的方法不同,视频稳像的算法也是不同的。
视频稳像的算法一般可以分为四大类:
1. 块匹配法:目前视频稳像系统中最常用的一种算法。该方法将当前帧分成块,块内的每个像素都具有同一运动矢量,然后对每一块都在参考帧的特定范围内搜索最佳匹配,从而估计出视频序列的全局运动矢量。
2. 投影法:一般是利用图像的灰度分布信息进行全局运动信息的估计。
3. 特征法:将一副图像分割为几个区域,在每个区域内选择一定数量的代表点进行匹配。
4. 光流法:依据时域空间图像亮度梯度来进行光流场的估计,它是在假设整个图像的灰度是连续变化的前提下进行的。
其中,投影法的效果是最差的。因为单纯的灰度分布不能很好的反映出运动量的变化。经过测试,发现基于光流法的方法是最好的。
二. 基于光流法的视频稳像
下面是计算光流法的视频去抖动算法的基本步骤:
1. 计算变换矩阵
a. Get previous to current frame transformation (dx, dy, da) for all frames
主要是利用cv2.goodFeaturesToTrack的good feature来计算这个偏移量。
b. Accumulate the transformations to get the image trajectory
c. Smooth out the trajectory using an averaging window
d. Generate new set of previous to current transform, such that the trajectory ends up being the same as the smoothed trajectory vector
2. 将变换矩阵应用在视频上
3. 一般的算法到这里就结束了。但是出现的视频是有黑边的。所以,要进行裁剪。
裁剪的测略就是要遍历一边处理后的视频,然后取所有帧的公共区域。公共区域做成一个mask,然后求这个mask的
最大内接矩形并且该矩形的宽和高要平行于视频的宽和高。
4. 将这个mask套在处理后的视频上。
三. 可比较的视频稳像算法来源
1. Joint Video Stitching and Stabilization from Moving Cameras
Heng Guo, Shuaicheng Liu, Tong He, Shuyuan Zhu, Bing Zeng, Moncef Gabbouj.
IEEE Transactions on Image Processing (TIP), vol. 25, no. 11, pp. 5491-5503, 2016.
2. Youtu的video stabilization。上传视频到youtube,然后调用其接口对视频进行稳像,然后下载下来。网上有讲解内部算法怎么做的。
https://www.youtube.com/watch?v=QdXugkXBTbc
3. Adobe的After effect的视频稳定化插件。
4. VirtualDub的deshaker filter。