由于matlab convhull获得的是每个转折点,要想根据这些转折点获得组成的边界,首先想到的是matlab里line或者plot函数,但是他们都是需要显示出一个figure,即使你设置了visual off 也会弹出一个figure。因此想到了使用matlab的plot或者line函数,但是使用type 或者是edit line 都会显示Built-in function.这说明这些是看不到的,已经进行过优化的东西,只是公司不给公开。所以想到了如何重新实现line函数得到其离散点边界问题。代码如下
load('xymn.mat');%xy是边界,mn是矩阵大小
h=convhull(x,y);%计算轮廓凸包
conv_mask=zeros(m,n);
for i=1:length(h)-1
x1=x(h(i));
y1=y(h(i));
x2=x(h(i+1));
y2=y(h(i+1));
if abs(x2-x1)>abs(y2-y1)
if(x1>x2)
x2=x(h(i));
y2=y(h(i));
x1=x(h(i+1));
y1=y(h(i+1));
end
if(x1==x2)
con_mask(y1:y2,x1)=255;
else
for j=x1:x2
conv_mask(y1+round((j-x1)*(y2-y1)/(x2-x1)),j)=255;
end
end
else
if(y1>y2)
x2=x(h(i));
y2=y(h(i));
x1=x(h(i+1));
y1=y(h(i+1));
end
if(y1==y2)
con_mask(y1,x1:x2)=255;
else
for j=y1:y2
conv_mask(j,x1+round((j-y1)*(x2-x1)/(y2-y1)))=255;
end
end
end
end
figure,imshow(conv_mask);