1

別のカラー画像のセグメント化された形式であるバイナリ画像があります。

ご存知のように、バイナリイメージは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

元の画像はここに画像の説明を入力してください

結果の画像は次のとおりです。

ここに画像の説明を入力してください

暗い背景の手だと思っていたのに、なぜ正しい部分がそのように見えるのでしょうか?

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

2番目のディメンションに間違ったディメンションの長さを使用しています:

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

double@zenopyが指摘したように、変数を型にキャストする必要があるかもしれません。

于 2012-12-13T11:27:38.607 に答える