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