点云规范化
需求: 使用传统方法规范化一个长方体形状的不完全点云
1. 分面
通过Open3D的平面提取算法依次提取平面, 同时还可以得到拟合平面的方程, 作为后续优化的初始值.
2. 平面规范化
对四个面创建误差方程, 注意要加上误差权重
- 点到面的距离最小
if (isPerpendicular) {
// 垂直
return (A1 * A2 + B1 * B2 + C1 * C2) * T(weight);
} else {
// 平行
return (normal1 * normal2 - abs(A1 * A2 + B1 * B2 + C1 * C2)) * T(weight);
}
- 面与面间的平行垂直误差最小
// a
residual[0] = spatialRelation(plane_a, plane_b, false);
residual[1] = spatialRelation(plane_a, plane_c);
residual[2] = spatialRelation(plane_a, plane_d);
// b
residual[3] = spatialRelation(plane_b, plane_c);
residual[4] = spatialRelation(plane_b, plane_d);
// c
residual[5] = spatialRelation(plane_c, plane_d);