MATLAB中的背景减法

时间:2010-06-09 17:39:00

标签: matlab image-processing background-subtraction

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

3 个答案:

答案 0 :(得分:5)

你使用什么样的形象?

背景减法很简单。如果要减去常量值或与图像大小相同的背景,只需编写img = img - background即可。 imsubtract只需确保背景大于图像的输出为零。

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

例如,如果你有明亮或暗背景上全黑的斑点或线条特征,你可以使用局部最大滤镜(imdilate)或局部最小滤镜({{ {1}})分别大于您的要素,因此无论您在何处放置滤镜遮罩,都会有一些像素覆盖背景。此外,您希望过滤器具有与特征类似的形状。在您的情况下,如果您丢失了部分图像,可能需要尝试使滤镜更大(但不要太大)。

除了减去最大值或最小值之外,减去中值可以很好地工作,但是你必须选择滤波器大小,使得滤波器掩码内通常有大部分背景像素。不幸的是,中值过滤相当慢。

答案 1 :(得分:2)

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

image(find(abs(image-background)< = threshold))= 0;

使用统计模型时变得更加困难,但基本上减去背景非常容易。 imsubtract不是背景减法;它是一个减法过滤器,就像你在photoshop中找到的那样。它并不关心背景与前景,后者无视这一点。

由于背景减法本身非常简单,因此问题更多地是关于背景估计。这有点复杂,通常需要更多的帧和训练来构建背景的统计模型(例如,将像素视为高斯分布或高斯混合,或者寻找光流来确定什么不移动)。 / p>

如果您可以访问技术文章(通过工作或学校),Wren和其他人的“Pfinder:人体实时跟踪”提供了一种非常简单的方法。或者你可以只搜索谷歌单高斯背景减法。这里使用OpenCV实现了许多方法 - > http://dparks.wikidot.com/source-code< - 您可能觉得有用。

答案 2 :(得分:2)

Computer Vision System Toolboxvision.ForegroundDetector个对象,它实现了Stauffer和Grimson的GMM背景减法的变体。实施速度非常快,利用多个核心。查看example如何使用背景减法作为系统的构建块来跟踪多个对象。