我试图从对象的图片中减去背景,只留下前景对象。我使用imshow()发现背景的RGB值为218 220 219。如何在imsubtract()?
中使用RGB值y = [218 220 219];
z = imsubtract(img,y);
使用imsubtract出错(第55行) X和Y必须具有相同的大小和类别,或者Y必须是标量的双倍。
答案 0 :(得分:4)
您可以使用bsxfun来执行此操作
z = bsxfun( @minus, img, permute( [218 220 219], [1 3 2] ) );
您需要注意数据类型和范围。如果img
类型为uint8
,则像素值将在0..255范围内,但由于您会看到结果在0下溢,因此很难减去值:uint8(4) - uint8(10)
为{{ 1}} ...
因此,您可能希望使用范围为0..1的像素值的0
将img
转换为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);