0%

墙面分割

区域生长分割region growing segmentation

算法核心:基于点法线之间角度的比较,尽量将满足平滑约束的相邻点合并在一起,以一簇点集的形式输出,视为相同平面

工作原理:区域增长从有最小曲率值curvature的点。则需要计算所有曲率值并进行排序;因为曲率最小的点位于平坦区域,从平坦区域增长可以减少区域的总数。(曲率与法线的求解方法类似,法线描述点在表面的法向,曲率则是法线间协方差矩阵的特征值,描述法向一致性)

具体过程:

  1. 对未标记点的曲率排序,将最小曲率点放入种子集
  2. 对每个种子的所有邻点计算
  3. 1 每个近邻点与当前点的法线角度差(reg.setSmoothnessThreshold),如果小于阈值则重点考虑,进入2.2判断
  4. 2 该点通过2.1法线角度差检验,如果曲率小于设定的阈值(reg.setCurvatureThreshold),这个点即被添加到种子点集,属于当前平面
  5. 通过两次检验的点,被从原始点云去除
  6. 设置最小点簇的点数reg.setMinClusterSize,以及最大簇reg.segMaxClusterSize
  7. 重复1-3生成min~max个点数的所有平面,并对不同平面标记颜色区分
  8. 直到算法在剩余点中生成的点簇不能满足min,停止工作