【发布时间】:2023-03-21 16:16:01
【问题描述】:
我在 c 中使用 opencv-2.4.3,我被面部跟踪部分卡住了,我想使用粒子过滤器进行跟踪,我在 opencv-2.1 版本中得到了它,但是新的 opencv 版本似乎没有这个过滤器或者可能名称会有所不同,有没有人使用过 opencv-2.4.3,可以告诉我如何在 opencv-2.4.3 中使用粒子(冷凝)过滤器
【问题讨论】:
我在 c 中使用 opencv-2.4.3,我被面部跟踪部分卡住了,我想使用粒子过滤器进行跟踪,我在 opencv-2.1 版本中得到了它,但是新的 opencv 版本似乎没有这个过滤器或者可能名称会有所不同,有没有人使用过 opencv-2.4.3,可以告诉我如何在 opencv-2.4.3 中使用粒子(冷凝)过滤器
【问题讨论】:
粒子过滤器是贝叶斯推理方法的一种非常具体的实现。 Condensation 是一种特殊的粒子过滤器,由于它已被用于跟踪视觉对象,因此它变得越来越流行。然而,粒子过滤器应该被视为一个框架,或者是一个可以针对每个问题实例化的架构。
据我所知,OpenCV 包含压缩算法,但您必须提供似然函数。老实说,我不会使用冷凝来跟踪人脸,因为它可能无法正常工作:人脸的外观变化很大,而且很难定义一个动态模型来跟踪人脸在序列中的潜在变化。
有许多更先进、更可靠的面部跟踪方法(仅提及一种,在线外观模型,http://www.cs.toronto.edu/~fleet/research/Papers/cvpr-01A.pdf)。但是,如果您想要一些简单的东西,我会开始使用面部检测器,例如由级联 (http://docs.opencv.org/doc/tutorials/objdetect/cascade_classifier/cascade_classifier.html#cascade-classifier) 提供的面部检测器,并将检测与 cv::KalmanFilter::KalmanFilter 链接起来。此外,您将获得与使用 cv::CamShift 进行冷凝的结果大致相同的结果。
【讨论】:
正如 marcos.nieto 所说,粒子过滤器是一种近似工具,可以加快对象的建模(对象的描述)和搜索过程(而不是像分类器那样对搜索窗口的每个像素进行贪婪搜索) .
另外,建模更新率也不足以掩盖突然的外观变化,如果你增加它,你的跟踪器最终会漂移。
我建议尝试结合使用VideoSurveillance 和Cascade Classifier 来构建一个基于对象的跟踪器,该跟踪器具有跨帧响应的数据关联。
【讨论】:
虽然您主要使用 OpenCV,但请查看 Accord.NET Extensions 库中粒子过滤算法(以及 Kalman 算法)的 C# 实现。样品包括在内。 关联: https://github.com/dajuric/accord-net-extensions
【讨论】: