Добавить наложенное изображение поверх другого изображения

#image #matlab #image-processing #image-segmentation

#изображение #matlab #обработка изображений #изображение-сегментация

Вопрос:

Предположим, что у меня есть изображение RGB RGB и двоичное изображение binary , которое содержит результат сегментации изображения RGB . Как нарисовать изображение binary поверх изображения «RGB` и показать сегментацию в виде красной прозрачной области? Я попробовал следующее, но получил сообщение об ошибке. Пожалуйста, помогите мне найти лучший способ в MATLAB

 I=imread('RGB.png');
[M,N,C] = size(I);
h=imshow(I);
alpha= imread('binary.png');
alpha = cat(3,alpha,zeros(M,N), zeros(M,N));
set(h, 'AlphaData', alpha);
  

Вот входные изображения:

RGB

двоичный

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

1. Есть ли шанс, что вы могли бы опубликовать входные изображения?

2. @MichaelTr7 опубликовал

Ответ №1:

Вот способ добавления красных наложений в выбранные области маски. В эти скрипты можно внести изменения, чтобы заполнить оставшиеся области белым или черным цветом. Интересующие области на маске выбираются с помощью логического массива.

Наложение красного на белую область маски

Наложенное изображение 1

 Overlay_Opacity = 0.5;

Image =imread('RGB.png');
imshow(Image);

Red_Channel = imread('binary.png');
White_Mask_Region = Overlay_Opacity*(Red_Channel ~= 0);

Overlay_Image(:,:,1) = White_Mask_Region;
Overlay_Image(:,:,2) = 0;
Overlay_Image(:,:,3) = 0;

hold on
Overlay = image(Overlay_Image);
Overlay.AlphaData = White_Mask_Region;
saveas(gcf,'Overlay_1.png');
  

Наложение красного на черную область маски

Наложенное изображение 2

 Overlay_Opacity = 0.5;

Image =imread('RGB.png');
imshow(Image);

Red_Channel = imread('binary.png');
Black_Mask_Region = Overlay_Opacity*(Red_Channel == 0);

Overlay_Image(:,:,1) = Black_Mask_Region;
Overlay_Image(:,:,2) = 0;
Overlay_Image(:,:,3) = 0;

hold on
Overlay = image(Overlay_Image);
Overlay.AlphaData = Black_Mask_Region;
saveas(gcf,'Overlay_2.png');
  

Ответ №2:

Вы просто используете свой двоичный alpha файл (только один слой) как AlphaData .

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

1. но это не создает прозрачное красное наложение

2. Это правда, но именно так работает альфа. Если вы хотите модулировать каналы RGB отдельно, вам нужно будет соответствующим образом вычислить изображение, например: I (:,:, 1) = I (:,:, 1) .* alpha_R background .* (1-alpha_R) для красного канала и аналогично для других каналов. Если вам нужен только красный канал, вы можете сделать я(:,:,2:3)=0 перед нанесением одного слоя alpha.

Ответ №3:

Если у вас есть панель инструментов обработки изображений, эта функция будет делать то, что вы хотите:

https://www.mathworks.com/help/images/ref/labeloverlay.html

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

1. Это потрясающее решение!!! Я понятия не имел, что это существует.