Opencv光流跟踪:停止条件

Opencv Optical flow tracking: stop condition

我目前正在尝试通过使用 opencv 的光流来实现面部跟踪。

为此,我使用 openCV 人脸检测器检测人脸,通过调用 goodFeaturesToTrack 确定要在检测到的区域上进行跟踪的特征,然后通过调用 calcOpticalFlowPyrLK.[=14= 进行跟踪操作]

效果不错。

但是,我想知道我当前正在跟踪的面孔何时不再可见(此人离开房间,隐藏在物体或其他人后面,...)但是 calcOpticalFlowPyrLK 什么也没告诉我。

calcOpticalFlowPyrLK 函数的状态参数很少报告有关跟踪特征的错误(因此,如果这个人消失了,我仍然有大量有效特征要跟踪)。

我尝试计算每个特征的方向向量,以确定面部每个特征的前一帧和实际帧之间的移动(例如,确定面部的某个点向左移动在两个帧之间)并计算这些向量的方差(如果向量大部分不同,则方差很高,否则不是)但它没有给出预期的结果(在某些情况下好,但在其他情况下不好)。

确定光流跟踪是否必须停止的良好条件是什么?

我想到了一些可能的解决方案,例如:

您可以尝试对跟踪点进行双向置信度测量。 因此,估计从 img0 到 img1 的特征位置,而不是从 img1 到 img0 的跟踪位置。如果在原始附近(距离应小于 1 或 0.5 像素)进行双重跟踪,则跟踪成功。这个比opencv的plk的status flag用的SSD靠谱一点。如果无法跟踪一定数量的特征,则会引发事件。