我在matlab中使用轮廓函数来绘制图像I的边界,范围从-2到2.它由波纹管代码完成。我想在原始图像的当前轮廓中绘制一个新的轮廓重叠。
该颜色轮廓为黄色。根据蒙版中的位置创建黄色轮廓。请注意,蒙版是从原始图像中提取的,但只选择某个位置作为波纹图。我的预期结果是输出图像。你能帮我解决一下我的问题吗?
这是我在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);
更新问题:根据丹尼尔的说法,他的代码适用于上述输入。但是,我检查新输入,它不起作用。让我们看看新的输入
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);
这是输出。上面的代码会发生什么。你能解决它对我有帮助吗?
答案 0 :(得分: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);