1

我想从运动相机中分离出移动物体,以便稍后可以对它们应用一些进一步的处理算法,但我似乎已经变得有点卡住了。使用光流识别移动物体

到目前为止,我正在使用OpenCV并从PyrLKOpticalFlow获取稀疏的光流。我正在从事的一般想法是找到与图像中背景点不同移动的特征,然后找到这些不同移动特征的聚类作为移动对象进行进一步跟踪/处理。我的问题是,虽然我发现了一些使用这种策略的学术论文,但迄今为止,我还没有找到一种简单的方法来完成自己的工作。

使用此光流数据检测移动照相机中的移动物体的方法是什么?这甚至是最好的方法吗?或者我可能忽略了一些更简单的方法?

回答

2

我设法找到一种或多或少做我想在OpenCV中的方法。

与GoodFeaturesToTrackDetector和PyrLKOpticalFlow(给我prevPts和nextPts)两个连续图像之间找到稀疏光流分后,我使用findHomography与RANSAC到运动估计因相机移动,同时排除异常值,由于独立地移动的物体。然后,我使用perspectiveTransform来扭曲prevPts来解释相机运动(给我变形的Pts)。然后,我可以将warpedPts与nextPts进行比较,以便找到移动的对象。

最终的结果是,即使相机移动,如果对象是静止的,那么在变形的Pts和nextPts中的点之间没有太大的变化,而当追踪的点在移动的物体上时有明显的变化。从运动的接近性和相似性的角度来看,只是将移动点分组。

0

首先 - 正如我从理论中记住的那样 - 光流实际上在移动相机(不是静止场景&移动物体)时效果最好。这是合理的,因为它在邻域像素内假设相同的流量。这将是一个很好的起点,你可以阅读有关卢卡斯卡纳德方法来了解发生了什么。

其次,您的问题不是要跟踪某些功能,而是要检测场景中的某些移动物体。为此,您可能需要去dense optical flow,而不是稀疏集。如果你的场景仍然存在,背景扣除也是一个很大的可能性。

+0

我的问题是,对于这个应用程序,我们需要保持所有运行尽可能接近实时(我们正在使用的摄像头为15 FPS)。虽然使用密集的光流将会很不错,但是在我和其他处理之间,我需要为每个帧运行,即使在GPU上执行大部分处理时,也没有足够的时间来处理它。 – 2014-11-17 15:08:19

+0

所以你需要去LK方法,gridwise像素选择和大概找到运动部分。那么动态背景减法呢?我不知道它是否在opencv中实现 – baci 2014-11-17 22:36:33