2013-12-04 2 views
1

У меня есть одно изображение, содержащее две контурные линии. Я хочу заполнить разные цвета внутри этой контурной линии. Как его реализовать? Это мой код для рисования двух контурных линийКак заполнить цвет внутри нескольких контурных линий в matlab

function FillColorContour(Img,phi1,phi2,color1,color2) 
     imagesc(uint8(Img),[0 255]),colormap(gray),axis off;axis equal,title('FillColorContour') 
     hold on,[c,h1] = contour(phi1,[0 0],'r','linewidth',1); hold off 
     hold on,[c,h2] = contour(phi2,[0 0],'r','linewidth',1); hold off 
    end 

Чтобы использовать его. Я позвоню по команде:

 Img=imread('peppers.png'); 
     [Height Wide] = size(Img); 
     [xx yy] = meshgrid(1:Wide,1:Height); 
     phi1 = (sqrt(((xx - 60).^2 + (yy - 100).^2)) - 15); 
     phi2 = (sqrt(((xx - 100).^2 + (yy - 150).^2)) - 15); 

     FillColorContour(Img,phi1,phi2,'r','b') %Assume'r' is red, 'b' is blue 

Это перед https://www.dropbox.com/s/ll4npg3cmturt4c/contourex.PNG И это после пробега https://www.dropbox.com/s/pqi4rxluxfegxhn/contourexfill.png

+0

, пожалуйста, покажите примерные графики того, что у вас есть и что вы хотите получить. Вы уже посмотрели на 'contourf''? – thewaywewalk

+0

Я обновил то, что мне нужно. Пожалуйста, проверьте – user3051460

+0

+1 для использования примерного изображения, которое поставляется с Matlab! :-) –

ответ

2

Использование contourc вычислить контур и patch рисовать его как заливкой.

После вашего (prettified;) код

Img = imread('peppers.png'); 
[Height, Width] = size(Img); 
[xx, yy] = meshgrid(1 : Width, 1 : Height); 
imagesc(Img,[0 255]) 
axis off 
title('FillColorContour') 
phi1 = (sqrt(((xx - 60).^2 + (yy - 100).^2)) - 15); 

вычисления контура

cont = contourc(phi1, [0 0])'; 
cont = cont(2 : end, :);  % first line contains contour level and number of points; skip 

и сделать его как "заплатка":

patch(cont(:, 1), cont(:, 2), 'r', 'EdgeColor', 'w') 

Вы можете выбрать цвет заливки и цвет края отдельно; Я использовал красный и белый.

Результат:

filled contour

Для phi2 вам конечно нужно просто аналогичный код.

+0

Хорошая демонстрация 'contourc' и' patch'. – chappjc

+1

@A. Donda: Отличный код. Огромное спасибо. +1 – user3051460

+0

@A. Donda: Как насчет того, если у меня есть два круга одного объекта. Я хочу заполнить тот же красный corlor в этих кругах. Как это сделать? Предположим, что эти круги не соединяются вместе. Спасибо – user3336190

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