运动估计
skvideo.motion是支持块运动估计(block motion estimation)和补偿的模块。
块运动
要估计一个块的运动场,可以直接使用skvideo.motion.blockMotion
import skvideo.io
import skvideo.motion
import skvideo.datasets
videodata = skvideo.io.vread(skvideo.datasets.bigbuckbunny())
motion = skvideo.motion.blockMotion(videodata)
print(videodata.shape)
print(motion.shape)
输出为:
(132, 720, 1280, 3)
(131, 90, 160, 2)
默认情况下skvideo.motion.blockMotion使用8x8的宏块和菱形搜索算法。
块运动补偿
使用skvideo.motion.blockComp来根据计算好的快运动向量来进行运动补偿。
import skvideo.io
import skvideo.motion
import skvideo.datasets
# compute vectors from bigbuckbunny
videodata = skvideo.io.vread(skvideo.datasets.bigbuckbunny())
motion = skvideo.motion.blockMotion(videodata)
# compensate the video
compmotion = skvideo.motion.blockComp(videodata, motion)
下面就是bigbuckbunny的补偿帧
全局运动估计
通常来说估计全局运动向量不是简单的求块运动向量的平均值。很多已经设计出来的全局向量估计技术可以稳健的应对前景对象移动和噪声。函数skvideo.motion.globalEdgeMotion使用基于边的技术计算全局向量。还可以在参数中选择使用Hausdorff或Hamming距离。