基于最大相邻夹角的边缘点提取(matlab)
1、边缘点提取原理
本次介绍一种基于相邻最大夹角提取边缘点方法,其原理是根据近邻点分布规律,实现边缘点检测。如下图所示,边缘点的近邻点,均匀分布在其四周;非均匀点的近邻点,则有一侧没有近邻点,甚至其近邻点只分布在某一侧。
具体来说,将待判断点p与周其近邻点相连构成向量,计算相邻向量间所有夹角,选择最大夹角对此进行判断。如下图蓝色箭头所示点,边缘处最大夹角大于角度阈值。对于非边缘处点,由于近邻点都分布在判断点周边,边缘处最大夹角小于。因此,可以根据最大相邻角度,是否大于角度阈值,来实现边缘点检测。
2、代码测试与说明
基于MATLAB GUI编写的程序,下载链接:https://download.csdn.net/download/qq_32867925/90961393
包括MaxAngleExtractionGUI.fig与MaxAngleExtractionGUI.m文件,分别为GUI界面与执行代码。
直接双击MaxAngleExtractionGUI.m,点击运行按钮即可运行程序,如下图所示。
运行界面如下图所示,其可以灵活设置近邻点数量、角度阈值,实现边缘点精细化提取。该功能包括点云数据加载打开(txt、xyz格式)、点云边缘提取及结果展示、清屏处理。同时还可以统计耗时情况。
2.1 不同近邻点数影响
knn控制近邻点数量,如下图展示了不同knn数量对结果的影响。整体上来看,knn设置适中时,提取结果比较好。knn设置过小,结果不理想。
![]() | ![]() |
knn=10 angle=120 | knn=15 angle=120 |
![]() | ![]() |
knn=20 angle=120 | knn=30 angle=120 |
2.2 角度阈值影响
在knn保持不变的情况下,调整角度阈值,可以发现提取的精细化程度不同。
![]() | ![]() |
knn=20 angle=30 | knn=20 angle=60 |
![]() | ![]() |
knn=20 angle=90 | knn=20 angle=120 |