我正在开展一个项目,我必须在一个凸轮提供的图像中自动分割汽车的不同部分(即门,前灯等)。
在第一步中,我想删除背景,因此算法不会找到任何不应该的地方。
我也有背景的图像,但由于曝光时间,汽车光线的反射等,照明非常不同。
我试图通过简单的减法来摆脱BG,遗憾的是由于光照条件非常不同,这并没有太大帮助。
接下来我应用了直方图均衡,但这也没有多大帮助。
如何在这个不同点亮的场景中摆脱背景?我可以使用这两个图像的OpenCV方法吗?
感谢阅读。
答案 0 :(得分:3)
Opencv有三种不同的背景减法方法:
BackgroundSubtractorGMG bs_gmg;
BackgroundSubtractorMOG bs_mog;
BackgroundSubtractorMOG2 bs_mog2;
Mat foreground_gmg;
bs_gmg ( image, foreground_gmg, -1.0 );
Mat foreground_mog;
bs_mog ( image, foreground_mog, -1.0 );
Mat foreground_mog2;
bs_mog2 ( image, foreground_mog2, -1.0 );
您可以阅读有关它们并使用最适合您的那个。
答案 1 :(得分:1)
我的经验表明,照明条件可能有很多变化,两幅图像根本不够。您开始使用基于像素的方法,对两个图像进行逐个像素的简单减法,但是照明变化使得颜色看起来非常不同,即使在HSV空间中也是如此。这是光圈问题的一个例子,是计算机视觉中最基本的困难之一。简单来说,我们需要更多的背景。因此,您试图通过估计和校正全局照明参数来获得该上下文,并发现它是不够的,因为图像的不同区域可能具有不同的反射特性,或者与光源的角度不同。如果继续这种方法,下一步是根据外观将图像分割成区域,并分别均衡每个区域中的直方图。例如,尝试Watershed Segmentation。
还有另外一种方法。背景实际上可能不是这里提供最多信息的提示,为什么要从它开始呢?您可以转而使用Viola-Jones approach,然后从那里开始工作。一旦你开始工作,从后台添加信息以提高质量。
答案 2 :(得分:0)
您没有提到您使用的颜色空间。我假设RGB?有一些颜色空间类型默认处理亮度参数,因此您可以使用此类信息应用背景减法算法。看看http://en.wikipedia.org/wiki/HSV_color_space
答案 3 :(得分:0)
嗯......只是说,我不确定这是否可行,但您可以根据更大的区域(如内核)应用减法,然后在该点放置直方图变化。
例如。假设我们的内核补丁设置为30x30
像素,我们将其应用于背景图像中的像素p(x,y)
和测试图像中的q(x,y)
(p和q是相同的相应位置)每个图像)。因此,我们有一个30x30的减去补丁图像。
现在,尝试使用直方图等减去补丁的产品。零直方图表示相同的比较补丁。 “几乎平坦”的直方图可能意味着相同。否则,将其视为前景。