1、背景介绍
边缘点是指点云数据中代表物体或场景几何形状突变的那些点。在三维点云中,边缘点通常标志着不同表面或物体的分界,或者是物体表面上的不规则性,如裂缝、棱角、突起等。点云边缘检测的作用非常重要,最常见是进行特征点检测、三维重建。如下所示,为利用探测得到的边缘点进行三维重建。
2、边缘点提取原理
本次介绍一种基于相邻最大夹角提取边缘点方法,其原理是根据近邻点分布规律,实现边缘点检测。如下图所示,边缘点的近邻点,均匀分布在其四周;非均匀点的近邻点,则有一侧没有近邻点,甚至其近邻点只分布在某一侧。因此基于这一特征,实现边缘提取。
具体来说,将待判断点p与周其近邻点相连构成线段,计算相邻线段间所有夹角,选择最大夹角对此进行判断。如下图蓝色箭头所示点,边缘处最大夹角大于角度阈值。对于非边缘处点,由于近邻点都分布在判断点周边,边缘处最大夹角小于。因此,可以根据最大相邻角度,是否大于角度阈值,来实现边缘点检测。
对于待判断点O,计算其相邻点之间夹角如下:
(1)选取某一方向作为初始方向,使用kdtree搜索得到k个近邻点,对每个近邻点根据其x与y坐标计算其相对于起始方向的旋转角;
(2)将上述计算获得的旋转角按照升序进行排序,相邻点之间的夹角可按照下式计算得到:
(3)选择最大的夹角δ最为点O的最大夹角,并依据δ与阈值进行比较,判断其是否为边缘点。若大于,则判断该点为边缘点;否则,判断其为非边缘点。
注意:仅仅依据上述原理,只能实现近似水平平面点云边缘提取,若要提取三维边缘点,则需要将三维点投影在微切面,过程较为复杂,具体可参考博客:基于微切面的最大夹角约束的边缘点提取_仰望星空_LiDAR的博客-CSDN博客
3、代码测试与结果
基于matlab语言编写的代码,实现点云边缘提取,其中利用matlab中自带的kdtree搜索近邻点,提高算法效率。
源代码下载链接:https://download.csdn.net/download/qq_32867925/89512495
具体包括如下:
3.1 数据一测试
该点云数据形状为三角形,近邻点设置为20,夹角阈值设置成90,提取结果如下所示。可以发现,提取的边缘点效果比较理想,边缘点位于整个点云边界处,效果理想,证明本程序的准确。
原始点云 | 边缘点 | 边缘点与非边缘点 |
3.2 数据一测试
该测试数据为一带有孔洞的点云数据,仍将近邻点设置为20,夹角阈值设置成90,提取结果如下所示。可以发现,提取的边缘点效果比较理想,边缘点位于整个点云边界处,效果理想,证明本程序的准确。
原始点云 | 边缘点 | 边缘点与非边缘点 |
4、总结
介绍了一种基于最大相邻夹角的边缘点提取方法,并利用matlab将其实现,测试结果比较理想。