Opencv 利用光流识别运动物体

Opencv 利用光流识别运动物体,opencv,computer-vision,image-segmentation,object-detection,opticalflow,Opencv,Computer Vision,Image Segmentation,Object Detection,Opticalflow,我试图将移动的物体从移动的摄像机中分离出来,以便以后可以对它们应用一些进一步的处理算法,但我似乎有点卡住了 到目前为止,我正在使用OpenCV并从PyrLKOpticalFlow获得稀疏光流。我工作的总体思路是找到与图像中背景点不同的运动特征,然后找到这些不同运动特征的簇,作为运动对象进行进一步跟踪/处理。我的问题是,虽然我发现一些学术论文使用了这样的策略,但到目前为止,我还没有找到一个简单的方法来完成它 使用光流数据从移动摄像机检测移动物体的好方法是什么?这甚至是最好的方法,还是我可能忽略了一

我试图将移动的物体从移动的摄像机中分离出来,以便以后可以对它们应用一些进一步的处理算法,但我似乎有点卡住了

到目前为止,我正在使用OpenCV并从PyrLKOpticalFlow获得稀疏光流。我工作的总体思路是找到与图像中背景点不同的运动特征,然后找到这些不同运动特征的簇,作为运动对象进行进一步跟踪/处理。我的问题是,虽然我发现一些学术论文使用了这样的策略,但到目前为止,我还没有找到一个简单的方法来完成它


使用光流数据从移动摄像机检测移动物体的好方法是什么?这甚至是最好的方法,还是我可能忽略了一些更简单的方法?

首先,正如我从理论上所记得的那样,光流实际上在移动相机(而不是静止场景和移动对象)上效果最好。这是有意义的,因为它假设邻域像素内的流是相同的。这将是您了解lucas kanade方法以了解正在发生的事情的一个很好的起点


其次,您的问题不是跟踪某些特征,而是检测场景中的一些移动对象。为此,您可能需要使用稀疏集,而不是稀疏集。如果你的场景是静止的,背景减法也很有可能。

我设法找到了一种方法,或多或少满足了我在OpenCV中的需求

在使用TrackDetector和PyrLKOpticalFlow(提供prevPts和nextPts)的良好特性找到两幅连续图像之间的稀疏光流点后,我使用findHomography和RANSAC来估计由于相机移动而产生的运动,同时排除由于独立移动对象而产生的异常值。然后,我使用透视变换扭曲前视点来解释相机的运动(给我扭曲的前视点)。然后,我可以将warpedPts与nextPts进行比较,以找到移动的对象


最终结果是,即使相机移动,如果对象静止,扭曲点和下一个点之间的变化不大,而当跟踪点位于移动对象上时,变化很大。从根本上说,这只是根据运动的接近性和相似性对运动点进行分组的问题。

我的问题是,对于这个应用程序,我们需要让一切尽可能接近实时运行(我们正在使用的摄像头的速度为15 FPS)。虽然使用密集光流会很好,但在这和我需要为每帧运行的其他处理之间,即使我在GPU上执行大部分处理,也没有足够的时间来运行。因此,您需要使用LK方法,网格像素选择,并大致找到移动部分。动态背景减法呢?我不确定它是否在opencv中实现,这里的动态背景减法是什么?