boundary()函数寻找三维平面点云精确边界(一)

假如我们通过多视图的重建得到了一块近似平面的点云数据如图,从侧面来看,图中的点并非统一在一个标准平面上

boundary()函数寻找三维平面点云精确边界(一)_第1张图片

 我们现在需要找出这样空间的近似平面点云的精细边界。

boundary函数

boundary函数是matlab里用来搜素点云边界的函数,其核心是alpha shape算法二维或三维空间内的一组点的边界 - MATLAB boundary- MathWorks 中国此 MATLAB 函数 返回一个表示包围点 (x,y) 的单个相容二维边界的点索引向量。点 (x(k),y(k)) 构成边界。与凸包不同,边界可以向内部收缩以包围这些点。https://ww2.mathworks.cn/help/matlab/ref/boundary.html#responsive_offcanvas

 alpha shape算法的应用大概就是下面这么个过程:

boundary()函数寻找三维平面点云精确边界(一)_第2张图片

这种包围圆的算法很容易理解,所以,手册里所提到的收缩因子所指的大概就是包围圆的半径了。半径越大,边界越粗糙,半径越小,边界越精细。

boundary()函数寻找三维平面点云精确边界(一)_第3张图片

但是,注意此时的边界是二维散点,boundary函数无法应用于三维的点云数据,图中可以看到此函数对于三维边界的的处理是构成网格并求体积。

boundary()函数寻找三维平面点云精确边界(一)_第4张图片

数据降维

既然matlab的内置算法只能够用于二维的点云,所以要想寻找三维空间近似平面点云我们首先想到的方法就是先降维再利用boundary进行二维边界的搜索,如图

boundary()函数寻找三维平面点云精确边界(一)_第5张图片

 这样的想法是将三维点映射到xy平面上(直接砍掉z轴坐标),就可以使用boundary函数轻松找出红豆沙投影点的边界了。但是这种做法存在一个非常明显的问题。如下图

boundary()函数寻找三维平面点云精确边界(一)_第6张图片

蓝色的原点点云构成了一个近似平面,把它看做我们要寻找边缘的主要基准平面。此时p点并不在基准平面附近,但是单纯在xy平面的投影点在基准平面之外,使用boundary函数找到的边界为绿色边界,事实上由于我们将蓝色基准平面投影到xy平面平面上实际要找的近似平面点云的边界是黄色点的边界。

由这种点云比较复杂而造成边界识别不准确的情况我们将在下一节进行处理。

你可能感兴趣的:(平面,几何学,边缘计算)