如何在matlab中将二值图像和rgb图像相乘?

时间:2012-02-25 20:40:36

标签: matlab matrix-multiplication image-segmentation

我有一个二进制图像,它是另一个彩色图像的分段形式。

如您所知,二进制图像是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

我预计它会成为一个黑暗背景的手,所以为什么正确的部分会出现?

3 个答案:

答案 0 :(得分:2)

在matlab中不需要时应该避免循环:

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

您可能需要更改类型才能使乘法成功:

output = uint8(mask).*colorSkin;

或者:

output = double(mask).*colorSkin;

答案 1 :(得分:1)

您在第二维使用了错误的尺寸长度:

for j = 1:size(colorSkin,1)

应该是

for j = 1:size(colorSkin,2)

答案 2 :(得分: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类型。