在变化的光照条件下检测多个运动物体。

时间:2012-10-10 17:13:49

标签: c++ opencv background edge-detection image-segmentation

我正在尝试在视频帧中提取多个移动对象,并将它们提取为前景。数据来自video frames

目前的问题是:灯光正在变化,因此有一些阴影,或者比实际背景更亮的部分。这会导致OpenCV MoG背景分割方法错误的背景/前景提取。

为此,我没有得到任何简单的方法,但有这样的想法:如果我可以在前一帧中提取那些移动对象的边缘,那么也许我可以使用像{{1}这样的算法来跟踪它们在下一帧中,查看它们的位置,并将它们视为前景。

我认为在这种情况下,光线变化不会影响结果。如果我在这一点上是正确的,那么我的问题是:

如何使用OpenCV有效地对这些移动物体进行边缘检测?如果我需要在OpenCV中使用SIFT算法,它是免费提供的吗?从网上看,我看到它是不自由的,对吗?

我的第二个问题是:有没有人对此有更好的想法?

谢谢。

2 个答案:

答案 0 :(得分:4)

如果您想进行人体检测/跟踪,您应该查找研究论文或项目。有很多,你甚至可以在SOF上找到关于该主题的一些问题:

How can I detect and track people using OpenCV? (可能已过时)

single person tracking from video sequence

How to do motion tracking of an object using video?

此外,还有几个问题涉及特征检测器/描述符,如SIFT及其最近的替代品(SURF,ORB,FREAK - 仅举几例在OpenCV中实现):

Are there any fast alternatives to SURF and SIFT for scale-invariant feature extraction?

OpenCV for ANDROID image compare

简单来说,SIFT不是一种跟踪移动物体的算法,它是检测图像区域,这些图像区域在某种程度上是独特的,并且对几种失真(平移,旋转,缩放......)具有鲁棒性。意思是,稍后可以在不同的图像条件下检测相同的特征。您确实可以使用类似SIFT的算法来识别对象,但是对于人物跟踪,可以有更好的选择。 然后,对于那些图像区域,您可以应用一些跟踪算法,例如光流 - 但是有更具体的跟踪算法用于人类跟踪。

SIFT和SURF可以通过OpenCV“自由”使用,但部分内容已获得专利,因此人们可以避免使用它们,以便将来因为这些专利而没有任何问题 - 这就是他们转移到“非自由”的原因“OpenCV模块。

除了您提到的轻微问题之外,您将遇到的其他问题是对象遮挡以及进入场景的人员。

答案 1 :(得分:2)

我建议您将图像标准化以进行照明。一种实用的方法是使用“直方图匹配”。

请查看Histogram matching of two colored images in matlab了解有关使用直方图匹配的信息。

希望这有帮助