在OpenCVC中使用KalmanFilter跟踪多个移动对象 – 如何将轨道分别分配给检测到的对象

在OpenCVC中使用KalmanFilter跟踪多个移动对象 – 如何将轨道分别分配给检测到的对象,第1张

概述我正在OpenCV / C中进行实时运动检测和对象跟踪,目前我正处于跟踪部分. Matlab-我想做的事情的例子:http://www.mathworks.de/de/help/vision/examples/motion-based-multiple-object-tracking.html(我对跟踪部分感到困扰以及如何将其转移到C / OpenCV) 我的运动部件与OpenCVs Backgr 我正在OpenCV / C中进行实时运动检测和对象跟踪,目前我正处于跟踪部分.

Matlab-我想做的事情的例子:http://www.mathworks.de/de/help/vision/examples/motion-based-multiple-object-tracking.html(我对跟踪部分感到困扰以及如何将其转移到C / OpenCV)

我的运动部件与OpenCVs BackgroundSubtractor mog2配合使用,可以找到轮廓并过滤掉较小的轮廓.

为了跟踪,我目前正在尝试使用KalmanFilter(具有类似于this的实现),如果找到移动对象并在其路径上绘制一条线,现在正在每帧中调用它.
我的检测&跟踪部件看起来像这样:

BackgroundSubtractormog2 bg;bg.operator()(frame,threshold);bg.getBackgroundImage(background);...  //morphological operations to remove noise etc.findContours(threshold,...);...  //filtering to reject contours which are too smalle/too bigfor(int i = 0; i < contours.size(); i++){approxpolyDP(...);boundRect = boundingRect(...);x = boundRect.x + boundRect.wIDth/2;y = boundRect.y + boundRect.height/2;}kalmanFilter.track(x,y);kalmanFilter.draw(frame);

当前问题:
我有一个有0个移动物体的场景,然后有1个物体移入,通过轮廓检测到并被跟踪.然后第二个物体在视线中移动,被检测到并使跟踪器跳到它而不是跟随第一个或单独标记(我想要).

当前的跟踪器需要x&找到的对象的y坐标.像这样,一旦检测到另一个对象,跟踪器仍假定它是相同的对象,但具有比预期的其他坐标.

可以看出,没有将“轨迹”分配给某个对象的功能,这可能是最大的问题.我读到了匈牙利算法,但我不确定如何在我的函数中实现它.

什么是使跟踪工作多个对象的好方法?

我的想法是,如果我对每个对象进行唯一识别,我可以检查ID是否仍然相同,如果没有,则让跟踪器知道它是一个与另一个分开跟踪的新对象.不确定这是否必要或甚至有用,如果是,如何做到这一点.

解决方法 尝试这样的事情:
for each contour:    if its already tracked with ID 'A': kalmanFilter_with_ID_A.track(x,y);    else createNewKalmanFilterWithID A

你需要一些机制来决定它是否已被跟踪.在简单跟踪中,您只需通过测量最后一帧中轮廓的距离来确定,如果它足够接近,则它是旧对象.这是非常错误的,因此您可能希望了解更好的跟踪方法,例如:概率跟踪.

如此简单的模式:

for each contour 'currentFrameC':    for each contour 'lastFrameC'        if distance(currentFrameC,lastFrameC) is smallest and < threshold            currentFrameC is the same object as lastFrameC so give it the same ID    if no shortest contour with dist < thres was found,create a new object with a new ID and create a new KalmanFilter with this same ID for that objectcall kalmanFilter with ID for each found contour ID
总结

以上是内存溢出为你收集整理的在OpenCV/C中使用KalmanFilter跟踪多个移动对象 – 如何将轨道分别分配给检测到的对象全部内容,希望文章能够帮你解决在OpenCV/C中使用KalmanFilter跟踪多个移动对象 – 如何将轨道分别分配给检测到的对象所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1237373.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存