我目前正在尝试使用带有opencv的光流来实现面部跟踪。
为实现这一目标,我使用openCV人脸检测器检测面部,通过调用goodFeaturesToTrack
确定要检测区域的功能,并通过调用calcOpticalFlowPyrLK
进行跟踪。
它给出了很好的结果。
但是,我想知道我正在追踪的脸部何时不再可见(该人离开房间,隐藏在物体或其他人身后,......)但calcOpticalFlowPyrLK
告诉我我一无所知。
calcOpticalFlowPyrLK
函数的状态参数很少报告有关被跟踪要素的错误(因此,如果此人消失,我仍会有大量有效要跟踪的功能)。
我已经尝试计算每个特征的方向向量,以确定面部的每个特征在前一帧和实际帧之间的移动(例如,确定面部的某个点已经移动到左侧之间)两个框架)并计算这些向量的方差(如果向量大多不同,方差很高,否则不是)但它没有给出预期的结果(在某些情况下好,但在其他情况下不好)。
确定光流跟踪是否必须停止的良好条件是什么?
我已经想到了一些像这些可能的解决方案:
答案 0 :(得分:1)
您可以尝试对跟踪点进行双向保密测量。 因此估计从img0到img1的特征位置以及从img1到img0的跟踪位置。如果原始距离(距离应小于1或0.5像素)的双跟踪特征比成功跟踪的要少。这比opencv的plk的状态标志所使用的SSD更可靠。如果无法跟踪某些特征,则事件会增加。