2015-02-24 3 views
2

Я использую функцию контура в Matlab, чтобы нарисовать границу изображения I, которая колеблется от -2 до 2. Это делается ниже. Я хочу нарисовать новые контурные перекрытия в текущем контуре в изображении orignal.Нарисуйте два контура в изображении по matlab

Этот цвет контур желтый цвет. Желтый контур создается на основе положения в маске. Обратите внимание, что маска выводится из изображения orignal, но только выбирает какое-то положение в качестве нижнего рисунка. Мой ожидаемый результат такой, как вывод изображения. Не могли бы вы помочь мне решить мою проблему?

Это мой код, чтобы нарисовать контур в Orignal Image

%% Draw contour in Orignal 
%%Create image I 
I= ones(10)*2; 
I(3:8,3:8) = -1; 
I(5:6,5:6) = -2; 
I(3:8,3)=1; 
I(3:8,8)=1; 
I(8,3:8)=1; 
I(3,3:8)=1; 
%% Mask 
mask=zeros(10); 
mask(3,5:6) = 1; 
mask(5:6,3) = 1; 
mask(4,5:6) = -1; 
mask(5:6,4) = -1; 
imagesc(uint8(I),[-2 2]),colormap(gray),axis off;axis equal, 
hold on 
[c,h] = contour(I,[0 0],'r','Linewidth',3); 

enter image description here UPDATE ВОПРОС: На основании sugeestion Даниила, его код хорошо работают над входом. Тем не менее, я проверяю новый вход, он не работает. См. Новый вход

I=[ 2  2  2  2  2  2  2  2  2 
     2  2  2  1  1  2  2  2  2 
     2  1  1 -1 -1  1  2  2  2 
     2 -1 -1  0 -1  1  2  2  2 
     1 -1  0 -1  1  2  2  2  2 
     1 -1 -1  1  2  2  2  2  2 
     1 -1  1  2  2  2  2  2  2 
     1  1  2  2  2  2  2  2  2 
     2  2  2  2  2  2  2  2  2]; 
mask=[ NaN NaN NaN NaN NaN NaN NaN NaN NaN 
     NaN NaN NaN NaN NaN NaN NaN NaN NaN 
     NaN NaN NaN NaN NaN NaN NaN NaN NaN 
     NaN NaN NaN NaN -1  1 NaN NaN NaN 
     NaN NaN NaN -1  1 NaN NaN NaN NaN 
     NaN NaN -1  1 NaN NaN NaN NaN NaN 
     NaN -1  1 NaN NaN NaN NaN NaN NaN 
     NaN  1 NaN NaN NaN NaN NaN NaN NaN 
     NaN NaN NaN NaN NaN NaN NaN NaN NaN]; 

%%Daniel code 
imagesc(uint8(I),[-2 2]),colormap(gray),axis off;axis equal, 
hold on 
[c,h] = contour(I,[0 0],'r','Linewidth',3); 
[c,h] = contour(mask,[0 0],'g','Linewidth',3); 

Это выход. Что происходит с вышеуказанным кодом. Не могли бы вы исправить это? enter image description here

+2

Было бы хорошо, если бы вы добавили код, который генерирует эти данные. Сделать это легко для людей ... – kkuilla

ответ

1

Вы инициализировали свою маску нулем, что создало еще несколько контуров, чем вы предполагали. С нан инициализировать

%% Draw contour in Orignal 
%%Create image I 
I= ones(10)*2; 
I(3:8,3:8) = -1; 
I(5:6,5:6) = -2; 
I(3:8,3)=1; 
I(3:8,8)=1; 
I(8,3:8)=1; 
I(3,3:8)=1; 
%% Mask 
mask=nan(10); 
mask(3,5:6) = 1; 
mask(5:6,3) = 1; 
mask(4,5:6) = -1; 
mask(5:6,4) = -1; 
imagesc(uint8(I),[-2 2]),colormap(gray),axis off;axis equal, 
hold on 
[c,h] = contour(I,[0 0],'r','Linewidth',3); 
[c,h] = contour(mask,[0 0],'g','Linewidth',3); 

Что касается вашего обновления:

Ваша маска не определяет контур, ему не хватает многих окружающих элементов. Попробуйте увеличить маску:

mask=nan(size(I)); 
mask(4:8,2:6)=I(4:8,2:6); 
+0

Спасибо Даниэлю так много, Однако маска - это вход от другой функции, которая создает такой код. Основываясь на вашем коде, я должен преобразовать свою маску в NaN. Как преобразовать его в ту же маску из моей маски – user8264

+2

Используйте 'mask (mask == 0) = nan' для преобразования. – Daniel

+0

Посмотрите мой вопрос с обновлением (новый ввод), ваш код не работает. Не могли бы вы помочь мне? – user8264

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