从Lucas-Kanade光流中去除异常值

4
在 SO 上有类似的问题,但我没有找到想要的答案。我需要实现一个稳健的光流,以便跟踪(检测到)面部上的特征点。我使用goodFeaturesToTrack/SURF (我还没决定哪个更好)来获得初始特征点。
我的问题是如何去除由光流生成的离群值?RANSAC 是否是一个有效的选择,如果是,如何将其与calcOpticalFlowPyrLK结合使用?
我也考虑过拒绝位移大于阈值的特征点,但这只是一个想法,不知道如何实现它(如何选择阈值,是否应计算平均位移等)。那么,哪种方法最好?

以下链接中的论文可能会对您有所帮助。它使用前向后向误差估计和归一化交叉相关来消除冗余点。http://personal.ee.surrey.ac.uk/Personal/Z.Kalal/Publications/2010_icpr.pdf。示例代码https://github.com/jayrambhia/MFTracker - Darshan
2个回答

3
如果您期望运动符合某个模型,那么RANSAC是一个良好且稳健的选择。
总的来说,LK是局部流动的,不必符合任何(全局)运动模型,因此在许多情况下,RANSAC并不合适。
对于一般的流动,可以考虑以下内容:
  1. 对称流动:从A到B的LK流动与从B到A的独立LK流动产生相同的结果。
  2. 运动边界:使用特定领域的知识,例如去除过大、过稀疏或与邻居不同等运动。

对于选项2,您认为最好的识别异常值的统计方法是什么? - joanna
这是应用程序特定的。没有一个正确答案。 - Adi Shavit
对于我的算法,我计算了全局速度平均值,并且排除了那些没有相似速度向量的特征。 - Mateen Ulhaq

1
如果您使用流点网格而不是特征检测,则可以通过与周围流点比较结果来评估流点。如果与周围向量的距离太大,则可以消除它们。但对于不规则特征,这样做可能过于昂贵。
如果您在几个帧上持续跟踪(相同的特征),还可以添加一些时间平滑性假设。例如,从N到N + 1的跟踪矢量很可能与从N-1到N和从N + 1到N + 2的矢量非常相似。
通常,始终有意义通过前面提到的特征消除可疑的向量: - 非常长的矢量 - 具有高误差的向量 - 具有较差梯度的跟踪点(如果您使用角点检测进行特征选择,则已排除)
Ransac仅在您特别关注一个全局特征时才有效。例如,头部的移动。但我想这不是您感兴趣的(否则您可能只需取所有向量的平均值)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接