【问题标题】:Remove outliers from Lucas-Kanade optical flow从 Lucas-Kanade 光流中去除异常值
【发布时间】:2014-07-30 20:12:18
【问题描述】:

SO上有类似的问题,但我没有找到我想要的答案。我需要实现一个强大的光流来跟踪(检测到的)脸上的特征。我使用goodFeaturesToTrack/SURF(我还没有决定哪个是最好的)来获得初始功能。

我的问题是如何去除光流产生的异常值? RANSAC 是一个有效的选项吗?如果是,你如何将它与calcOpticalFlowPyrLK 结合起来?

我也想过拒绝位移大于阈值的特征,但这只是一个想法,并不知道如何实现(如何选择阈值,我应该计算平均位移等)。那么,哪种方法最好呢?

【问题讨论】:

标签: opencv opticalflow outliers


【解决方案1】:

如果您要使用流点网格而不是特征检测,那么您可以通过将结果与周围的流点进行比较来评估流点。如果与周围向量的距离太大,您可以消除它们。但是用不规则的特征来做这件事太昂贵了。

如果您对多个帧进行(相同特征的)连续跟踪,您还可以添加一些时间平滑假设。例如从帧 N 到 N+1 的跟踪向量很可能与从 N-1 到 N 和 N+1 到 N+2 的向量非常相似。

通常,通过上面已经提到的特征来消除可疑向量总是有意义的: - 很长的向量 - 具有高误差的向量 - 梯度较差的跟踪点(如果您对特征使用角点检测,则已排除)

Ransac 仅在您对一项相当全球性的功能特别感兴趣时才有效。例如头部的运动。但我想这不是你感兴趣的(否则你也可以只取所有向量的平均值)

【讨论】:

    【解决方案2】:

    如果您希望自己的动作符合模型,RANSAC 是一个很好且可靠的选择。
    一般来说,LK 是局部流,不必符合任何(全局)运动模型,因此在许多情况下,RANSAC 是不合适的。

    对于一般流程,您可以考虑:

    1. 对称流:从 A 到 B 的 LK 流与从 B 到 A 的独立 LK 流给出相同的结果。
    2. 运动边界:使用特定领域的知识,例如删除太大、太稀疏、与邻居相差太大等的动作。

    【讨论】:

    • 对于选项 2,您认为识别异常值的最佳统计方法是什么?
    • 这是特定于应用程序的。没有一个正确答案。
    • 对于我来说,我计算了全局速度平均值并拒绝了没有相似速度向量的特征。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 2017-06-22
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多