Как получить передний план в двоичном изображении (MATLAB)

#matlab #image-processing

#matlab #обработка изображений

Вопрос:

У меня есть двоичное изображение позирующего человека, и я хочу проигнорировать фоновую (черную) часть и получить только передний план (сам человек, белый).
Я хочу, чтобы это объединило человека с другим фоном.

Я застрял здесь. Я не знаю, как продолжить:

 mypic = imread('model1.jpg');

binarymypic = im2bw(mypic);
  

Заранее спасибо.

Комментарии:

1. Получите изображение человека и соедините его с другим фоном. Мне ни для чего не нужен исходный фон.

Ответ №1:

Предполагая A B , что у вас есть и одинакового размера, вы можете скопировать нужные пиксели с A B помощью логической маски I :

 B(I) = A(I);
  

В этом случае A является mypic , I является binarymypic и B содержит фон.

РЕДАКТИРОВАТЬ: попробуйте:

 mypic = imread('model1.jpg');
backgroundimage = imread('background.jpg');

% Check assumptions
assert(size(mypic,3) == 3, 'Expecting true colour foreground image')
assert(size(mypic,3) == 3, 'Expecting true colour background image')
assert(isequal(size(mypic), size(backgroundimage)), 'Images should have the same size')

mask = im2bw(rgb2gray(mypic));

in = reshape(mypic, [], 3);
out = reshape(backgroundimage, [], 3);
out(mask,1) = in(mask,1); % Red
out(mask,2) = in(mask,2); % Green
out(mask,3) = in(mask,3); % Blue

finalimage = reshape(out, size(backgroundimage));
imshow(finalimage)
  

Комментарии:

1. Таким образом, код будет следующим: backgroundimage(логический (двоичный типичный)) = mypic(логический (двоичный типичный). Правильно? Как я могу увидеть это на изображении? (imshow)? Спасибо

2. Я бы предпочел написать mask = logical(im2bw(myypic)); backgroundimage(mask) = mypic(mask); , потому что так понятнее, в чем цель.

3. mypic = imread('model1.jpg'); backgroundimage = imread('background.jpg'); q = rgb2gray(mypic); binarymypic = im2bw(q); mask = logical(im2bw(mypic)); backgroundimage(mask) = mypic(mask); imshow(backgroundimage) Не могли бы вы сказать мне, что я делаю не так? Теперь модель выглядит как с «красным» цветом

4. Вам нужно скопировать каждый из 3 цветовых каналов отдельно. К сожалению, это не тривиально. Я обновлю свой ответ.

5. Это ОЧЕНЬ похоже на результат, который я хочу получить, но это не совсем то же самое. Дело в том, что на результирующем изображении отсутствуют некоторые пиксели изображения переднего плана. Но выглядит довольно здорово. Спасибо Nzbuu