2012-02-25 18 views
1

私は別のカラー画像のセグメント化された形式であるバイナリ画像を持っています。matlabでバイナリイメージとrgbイメージを乗算する方法は?

ご存じのように、バイナリイメージは2-dですが、rgbイメージは3-dです。どのようにそれらを掛け合わせることができますか?

私は、元の画像が得られる画像であっenter image description here

た奇妙PICに

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

私はそれがあることが予想暗い背景に手を差し伸べると、なぜ右の部分がそのように見えるのですか?

答えて

1

あなたは二次元の間違った寸法の長さを使用している:

for j = 1:size(colorSkin,1) 

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

ありがとうございます! –

2

あるべきMATLABで必要とされないときは、ループを回避する必要があります。

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

あなたは乗算が成功するためにタイプを変更する必要があるかもしれません:

output = uint8(mask).*colorSkin; 

または:

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

なぜ 'bsxfun'を使わないのですか? – Shai

+0

@Shai - 答えとして追加... – zenpoy

0

乗算を行うためのより効率的な方法は、@zenopyが指摘したように、あなたはdouble型にあなたの変数をキャストする必要があるかもしれません

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'); 

です。

関連する問題