2012-02-25 119 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类型。

相关问题