我一直在从事一个项目,以检测和跟踪从无人机捕获的视频中(移动)的车辆,目前我正在使用 SVM 训练从车辆和背景图像中提取的局部特征的特征表示。然后我使用滑动窗口检测方法来尝试定位图像中的车辆,然后我想跟踪这些车辆。问题是这种方法太慢了,而且我的检测器不像我想的那么可靠,所以我得到了很多误报。
所以我一直在考虑尝试从背景中分割汽车以找到大致位置,以便在应用我的分类器之前减少搜索空间,但我不知道如何解决这个问题,希望有人能提供帮助?
此外,我一直在阅读有关层的运动分割,使用光流按流模型对帧进行分割,是否有人对这种方法有任何经验,如果有的话,您能否提供一些输入,以说明您认为这种方法是否适用于我的问题。
下面是来自示例视频的两帧
第 0 帧:
第 5 帧:
最佳答案
假设您的汽车正在移动,您可以尝试估计地平面(道路)。
您可以通过提取特征(SURF 而不是 SIFT,用于速度)、在帧对上匹配它们并使用 RANSAC 求解单应性来获得下降地平面估计,因为 3d 中的平面根据两个相机帧之间的单应性移动。
一旦你有了地平面,你就可以通过根据估计的单应性查看不移动的像素簇来识别汽车。
更复杂的方法是在地形上从运动中构建结构。这只是假设它是刚性的,而不是它是平面的。
更新
当然。假设 I
和 K
是两个视频帧, H
是 I
中的特征到 K
中的特征的单应映射。首先,根据 I
将 K
变形为 H
,即将变形图像 Iw
计算为 Iw( [x y]' )=I( inv(H)[x y]' )
(大致是 Matlab 符号)。然后您查看平方或绝对差值图像 Diff=(Iw-K)*(Iw-K)
。根据单应性 H
移动的图像内容应该有很小的差异(假设图像之间的照明和曝光恒定)。违反 H
的图像内容(例如移动的汽车)应该脱颖而出。
为了在 Diff
中聚类高误差像素组,我将从简单的阈值开始(“Diff
中大于 X 的每个像素差异都是相关的”,可能使用自适应阈值)。阈值图像可以通过形态学操作(膨胀、侵 eclipse )进行清理,并与连接的组件进行聚类。这可能太简单了,但第一次尝试很容易实现,而且应该很快。对于更花哨的东西,请查看 Clustering in Wikipedia 。 2D Gaussian Mixture Model 可能很有趣;当您使用前一帧的检测结果对其进行初始化时,它应该非常快。
我对你提供的两个框架做了一些实验,我不得不说我自己有点惊讶它的效果如何。 :-) 左图: 您发布的两帧之间的差异(颜色编码)。 右图: 用单应性匹配后帧之间的差异。剩下的区别显然是移动的汽车,它们足够强大以进行简单的阈值处理。
想想你目前使用的方法,把它和我的建议结合起来可能很有趣:
D
中而不是原始图像中学习和分类汽车。这相当于学习汽车运动模式的样子,而不是汽车的样子,后者可能更可靠。 D
具有足够高值的区域上运行分类器。 一些补充说明: