使用OpenCV跟踪旋转物体

7
我需要从俯视视频中追踪道路上的汽车。
我的应用程序包含两个主要部分:
1. 检测帧中的汽车(Tensorflow训练网络) 2. 跟踪检测到的汽车(opencv跟踪器)
我在使用opencv跟踪器时遇到了麻烦。最初我尝试了不同的跟踪器,但只有MOSSE足够快。这个跟踪器对于直线道路的情况几乎完美,但我在转弯的汽车上遇到了问题。这种情况出现在十字路口上。
据我所知,旋转对象的边界框比水平或垂直对象的bbox大。因此bbox包含静态背景的大部分,跟踪器会失去目标对象。
是否有任何替代跟踪器可以跟踪轮廓(而不是边界框)? 我能否通过任何设置或调整图片来调整现有opencv跟踪器的结果质量?
图示: Example 真实图像: Real image

2
你需要的是旋转边界框。但是,我还不确定如何在opencv跟踪器中使用它。 - cuongptnk
也许,基于SIFT的方法会更好[1](https://pdfs.semanticscholar.org/fcb5/ec8bd010981682f14152d9f2cf29b840a905.pdf)。 - Slawomir Orlowski
@SlawomirOrlowski 对象很小,分辨率低,因此我在使用SIFT进行跟踪时出现了错误。 - Max
@Max:好的。我的下一个尝试将是GOTURN:使用回归网络进行通用物体跟踪 - Slawomir Orlowski
你在每个帧中检测到了吗?检测器是否有相同的问题(轴对齐边界框)?摄像机是静止的吗?一个车辆的(旋转后的)框的大小应该是恒定的吗?实际框对你来说是否相关?也许只考虑(太大的)框的中心点就足够了? - Micka
在追踪的同时,您应该使用某种路径预测器。这样,在您丢失物体的情况下,您知道需要搜索的大致区域。当然,理想情况下,您永远不会失去目标物体,但是实际上,总会发生一些事情导致你失去它。因此,您需要实现恢复方法。例如,如果您使用卡尔曼滤波器预测汽车的位置,如果您不慎失去它,那么您就知道下一帧中汽车的大致期望位置和旋转。如果您的视频速度足够快,则汽车将在其中。 - Ander Biguri
5个回答

2
如果您的相机是静止的,则以下场景是可行的:
  1. 使用背景减法方法将背景图像与前景斑块分离。
  2. 使用形态学运算改善前景结果。
  3. 检测汽车斑点并删除其他斑点。
  4. 在视频中跟踪前景斑点,即二进制跟踪(简单地使用此方法或甚至应用卡尔曼滤波器)。

2
在这种情况下,一种非常基本但有效的方法可能是追踪边界框的中心坐标。如果中心坐标只沿一个轴线改变(每个轴线有一个小容差),则表示它是直线运动(而不是旋转) 。如果x和y都改变,则汽车正在环形路上移动。
这种方法的弱点在于它只能检测对角线运动,但由于您查看的是中心的环形路口,所以这不应该成为问题。
从内存方面来看,它也非常高效。

1

光流对我来说不起作用,因为物体很小,而从goodFeaturesToTrack()返回的点也不好:/ - Max
我已经尝试使用背景减法,但是对于静止物体它并不能正确工作。 - Max
您可以传入自定义功能。背景减除需要多个帧来检测背景。如果您在上方安装了相机,这应该不是问题。 - fogx

1

你应该使用PCA方法,它可以计算检测到的物体的方向以及面对的方向。你可以改变检测的阈值来选择更像汽车的物体(基于形状和颜色 - 一种HSV转换,在你的情况下是红色)在你的图片中。

链接到主成分分析(PCA)介绍


对象仅在第一帧上被检测到。检测后,应使用跟踪器和输入边界框进行跟踪。我添加了真实图像(汽车可以有任何颜色)。 - Max
使用 MOOSE 检测物体后,在每帧中应用遮罩,然后应用 PCA 方法。遮罩应将图像中所有额外部分变成空白,只留下汽车。这样可以让 PCA 方法处理图像并找到汽车的方向。 - Ben Parry

1
方法 1:
      - Detect bounding boxes and subtract the background to get blobs rotated rectangles.

方法二:
      - implement your own version of detector with  rotated boxes.

方法三:
      - Use segmentation instead  ... Unet for example. 

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