车辆分割和跟踪

Posted

技术标签:

【中文标题】车辆分割和跟踪【英文标题】:Vehicle segmentation and tracking 【发布时间】:2013-03-01 19:09:55 【问题描述】:

我从事一个项目已经有一段时间了,在从无人机捕获的视频中检测和跟踪(移动)车辆,目前我正在使用一个支持向量机,该 SVM 训练了从车辆和背景图像。然后,我使用滑动窗口检测方法来尝试定位图像中的车辆,然后我想对其进行跟踪。问题是这种方法速度很慢,而且我的检测器没有我想要的那么可靠,所以我得到了很多误报。

所以我一直在考虑尝试从背景中分割汽车以找到大致位置,以便在应用我的分类器之前减少搜索空间,但我不知道该怎么做,希望有人能提供帮助?

此外,我一直在阅读有关分层运动分割,使用光流按流模型分割帧的内容,有没有人对这种方法有任何经验,如果有,您能否提供一些输入,以说明您是否认为这种方法会适用于我的问题。

以下是示例视频中的两帧

第 0 帧:

第 5 帧:

【问题讨论】:

【参考方案1】:

假设您的汽车正在移动,您可以尝试估计地平面(道路)。

您可以通过提取特征(SURF 而不是 SIFT,用于速度)、在帧对上匹配它们并使用 RANSAC 求解单应性来获得下降地平面估计,因为 3d 中的平面根据两个相机之间的单应性移动帧。

一旦有了地平面,您就可以通过查看根据估计的单应性不移动的像素簇来识别汽车。

更复杂的方法是在地形上从运动中构建结构。这只是假设它是刚性的,而不是它是平面的。


更新

我想知道您是否可以扩展一下如何根据估计的单应性查找不移动的像素簇?

当然。假设IK 是两个视频帧,HI 中的单应映射特征到K 中的特征。首先,根据HI 变形到K,即您将变形图像Iw 计算为Iw( [x y]' )=I( inv(H)[x y]' )(大致是Matlab 表示法)。然后您查看平方或绝对差图像Diff=(Iw-K)*(Iw-K)。根据单应性H 移动的图像内容应该给出小的差异(假设图像之间的照明和曝光恒定)。违反H 的图像内容(例如移动的汽车)应突出显示。

为了对Diff 中的高错误像素组进行聚类,我将从简单的阈值处理开始(“Diff 中大于 X 的每个像素差异都是相关的”,可能使用自适应阈值)。阈值图像可以通过形态学操作(膨胀、腐蚀)进行清理,并与连接的组件进行聚类。这可能过于简单,但第一次尝试很容易实现,而且应该很快。如需更花哨的东西,请查看Clustering in Wikipedia。 2D Gaussian Mixture Model 可能很有趣;当您使用前一帧的检测结果对其进行初始化时,它应该非常快。

我对您提供的两个框架做了一个小实验,我不得不说我自己对它的效果感到有些惊讶。 :-) 左图: 您发布的两个框架之间的差异(颜色编码)。 右图:将它们与单应性匹配后的帧之间的差异。其余的差异显然是移动的汽车,它们对于简单的阈值处理来说足够强大。

考虑一下您目前使用的方法,将它与我的建议结合起来可能会很有趣:

您可以尝试在差异图像D 中而不是原始图像中学习和分类汽车。这相当于了解汽车运动模式的样子,而不是汽车的样子,这可能更可靠。 您可以摆脱昂贵的窗口搜索并仅在具有足够高值的D 区域上运行分类器。

一些补充说明:

理论上,如果汽车不移动,它们甚至应该脱颖而出,因为它们不是平坦的,但考虑到您与场景的距离和相机分辨率,这种效果可能过于微妙。 如果您愿意,可以将我提案中的特征提取/匹配部分替换为 Optical Flow。这相当于识别从地面的一致帧到帧运动中“突出”的流向量。然而,它可能容易在光流中出现异常值。您也可以尝试从流向量中获取单应性。 这很重要: 无论您使用哪种方法,一旦您在一帧中找到汽车,您应该使用此信息来加强您在连续帧中对这些汽车的搜索,从而提高检测到接近旧的(卡尔曼滤波器等)。这就是跟踪的意义所在!

【讨论】:

您好 DCS,感谢您的回答,我想知道您是否可以详细说明如何根据估计的单应性查找不移动的像素簇? @JonoBrogan:我用你的框架做了一个实验,效果很好,见上文。 非常感谢您的详细回复,您的结果看起来很棒,正是我想要实现的。我现在就试试看:) 也许你可以在没有 Homography(射影变换)的情况下匹配这两个图像,但是通过使用更简单的变换,甚至是纯平移。毕竟,连续两帧之间的差异不应该太大,只有非常轻微的相机移动。【参考方案2】:
    如果您视野中的汽车数量始终保持不变但四处移动,那么您可以使用光流...它会在静止背景下为您提供良好的效果...如果汽车数量正在变化,那么您需要在一定数量的帧后调用 OpenCV 中的 goodFeaturestoTrack 函数,并再次使用光流跟踪汽车。 您可以使用背景建模来建模背景,因此汽车始终是您的前景。最简单的示例是帧区分...减去前一帧当前帧。 diff(x,y,k) = I(x,y,k) - I(x,y,k-1) .随着您的汽车在每一帧中移动,您将获得它们的位置.. 这两个过程都可以正常工作,因为我认为您的背景是静止的..check this link 来了解光流可以做什么。

【讨论】:

以上是关于车辆分割和跟踪的主要内容,如果未能解决你的问题,请参考以下文章

基于HALCON的视频对象分割及跟踪方法总结

PaddleX助力无人驾驶:基于YOLOv3的车辆检测和车道线分割实战

连通区域

OpenMMLab 实战营打卡 - 第 6 课

目标跟踪与分割

车辆车牌识别原理