2016-10-05 4 views
0

После обнаружения границы моих областей, представляющих интерес в RGB изображение, которое я хочу, чтобы заполнить их с определенным цветом на оригинальной картинкеНаполнение область RGB изображения определяется многоугольник в Matlab

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(), а не рисовать области на нем, но не знаю, как сохранить его в исходном разрешении.

+2

Вы можете загрузить 'I.png' где-то и ссылку на него в вашем вопросе. Я хотел бы добавить, что для заполнения вас не волнует _boundary_, а о _area_. –

+0

Подождите ... У вас уже есть все внутри границы в белом цвете в 'BW'. Вам просто нужно преобразовать 'BW' в RGB-изображение, а затем установить R и G в ноль –

ответ

1

Если вы настаиваете на заполнение полигона, вы можете использовать fill, но тогда вы можете столкнуться с некоторыми проблемами:

img = imread('Prueba.jpg'); 
figure; 
imshow(img) 

enter image description here

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 

enter image description here

Как показано в этом примере , есть области изображения, которые окружены границей, но на самом деле они должны быть снаружи границы.

Вместо этого, таким образом, вы можете избежать вопроса:

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) 

enter image description here

Смежные вопросы