光流(optical flow)是运动物体运动带来的像素变化,表示 像素空间的运动速度,直观也可以理解为 光的流动。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。
光流是通过 像素在时域上的变化来计算的,通过相邻帧之间的相关性来找到上一帧跟当前帧之间的对应关系。
光流分为 稀疏光流 和 稠密光流。
• 稀疏光流
所谓 稀疏光流,是指 金字塔Lucas-Kanade 方法(简称 LK 方法),算法分为两步:
1. 通过 goodFeaturesToTrack() 来寻找角点,也就是稀疏的概念;
2. 针对获得的两组Corner角点,通过 calcOpticalFlowPyrLK() 来 进行跟踪 Match。
这一步是LK光流的关键,里面用到了复杂的多尺度特征(金字塔),此处不再展开,大家可以看OpenCV源码。
相对于稠密光流, 稀疏光流 只需要对关键点进行计算,计算量较小,经常被用于 图像配准 和目标跟踪。