Как умножить двоичное изображение и изображение RGB в Matlab? - PullRequest
1 голос
/ 26 февраля 2012

У меня есть двоичное изображение, которое является сегментированной формой другого цветного изображения.

Как вы знаете, двоичное изображение - это 2-е изображение, а изображение RGB - это 3-е, как я могу их умножить?

Я попробовал этот код, который привел к странной картинке

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 ]

2 голосов
/ 26 февраля 2012

Вы должны избегать циклов, когда они не нужны в matlab:

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

Возможно, вам придется изменить типы для успешного выполнения умножения:

output = uint8(mask).*colorSkin;

Или:

output = double(mask).*colorSkin;
1 голос
/ 26 февраля 2012

Вы используете неправильную длину измерения для второго измерения:

for j = 1:size(colorSkin,1)

должно быть

for j = 1:size(colorSkin,2)
0 голосов
/ 13 декабря 2012

Более эффективный способ умножения -

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.

...