我正在尝试将移动的物体与移动的相机隔离开来,这样我以后可以对它们应用一些进一步的处理算法,但我似乎有点卡住了。
到目前为止,我正在使用OpenCV并从PyrLKOpticalFlow获得稀疏光流。我工作的一般想法是找到与图像中的背景点不同的特征,然后找到这些不同移动特征的聚类,将其视为移动对象以进行进一步跟踪/处理。我的问题是,虽然我发现了一些使用这种策略的学术论文,但到目前为止,我还没有找到一种简单的方法来为自己完成。
使用此光流数据从移动相机中检测移动物体的好方法是什么?这是否是最好的方法,或者是否有一些我可能忽略的简单方法?
答案 0 :(得分:2)
我设法找到一种或多或少在OpenCV中做我想要的方法。
在使用GoodFeaturesToTrackDetector和PyrLKOpticalFlow(给我prevPts和nextPts)找到两个连续图像之间的稀疏光学流点后,我使用findHomography和RANSAC来估计由于相机移动引起的运动,同时排除由于独立移动的物体引起的异常值。然后我使用perspectiveTransform来扭曲prevPts以考虑相机运动(给我warpedPts)。然后,我可以将warpedPts与nextPts进行比较,以便找到移动的对象。
最终结果是,即使相机移动,如果物体静止,则warpedPts和nextPts之间的点之间没有太大变化,而当跟踪点位于移动物体上时会发生显着变化。从这里出发,只需要根据移动的接近度和相似性对移动点进行分组。
答案 1 :(得分:0)
首先 - 正如我从理论中记得的那样 - 光流实际上最适合移动相机(不是静止场景和移动物体)。这是有道理的,因为它假设邻域像素内的流量相同。这将是一个很好的起点,你可以阅读卢卡斯kanade方法来了解正在发生的事情。
其次,您的问题不是要跟踪某些功能,而是检测场景中的某些移动对象。为此,您可能需要使用dense optical flow而不是稀疏集。如果您的场景仍然存在,那么背景减法也很有可能。