点云数据区域边界检测
本文介绍基于点云数据的区域边界检测。
一、点云数据区域边界检测相关函数
函数名 |
说 明 |
---|---|
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