#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);
Вот входные изображения:
Комментарии:
1. Есть ли шанс, что вы могли бы опубликовать входные изображения?
2. @MichaelTr7 опубликовал
Ответ №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');
Наложение красного на черную область маски
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:
Если у вас есть панель инструментов обработки изображений, эта функция будет делать то, что вы хотите:
Комментарии:
1. Это потрясающее решение!!! Я понятия не имел, что это существует.