光流和手指跟踪

Optical flow and finger tracking

我正在使用opencv实现手指跟踪系统 并且还使用 calcOpticalFlowPyrLK(pGmask、nGmask、手指、轨道、状态、错误); 执行 LK 跟踪器。

概念不太清楚,实现了LK tracker后,应该如何检测手指的运动?另外,跟踪器获取最后一帧和当前帧,如何检测5帧以内的一系列动作或连续手势?

calcOpticalFlowPyrLK(此处为 track)的第 4 个参数将包含计算出的第二张图像中输入特征的新位置(此处为 nGmask)。

在简单的情况下,您可以分别估计 fingerstrack 的质心,从而推断出运动。可以根据从fingers的质心指向track的质心的矢量的方向和大小来做出决定。

此外,复杂的运动可以被认为是时间序列,因为运动是由在一个时间间隔内进行的一些连续测量组成的。这些测量值可以是上述矢量的方向和大小。所以任何运动都可以表示如下:

("label of movement", time_series), where
time_series = {(d1, m1), (d2, m2), ..., (dn, mn)}, where
di is direction and mi is magnitude of the ith vector (i=1..n)

所以时间序列由 n * 2 测量组成(采样 n 次),这是如何识别运动的唯一问题?

如果你有关于运动的先验信息,即你​​知道如何进行圆周运动,写一封 a 信等,那么问题可以简化为:如何将时间序列与自己对齐?

著名的 Dynamic Time Warping (DTW) 来了。它也可以被认为是一种生成模型,但它是在序列对之间使用的。 DTW 是一种算法,用于测量两个时间序列之间的相似性,这两个时间序列可能会在时间或速度上发生变化(例如在我们的例子中)。

一般来说,DTW 计算两个给定时间序列之间的最佳匹配,但有一定的限制。序列在时间维度上非线性扭曲,以确定其相似性的度量,独立于时间维度中的某些非线性变化。