光流 LK 金字塔

文章转载自:https://blog.csdn.net/sgfmby1994/article/details/68489944
光流是图像亮度的运动信息描述,这种运动模式指的是由一个观察者(比如摄像头),在一个视角下,一个物体、表面、边缘和背景之间形成的明显移动。评估两幅图像的变形。 光流计算基于物体移动的光学特性提出了2个假设: 1)运动物体在很短的时间内灰度保持不变 2)给定邻域内速度向量场变化是缓慢的
这就是基本的光流约束方程,但是基本的光流约束方程的约束只有一个,而需要求出xy方向的速度uv(两个未知变量)。一个方程两个未知量无法求解,因此LK光流算法考虑到像素点的邻域,将问题变成计算某些点集的光流,联立多个方程,解决该问题。 Lk-光流算法的假设: 1)亮度恒定,图像场景中的目标的像素在帧间运动时外观保持不变。用于得到光流法的基本方程。 2)时间连续或者运动是小运动,图像随时间的运动比较缓慢,实际中指的是时间变化相对图像中的运动的比例要足够小,这样灰度才能对位置求偏导(小运动情况下才能用前后帧之间单位位置变化引起的灰度变化去对位置求偏导数),这也是光流不可或缺的假设 3)邻域内光流一致。一个场景中的同意表面的局部内具有相识的运动,在图像平面上的投影也在邻近区域,且邻近点的速度一致(认为邻域内所有像素的运动是一致的)。如果第三条假设满足意味着可以联立n个基本的光流方程求取xy方向的速度。 LK光流法是一种稀疏光流法。它假设光流在像素点内的局部邻域是一个常数 , 然后使用最小二乘法对邻域中的所有像素点求解基本的光流方程。从而计算两帧在时间间隔内每个像素点位置的移动。
上面提到LK-光流法是小运动,可是运动快速的时候怎么处理了?两帧物体运动位移较大时,算法的误差较大,因此需要减少两帧之间的位移即缩放原图像,400x400 位移为 16x16 --→ 200x200 位移为 8x8,图像缩放很多后LK算法又变得适用了。 基于上面的描述,Bouguet想到利用金字塔分层的方式,将原图像逐层分解,即上层金字塔(低分辨率)中的一个像素可以代表下层的两个像素。这样,利用金字塔的结构自上而下的修正运动量。 算法的具体步骤: 1)首先,对每一帧建立一个高斯金字塔,最低分辨率图像在最顶层,原始图片在底层。 2)从顶层开始,通过最小化每个点的邻域范围内的匹配误差和,得到顶层图像中每个点的光流。 3)顶层的计算结果(位移情况)反馈到Lm-1层,作为该层的初始时的光流值的估计g 4)这样沿着金字塔向下反馈,重复估计动作,直到金字塔的底层(即原图像)。 详细过程及公式推导见原文即:文章转载自:https://blog.csdn.net/sgfmby1994/article/details/68489944

原文地址:https://www.cnblogs.com/llfctt/p/9591173.html