点云数据区域边界检测

网站首页    MATLAB    点云数据区域边界检测

本文介绍基于点云数据的区域边界检测。

一、点云数据区域边界检测相关函数

函数名

说  明

boundary

二维或三维点集的边界

alphaShape

二维(三维)点集的外包络多边形(多面体)

convhull

二维或三维凸包

convhulln

n维凸包

二、点云数据区域边界检测应用案例

【例1】二维点集的自然边界。

>> rng(1);
>> x = unifrnd(-1,1,[30,1]);
>> y = unifrnd(-1,1,[30,1]);
>> plot(x,y,'*');
>> k = boundary(x,y);
>> hold on;
>> plot(x(k),y(k),'r');

 

二维点集的自然边界

【例2】二维点集的凸包。

>> rng(1);
>> x = unifrnd(-1,1,[30,1]);
>> y = unifrnd(-1,1,[30,1]);
>> plot(x,y,'*');
>> k = boundary(x,y,0);
% k = convhull(x,y);
>> hold on;
>> plot(x(k),y(k),'r');
>> axis([-1.2,1.2,-1.2,1.2]);

 

二维点集的凸包

【例3】三维点集的自然边界。

>> rng(1);
>> P = unifrnd(-1,1,[30,3]);
>> plot3(P(:,1),P(:,2),P(:,3),'*');
>> k = boundary(P);
>> hold on;
>> trisurf(k,P(:,1),P(:,2),P(:,3),...
        'Facecolor','red','FaceAlpha',0.1);
>> grid on;

三维点集的自然边界

 

【例4】三维点集的凸包。

>> rng(1);
>> P = unifrnd(-1,1,[30,3]);
>> plot3(P(:,1),P(:,2),P(:,3),'*');
>> k = boundary(P, 0);
% k = convhull(x,y);
>> hold on;
>> trisurf(k,P(:,1),P(:,2),P(:,3),...
        'Facecolor','red','FaceAlpha',0.1);
>> grid on;

三维点集的凸包

 

【例5】判断点与多边形的包含关系。查找五角星区域内部和边界上的点。

>> xv = [0.5;0.2;1.0;0;0.8;0.5];  % 多边形上点的x坐标
>> yv = [1.0;0.1;0.7;0.7;0.1;1];  % 多边形上点的y坐标
>> xq = [0.1;0.5;0.9;0.2;0.4;0.5;0.5;0.9;0.6;0.8;0.7;0.2];
>> yq = [0.4;0.6;0.9;0.7;0.3;0.8;0.2;0.4;0.4;0.6;0.2;0.6];
>> [in,on] = inpolygon(xq,yq,xv,yv);
>> figure
>> plot(xv,yv)  % 绘制多边形
>> hold on
>> plot(xq(in&~on),yq(in&~on),'r+') % 绘制多边形内部点
>> plot(xq(on),yq(on),'k*') % 绘制多边形边界上点
>> plot(xq(~in),yq(~in),'bo') % 绘制多边形外部点
>> hold off

五角星区域内部和边界上的点

 

2019年11月4日 21:27
浏览量:0