代码注释地址。
Point Cloud Segmentation
- Normal Calculation
- 先用 KNN 找临近点。
- 然后对这些点使用 PCA。
- 得到向量 ,曲率,点尺度(临近点间距离)
- Region Growing && Region Merging
Plane Based 3D Line Detection
- 3D-2D Projection
- 把上面区域生长拿到的平面点都取出来投影到估计的平面上。
- 根据第一个投影的点建立二维坐标系然后建立栅格。
- 2D Line Detection
- 上述栅格或者说二值图腐蚀膨胀。
- findContours
- 对每个 contour 进行递归的求解直线段。
- 2D-3D Re-projection
Post-processing
- Outliers Removal
- remove non-structural planes: 两个最长直线段所在方向的所有直线段长度加和,判断是否大于阈值
- remove non-structural lines: 当有大量结构化特征时,可以直接保留下来,或者单条线段质量足够好
- Line Merging
- 计算两个端点到另一条直线的垂直距离判断是否要合并。
- 计算两条直线间的 gap 比例判断是否要合并。
- 合并的时候需要注意代码中直线段以向量形式存储,要注意方向问题。