我想從對象的圖片中減去背景以僅留下前景對象。我已經使用imshow()發現背景的RGB值爲218 220 219。我如何使用imsubtract()的RGB值?使用imsubtract(線55) X和Y從圖像中減去背景
y = [218 220 219];
z = imsubtract(img,y);
錯誤必須具有相同的尺寸和類,或Y必須是標量加倍。
我想從對象的圖片中減去背景以僅留下前景對象。我已經使用imshow()發現背景的RGB值爲218 220 219。我如何使用imsubtract()的RGB值?使用imsubtract(線55) X和Y從圖像中減去背景
y = [218 220 219];
z = imsubtract(img,y);
錯誤必須具有相同的尺寸和類,或Y必須是標量加倍。
您可以使用bsxfun做
z = bsxfun(@minus, img, permute([218 220 219], [1 3 2]));
你需要注意的數據類型和範圍。如果img
的類型爲uint8
,則像素值將在範圍0..255之間,但難以減去值,因爲您會看到結果在0處下溢: ...
因此,您可能需要將img
到double
使用im2double
,其像素值範圍在0..1。在這種情況下,您必須將「灰色」矢量[2218 220 219]
轉換爲0..1範圍除以255
。
所以,一個更完整的解決方案將是
z = bsxfun(@minus, im2double(img), permute([218 220 219]/255, [1 3 2]));
下最終得到我更接近我一直在尋找的答案,但沒有你的指導!
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);
-1 www.mathworks.com/help/matlab/ref/size.html)。 (b)在Matlab中使用['i'和'j'作爲變量](http://stackoverflow.com/q/14790740/1714410)和(c)使用嵌套循環代替[tag:bsxfun]。 – Shai
您的img是一個'mxnx3'矩陣。 3個組件對應紅藍綠色。你的'y'也在這些組件中。你想要的是減去'img(:,:,1)-218'等等。 –
@TheMinion也許我的想法是錯誤的,但使用你的建議只留下一個沒有顏色的圖像[220 220 220]。 – Jak