自学内容网 自学内容网

基于最大相邻夹角的边缘点提取(matlab)

1、背景介绍

       边缘点是指点云数据中代表物体或场景几何形状突变的那些点。在三维点云中,边缘点通常标志着不同表面或物体的分界,或者是物体表面上的不规则性,如裂缝、棱角、突起等。点云边缘检测的作用非常重要,最常见是进行特征点检测、三维重建。如下所示,为利用探测得到的边缘点进行三维重建。

  2、边缘点提取原理

       本次介绍一种基于相邻最大夹角提取边缘点方法,其原理是根据近邻点分布规律,实现边缘点检测。如下图所示,边缘点的近邻点,均匀分布在其四周;非均匀点的近邻点,则有一侧没有近邻点,甚至其近邻点只分布在某一侧。因此基于这一特征,实现边缘提取。

      具体来说,将待判断点p与周其近邻点相连构成线段,计算相邻线段间所有夹角,选择最大夹角对此进行判断。如下图蓝色箭头所示点,边缘处最大夹角大于角度阈值\alpha。对于非边缘处点,由于近邻点都分布在判断点周边,边缘处最大夹角小于\alpha。因此,可以根据最大相邻角度,是否大于角度阈值,来实现边缘点检测。

      对于待判断点O,计算其相邻点之间夹角如下:

(1)选取某一方向作为初始方向,使用kdtree搜索得到k个近邻点,对每个近邻点根据其x与y坐标计算其相对于起始方向\underset{ON}{\rightarrow}的旋转角\alpha _{i}

(2)将上述计算获得的旋转角按照升序进行排序,相邻点之间的夹角\delta可按照下式计算得到:

(3)选择最大的夹角δ最为点O的最大夹角,并依据δ与阈值\delta _{0}进行比较,判断其是否为边缘点。若大于\delta _{0},则判断该点为边缘点;否则,判断其为非边缘点。

注意:仅仅依据上述原理,只能实现近似水平平面点云边缘提取,若要提取三维边缘点,则需要将三维点投影在微切面,过程较为复杂,具体可参考博客:基于微切面的最大夹角约束的边缘点提取_仰望星空_LiDAR的博客-CSDN博客

3、代码测试与结果

      基于matlab语言编写的代码,实现点云边缘提取,其中利用matlab中自带的kdtree搜索近邻点,提高算法效率。

源代码下载链接:https://download.csdn.net/download/qq_32867925/89512495

具体包括如下:

3.1 数据一测试

     该点云数据形状为三角形,近邻点设置为20,夹角阈值设置成90,提取结果如下所示。可以发现,提取的边缘点效果比较理想,边缘点位于整个点云边界处,效果理想,证明本程序的准确。

原始点云边缘点边缘点与非边缘点

3.2 数据一测试

      该测试数据为一带有孔洞的点云数据,仍将近邻点设置为20,夹角阈值设置成90,提取结果如下所示。可以发现,提取的边缘点效果比较理想,边缘点位于整个点云边界处,效果理想,证明本程序的准确。

原始点云边缘点边缘点与非边缘点

4、总结

      介绍了一种基于最大相邻夹角的边缘点提取方法,并利用matlab将其实现,测试结果比较理想。


原文地址:https://blog.csdn.net/qq_32867925/article/details/140159997

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!