关于SO也有类似的问题,但我没有找到我想要的答案。我需要实现强大的光流以跟踪(检测到的)面部的特征。我使用goodFeaturesToTrack
/ SURF
(我还没决定哪个最好)来获取初始功能。
我的问题是如何消除光流产生的异常值? RANSAC是否适用于此,如果是,您如何将其与calcOpticalFlowPyrLK
结合使用?
我还想过拒绝位移大于阈值的功能,但这只是一个想法,并不是真的知道如何实现它(如何选择阈值,我应该计算平均位移等)。那么,哪种方法最好?
答案 0 :(得分:2)
如果你有一个你期望你的动作符合的模型,RANSAC是一个很好的和强大的选择 一般来说,LK是本地流,并且不必符合任何(全局)运动模型,因此在许多情况下RANSAC是不合适的。
对于一般流程,您可以考虑:
答案 1 :(得分:1)
如果您使用流量点网格而不是特征检测,那么您可以通过将结果与周围流量点进行比较来评估流量点。如果与周围矢量的距离太大,您可以消除它们。但是,使用不规则功能进行此操作相当昂贵。
如果您在多个帧上连续跟踪(具有相同的特征),您还可以添加一些时间平滑度假设。例如从N到N + 1的跟踪向量可能与从N-1到N和N + 1到N + 2的向量非常相似。
通常,通过上面提到的功能消除可疑向量总是有意义的: - 非常长的载体 - 高误差的向量 - 跟踪梯度较差的点(如果对特征使用角点检测,则已排除)
只有当你对一个相当全球化的特征特别感兴趣时,Ransac才有用。例如头部的运动。但我猜这不是你感兴趣的东西(否则你可能也只是采取所有向量的平均值)