6

我正在寻找对图像进行背景减法。我是 MATLAB 的新手,也是图像处理/分析的新手,如果这听起来很愚蠢,我很抱歉。1) 除了imsubtract()之外,还有其他方法可以进行背景减法(除了将一张图像与另一张图像进行比较之外)?2) 在 Math Works对 imsubtract() 的解释中,为什么他们将结构元素设为圆盘?到目前为止,这似乎相当困难,因为每次我尝试某些东西时,我最终不仅会减去嘈杂的背景,而且还会丢失我想看的图像部分!

4

3 回答 3

5

你使用什么样的图像?

背景减法很容易。如果您想减去一个常数值,或者与您的图像大小相同的背景,您只需编写img = img - background. imsubtract只需确保在背景大于图像的地方输出为零。

背景估计很难。在那里你需要知道你正在看什么样的图像,否则背景估计会失败。

例如,如果您的点或线要素要么在明亮的背景下全暗,要么在暗背景上的亮,您可以分别使用局部最大值过滤器 ( imdilate) 或局部最小过滤器 ( imerode) 通过,它大于功能,因此无论您放置滤镜蒙版,都有一些像素覆盖背景。此外,您希望过滤器具有与特征有些相似的形状。在您的情况下,如果您丢失了部分图像,您可能需要尝试使过滤器更大(但不要太大)。

与减去最大值或最小值不同,减去中值可以很好地工作,尽管您必须选择过滤器大小,以便过滤器掩码内通常有大部分背景像素。不幸的是,中值滤波相当慢。

于 2010-06-09T18:44:34.940 回答
2

要减去背景图像,您需要一个背景模型。最简单的模型是作为背景捕获的图像以及一些允许的偏差 (+/- 0-255)。然后,MATLAB 中的背景减法非常简单:

图像(查找(abs(图像背景)<=阈值))= 0;

当您使用统计模型时会变得更加困难,但基本上减去背景非常容易。imsubtract 不是背景减法;它是一个减法滤镜,就像您在 Photoshop 中找到的一样。它不关心背景与前景,然后就失败了。

由于背景减法本身很容易,所以问题更多地是关于背景估计。这有点复杂,通常需要更多的帧和训练来建立背景的统计模型(例如,将像素视为高斯分布或高斯混合,或者查看光流以确定什么不移动)。

如果您可以访问技术文章(通过工作或学校),Wren 和其他人的“Pfinder: Real-Time Tracking of the Human Body”提供了一个非常简单的方法。或者你可以在谷歌上搜索单个高斯背景减法。这里有许多用 OpenCV 实现的方法 --> http://dparks.wikidot.com/source-code <-- 您可能会发现它们很有用。

于 2011-12-12T15:13:35.747 回答
2

计算机视觉系统工具箱vision.ForegroundDetector对象,它实现了 Stauffer 和 Grimson 的 GMM 背景减法的变体。实施速度非常快,利用了多个内核。查看此示例,了解如何使用背景减法作为跟踪多个对象的系统的构建块。

于 2013-09-01T13:36:28.140 回答