车辆分割和跟踪

Jon*_*gan 4 opencv tracking classification object-detection image-segmentation

我已经在一个项目上工作了一段时间,检测和跟踪(移动)从无人机捕获的视频中的车辆,目前我使用的SVM训练有从车辆和背景图像中提取的局部特征的特征包表示.然后我使用滑动窗口检测方法来尝试和定位图像中的车辆,然后我想跟踪.问题是这种方法很慢,我的探测器不如我想的那么可靠,所以我得到了很多误报.

所以我一直在考虑尝试从后台分割汽车以找到大致的位置,以便在应用我的分类器之前减少搜索空间,但我不知道如何去做,并希望有人可以提供帮助?

另外,我一直在阅读有关层的运动分割,使用光流通过流动模型对帧进行分割,是否有人对此方法有任何经验,如果可以,您可以提供一些输入,因为您是否认为此方法适用于我的问题.

以下是示例视频中的两帧

第0帧: 在此输入图像描述

第5帧: 在此输入图像描述

DCS*_*DCS 11

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

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

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

更复杂的方法是在地形上进行结构运动.这仅仅预示它是刚性的,而不是它是平面的.


更新

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

当然.说IK是两个视频帧和H是单应性映射功能中I,以功能K.首先,翘曲IK根据H,即您计算扭曲图像Iw作为Iw( [x y]' )=I( inv(H)[x y]' )(大致Matlab的符号).然后你看看平方或绝对差异图像Diff=(Iw-K)*(Iw-K).根据单H应性移动的图像内容应该给出小的差异(假设图像之间的恒定照明和曝光).违反H移动车等图像内容应该脱颖而出.

对于DiffI中的高误差像素组的聚类,将从简单的阈值开始(" Diff大于X的每个像素差异是相关的",可能使用自适应阈值).阈值图像可以通过形态学操作(扩张,侵蚀)进行清理,并与连接的组件聚集在一起.这可能过于简单了,但是第一次尝试很容易实现,而且应该很快.对于更加花哨的东西,请看维基百科中的聚类.2D 高斯混合模型可能很有趣; 当你使用前一帧的检测结果初始化它时,它应该非常快.

我用你提供的两个框架进行了一些实验,我不得不说我对它的工作原理有些惊讶.:-) 左图:您发布的两帧之间的差异(颜色编码).右图:将它们与单应性匹配后的帧之间的差异.剩下的差异显然是移动的汽车,它们足够强大,可以进行简单的阈值处理.

图像对齐前后的帧差异

考虑到您目前使用的方法,可能需要将其与我的建议相结合:

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

一些补充说明:

  • 从理论上讲,如果它们不平坦,它们甚至应该脱颖而出,因为它们不是平坦的,但考虑到你与场景的距离和相机分辨率,这种效果可能太微妙了.
  • 如果您愿意,可以使用Optical Flow替换我的提案中的特征提取/匹配部分.这相当于识别从地面的一致的帧到帧运动"伸出"的流向量.然而,它可能倾向于光流中的异常值.您也可以尝试从流向量中获取单应性.
  • 这一点非常重要:无论您使用哪种方法,一旦您在一个框架中找到汽车,您应该使用此信息来证明您在连续框架中搜索这些汽车,从而更接近旧汽车的检测(卡尔曼滤波器,等等).这就是跟踪的全部意义!