我一直在研究一个项目,用于检测和跟踪(移动)从无人机捕获的视频中的车辆,目前我使用的SVM训练有从车辆中提取的局部特征的特征包表示。背景图片。然后我使用滑动窗口检测方法来尝试和定位图像中的车辆,然后我想跟踪。问题是这种方法很慢,我的探测器不像我想的那么可靠,所以我得到了很多误报。
所以我一直在考虑尝试从后台分割汽车以找到大致的位置,以便在应用我的分类器之前减少搜索空间,但我不知道如何去做,并希望有人可以提供帮助?
另外,我一直在阅读有关层的运动分割,使用光流通过流动模型对帧进行分割,是否有人对此方法有任何经验,如果可以的话,您是否可以提供一些输入,因为您是否认为这种方法会适用于我的问题。
以下是来自示例视频的两帧
答案 0 :(得分:11)
假设您的汽车正在移动,您可以尝试估算地平面(道路)。
您可以通过提取特征(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
中的高误差像素组的聚类,我将从简单的阈值开始(“大于X的Diff
中的每个像素差异都是相关的”,可能使用自适应阈值)。阈值图像可以通过形态学操作(扩张,侵蚀)进行清理,并与连接的组件聚集在一起。这可能过于简单了,但是第一次尝试很容易实现,而且应该很快。对于更加花哨的东西,请看Clustering in Wikipedia。 2D Gaussian Mixture Model可能很有趣;当你使用前一帧的检测结果初始化时,它应该非常快。
我用你提供的两个框架进行了一些实验,我不得不说我对自己的效果感到有些惊讶。 :-) 左图:您发布的两帧之间的差异(颜色编码)。 右图:与单应素匹配后的帧之间的差异。剩下的差异显然是移动的汽车,它们足够强大,可以进行简单的阈值处理。
考虑到您目前使用的方法,可能会将其与我的提案相结合:
D
中学习和分类汽车,而不是原始图像。这相当于了解汽车运动模式的样子,而不是汽车的样子,这可能更可靠。D
区域运行分类器,且值足够高。 其他一些评论:
答案 1 :(得分:1)
diff(x,y,k) = I(x,y,k) - I(x,y,k-1)
。当你的车在每一帧中移动时,你将获得他们的位置..