#matlab #image-processing
#matlab #обработка изображений
Вопрос:
После нахождения границ интересующих меня областей на изображении RGB я хочу заполнить их определенным цветом на исходном изображении
img=imread('I.png');
BW=~im2bw(img,0.5);
B = bwboundaries(a2);
for k = 1:length(B)
boundary = B{k};
% here should color everything inside boundary in blue
end
Какую функцию я могу использовать для этого? Я попытался также использовать imshow() и затем нанести на него области, но не знаю, как сохранить его в исходном разрешении.
Комментарии:
1. Возможно, вы захотите
I.png
куда-нибудь загрузить и сослаться на него в своем вопросе. Я хотел бы добавить, что для целей заполнения вам важна не граница , а область .2. Подождите… У вас уже есть все внутри границы белым
BW
цветом. Вам просто нужно преобразоватьBW
в изображение RGB, а затем установить R и G равными нулю
Ответ №1:
Если вы настаиваете на заполнении polygon, вы можете использовать fill
, но тогда вы можете столкнуться с некоторыми проблемами:
img = imread('Prueba.jpg');
figure;
imshow(img)
BW = ~im2bw(img, 0.55);
B = bwboundaries(BW);
hold on
for k = 1:length(B)
boundary = B{k};
fill(boundary(:, 2), boundary(:, 1), 'b')
end
Как показано в этом примере, есть области изображения, которые окружены границей, но на самом деле они должны находиться за пределами границы.
Вместо этого, таким образом, вы можете избежать проблемы:
imgR = img(:, :, 1);
imgG = img(:, :, 2);
imgB = img(:, :, 3);
imgR(BW) = 0;
imgG(BW) = 0;
imgB(BW) = intmax(class(imgB));
IMG = cat(3, imgR, imgG, imgB);
figure; imshow(IMG)