车辆分割和跟踪(Vehicle segmentation and tracking)

2019-08-17 14:16发布

我已经工作了一段时间的项目,来探测和跟踪(移动)视频车辆从无人机拍摄的,目前我使用的培训上,从车辆和背景图像中提取的局部特征袋的特征表示的SVM。 我然后使用滑动窗口检测方法,试图在图像,然后,我会想跟踪定位车辆。 问题是,这种方法是远远慢,我的检测是不可靠的,因为我想这样我得到了不少误报。

所以,我一直在考虑从后台试图段的车,找到大概位置,从而将我的分类之前减少搜索空间,但我不知道如何去这一点,并希望有人能帮忙吗?

此外,我一直在阅读有关运动分割使用层,利用光流段由流模型的框架,没有任何人有这种方法的经验,如果是的话你可以提供一些输入为您是否觉得这种方法将适用于我的问题。

下面是从一个样本视频的两个帧

帧0:

框架5:

Answer 1:

Assumimg你的车在移动,你可以尝试估计地平面(道路)。

你可能会通过提取特征(SURF而非SIFT,速度)的下降接地平面估计,匹配他们交给帧对,并求解使用RANSAC的单应性,因为在根据两个相机帧之间的单应性三维移动平面。

一旦你有你的地平面,你可以通过看不根据估计的单应移动的像素集群识别汽车。

一个更复杂的方法是从地形上的运动做结构。 这不仅预示着它是刚性的,而不是它的IT平面。


更新

我在想,如果你能,你将如何去寻找那些不根据估计的单应移动的像素集群扩张?

当然。 说IK是两个视频帧和H是单应性映射特征I在特征K 。 首先,翘曲IK根据H ,即您计算扭曲图像Iw作为Iw( [xy]' )=I( inv(H)[xy]' )大约Matlab的符号)。 然后你看平方或绝对差图像Diff=(Iw-K)*(Iw-K) 图像内容,根据单应性移动H应该给小的差异(假定图像之间恒定的照明和曝光)。 图片内容违反H如动车应该站出来。

对于聚类在高错误像素组Diff我将开始用简单的阈值(“中的每个像素差Diff大于X是相关的”,或许使用自适应阈值)。 该阈值的图像可以被清洁了形态学运算(膨胀,腐蚀)中,用连接的组件聚类。 这可能是过于简单化,但其易于实现第一次尝试,而且要快。 对于一些更看中在看维基百科集群 。 二维高斯混合模型可能是有趣; 当您从一帧检测结果初始化它应该是相当快。

我做了一个小实验,您所提供的两帧,我不得不说我有点惊讶自己是否能正常工作。 :-) 左图:差(彩色编码),您发布的两帧之间。 右图:他们单应匹配后的帧之间的差异。 其余的差异显然是动车,而且他们是简单的阈值足够强。

您当前使用的,可以野趣它与我的建议相结合的方式思考:

  • 你可以尝试在差分图像中学习和分类汽车D ,而不是原始图像。 这等于学什么汽车运动模式看起来不是什么车的样子,这可能是更可靠。
  • 你可以摆脱昂贵的窗口搜索,并且只在区域运行分类D具有足够高的值。

一些补充说明:

  • 从理论上讲,汽车甚至应该站出来,如果他们不动,因为他们是不平坦,但考虑到现场和摄像头的分辨率,这种影响可能是太微妙的距离。
  • 您可以替换特征提取/与光流匹配我的建议的一部分,如果你喜欢。 这相当于识别流矢量从地面的一致的帧到帧运动认为“伸出”。 它可能易于在光流的异常值,但是。 你也可以尝试从流动载体获得单应。
  • 这一点很重要:无论使用哪种方法,一旦你发现汽车在一个框架,你应该使用这些信息来robustify您对这些车在连续帧的搜索,给人一种较高的情形产生,以检测接近旧的(卡尔曼滤波器,等等)。 这就是跟踪的全部!


Answer 2:

  1. 如果汽车在你的视野的数量始终保持不变,但走动,那么你可以使用光流...它会给你一个对静止背景的好成绩......如果汽车的数量正在发生变化,那么你需要调用的OpenCV goodFeaturestoTrack功能特定数量的帧之后和再次使用光流跟踪汽车。
  2. 您可以使用背景建模建模的背景,因此汽车永远是您foreground.The简单的例子是帧差...减去前一帧当前帧。 diff(x,y,k) = I(x,y,k) - I(x,y,k-1)由于你的车都在每帧中移动,你会得到他们的位置..
  3. 这两个过程将正常工作,因为你有一个静止背景我相信.. 检查此链接找到什么光流可以做到。


文章来源: Vehicle segmentation and tracking