2015-02-24 77 views
2

我使用matlab中的轮廓函数来绘制范围从-2到2的图像的边界。它由波纹管代码完成。我想在原始图像的当前轮廓中绘制一个新的轮廓重叠。通过matlab在图像中绘制两个轮廓

该颜色轮廓是黄色。黄色轮廓根据掩码中的位置创建。请注意,蒙版是从原始图像中提取的,但只能选择某个位置作为波纹图。我的预期结果是如输出图像。你能帮我解决我的问题吗?

这是我的代码画出轮廓原始图片

%% 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 2015-02-24 16:01:55

回答

1

您用0初始化了面具,创建了比您想要的轮廓更多的轮廓。与南

%% 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); 

关于你提到的更新Initalize:

你的面具没有定义的轮廓,它缺乏许多周围的元素。尝试更大的蒙版:

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

非常感谢Daniel,但是,mask是来自其他函数的输入,它处理我的代码。根据你的代码,我必须将我的面具转换为NaN。如何将其转换为与我的面具相同的面具 – user8264 2015-02-24 16:59:29

+2

使用'mask(mask == 0)= nan'来转换。 – Daniel 2015-02-24 17:00:20

+0

让我看看我的更新问题(新的输入),你的代码不能很好地工作。你能帮我吗? – user8264 2015-02-25 03:33:38