#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