我使用的是OpenCV库在项目中集成的CodeBook方法。到目前为止,我已经设法让它在我的网络摄像头上工作,但似乎有一些问题。相机的亮度自动调整会打乱整个最终结果,因为整个区域(有时是整个图像)都被标记为前景。
我真的很想知道我是否可以访问算法生成的背景模型,以便进行一些基本的阴影检测,从而消除亮度变化。作为最终结果,我希望将前景图像分类为:a) 异物b) 仅亮度发生变化的区域。
PS:我正在使用OpenCV 2.1和Dev C++4.9.9.2
BackgroundSubtractorMOG2和其他每个BackgroundSubstrator都有一个返回背景图像的函数。你最好关掉相机的白平衡和自动对焦。
据我所知,没有一个背景模型不能去除阴影。要做到这一点,你可能需要使用一些方法,比如场景检测,这需要机器学习。或者,你可以尝试一些使用超级像素匹配的方法来去除阴影。
顺便说一句,CodeBook模型是一种古老而缓慢的方法,我所知道的最好的背景模型之一叫ViBe,它是专利的,但如果你把它用于学术目的,你可以从发明人那里获得SDK,这是我实现的视频。当它被应用于交通检测时,这里是另一个视频https://www.youtube.com/watch?v=uzY76q0mrh4
如果你阅读了他们发表的论文,你可以实现自己的版本。希望这能有所帮助!