1 对 每个点的球形领域内的所有点 计算散射矩阵(scatter matrix),并求取特征值 λ1,λ2,λ3(λ1>λ2>λ3),这里的球形领域的半径由用户设置。
2 计算每个点的,根据散射矩阵特征值λ1,λ2,λ3的约束,筛选出初始的关键点。
具体的约束是:λ2/λ1 <r21, λ3/λ2 <r32,这里的r21和r32由用户设置。然后初始的每个关键点 对应 一个特征值(也就是散射矩阵中的最小的特征值λ3)
3 然后对每个初始的关键点,以固定长度为半径,求k近邻点。这里的固定长度由用户设置。 如果得到的k近邻点比最少近邻点大, 且这个关键点比所有的近邻点的最小特征值都大的话,这个关键点就是最终求取的关键点,这个关键点的半径min_neighbors_ 由用户设置。
4本关键点算法也可以滤除掉边界的关键点
先把输入点云的边界点删除 具体的删除方式是: 对每个点,以固定半径求取k近邻。 这个半径由用户设置。 如果近邻点有点云的边沿点, 这个点就是边界点。
其中计算boundary点的时候,需要计算法向量,而法向量的半径需要人为设置。
| 1 iss_detector.setSalientRadius (iss_salient_radius_);
2
iss_detector.setThreshold21 (iss_gamma_21_); iss_detector.setThreshold32 (iss_gamma_32_);
3
iss_detector.setNonMaxRadius (iss_non_max_radius_); (设置非最大值抑制半径)
Void setMinNeighbors(int min_neighbors);
4 iss_detector.setBorderRadius (iss_border_radius_); iss_detector.setNormalRadius (iss_normal_radius_); |