1

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

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

原始图像是在此处输入图像描述

结果图像是:

在此处输入图像描述

我原以为它是一只黑背景的手,那为什么右边的部分会这样呢?

4

3 回答 3

2

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

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

您可能必须更改类型才能使乘法成功:

output = uint8(mask).*colorSkin;

或者:

output = double(mask).*colorSkin;
于 2012-02-26T11:08:59.040 回答
1

您为第二个维度使用了错误的维度长度:

for j = 1:size(colorSkin,1)

应该

for j = 1:size(colorSkin,2)
于 2012-02-25T20:57:49.723 回答
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类型。

于 2012-12-13T11:27:38.607 回答