从图像中减去背景

时间:2014-06-10 10:32:46

标签: matlab image-processing background-subtraction

我试图从对象的图片中减去背景,只留下前景对象。我使用imshow()发现背景的RGB值为218 220 219。如何在imsubtract()?

中使用RGB值
y = [218 220 219];
z = imsubtract(img,y);

使用imsubtract出错(第55行) X和Y必须具有相同的大小和类别,或者Y必须是标量的双倍。

PencilCase

2 个答案:

答案 0 :(得分:4)

您可以使用来执行此操作

z = bsxfun( @minus, img, permute( [218 220 219], [1 3 2] ) );

您需要注意数据类型和范围。如果img类型为uint8,则像素值将在0..255范围内,但由于您会看到结果在0下溢,因此很难减去值:uint8(4) - uint8(10)为{{ 1}} ...
因此,您可能希望使用范围为0..1的像素值的0img转换为double。在这种情况下,您必须将“灰色”矢量im2double转换为0..1范围,然后将其除以[2218 220 219]
因此,更完整的解决方案将是

255

答案 1 :(得分:-1)

以下结果让我更接近我正在寻找的答案,尽管并非没有你的指导!

img = imread('IMG_0792.jpg');
img = im2double(img);

rows = numel(img(:,1,1));
columns = numel(img(1,:,1));

for i = 1:rows
    for j = 1:columns
        if ( ( img(i,j,1) > 0.75) && ( img(i,j,2) > 0.7) && ( img(i,j,3) > 0.7) )
            img(i,j,1) = 1;
            img(i,j,2) = 1;
            img(i,j,3) = 1;
        end
    end
end

imshow(img);