Область заполнения изображения RGB, заданного полигоном в Matlab

#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)
  

введите описание изображения здесь