我有一个二进制图像,它是另一个彩色图像的分段形式。
如您所知,二进制图像是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
原始图片为
生成的图像是:
我预计它会成为一个黑暗背景的手,所以为什么正确的部分会出现?
答案 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
类型。