2012-02-25 124 views
1

我有一個二進制圖像,這是另一種彩色圖像的分割形式。如何在MATLAB中乘以二進制圖像和RGB圖像?

如您所知,二進制圖像是2-d,但rgb圖像是3-d,我如何將它們相乘?

我想這代碼產生了奇怪的圖片

function skinCrop(bwSkin,colorSkin) 

for i = 1:size(colorSkin,1) 
    for j = 1:size(colorSkin,1) 
     if bwSkin(i,j) == 0 
      colorSkin(i,j,:) = 0; 
     end 
    end 
end 
imshow(colorSkin); 
end 

原始圖像enter image description here

產生的圖像是:

enter image description here

我希望它是一個反對黑暗背景的手,那麼爲什麼右邊部分會出現這種方式呢?

回答

1

您使用了錯誤的尺寸長度爲你的第二個維度:

for j = 1:size(colorSkin,1) 

應該

for j = 1:size(colorSkin,2) 
+0

謝謝,這工作! – 2012-02-25 21:01:06

2

你應該避免循環時,在MATLAB不需要:

mask = cat(3,bwSkin,bwSkin,bwSkin); 
output = mask.*colorSkin; 

你可能必須更改類型以使乘法成功:

output = uint8(mask).*colorSkin; 

或者:

output = double(mask).*colorSkin; 
+0

爲什麼不使用'bsxfun'? – Shai 2012-12-12 16:26:20

+0

@Shai - 將它添加爲答案... – zenpoy 2012-12-13 08:05:53

0

一種更有效的方式做乘法是

function mult = skinCrop(bwSkin, colorSkin) 
% 
% multiplying 3D color image with 2D mask 
% 

mult = nsxfun(@times, bwSkin, colorSkin); 

% show the result 
imshow(mult); title('skin cropped image'); 

由於@zenopy注意,你可能需要您的變量轉換爲double類型。