matlab convhull 离散点集获得边界

由于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);

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值