1、背景介绍
三维点云密度比较高,可以根据点云数据精确计算物体表面面积,如建筑物水平占地面积、室内房间墙面面积等,如下图,这在实际应用中具有非常重要的作用。其实归根到底,计算上述面积,可以认为计算平面面积。
2、原理介绍
前面介绍过2种计算平面点云面积,分别为格网法、边缘点法。感兴趣的可以参考如下链接:
详解平面点云面积计算_c++ 鞋带 面积-CSDN博客
平面点云面积计算的两种方式-CSDN博客
今天介绍一种基于Delaunay三角网方法估算平面点云方法,为什么Delaunay三角网可以计算平面点云面积呢?结合下面图进行讲解。如下图所示,为6个点生成的Delaunay三角网,可以发现这几个点构成的区域被划分成6个三角形区域。如果把每个三角形面积计算出来,再求和即可获取点云所占的平面面积。基于Delaunay三角网方法就是根据上述思想,实现点云面积估算。
具体来说,首先对原始点云构建Delaunay三角网,对于每个三角形,利用三个点的坐标计算其面积。若三个点坐标为p1(x1,y1)、p2(x2,y2)、p3(x3,y3),那么该三角形面积为:
0.5 * abs(x1 * y2 - x2 * y1 + x2 * y3 - x3 * y2 + x3 * y1 - x1 * y3)
每个三角形面积计算得到,进行求和,即可计算出该点云所占面积。
3、代码测试与结果
本程序基于python代码进行编写,在pycharm平台上进行运行,结合三方库scipy中Delaunay构建三角网。源代码下载链接如下:https://download.csdn.net/download/qq_32867925/89567911
该源代码包括两块测试数据,以及基于格网法计算点云面积。下载后,在pycharm上进行运行,点击绿色三角形进行运行。
3.1 测试数据一
如下图所示,为一规则的矩形点云,其长宽分别为33.318、16.006,理论上面积为533.287。使用格网法、Delaunay三角网法,计算的面积如下。可以发现,Delaunay三角法计算的面积,更加接近真实值,为532.0625。图中是根据点云构建的Delaunay三角网,由于点之间比较近,所以三角网看起来比较密集。而格网法计算的面积为578,相对来说不是那么准确,但可以通过调整格网尺寸大小,实现面积估算。
三角网局部放大图 |
3.2 测试数据二
使用不规则点云进行计算,如下图为一三角形点云,相关参数如下,底长、高分别为35.875、24.507,其面积为439.594。使用格网法、Delaunay三角网法,计算的面积如下。可以发现,Delaunay三角法计算的面积,更加接近真实值,为459.953。而格网法计算的面积为491,相对来说不是那么准确。两种方法均出现一定偏差,原因是点云部分确实,如仔细看点云边缘处,如左下角处、右侧边缘等,不分点缺失,造成了计算值与真实值之间,存有一定偏差。
整个三角网 | 局部三角网放大图 |
4、总结
详细介绍了Delaunay三角网计算点云面积,并结合python编程,给出了测试结果。相比较格网法,该方法计算更加精确,同时不需要提取边缘点,相比较边缘点法更加简单。