基于机器学习的相邻时序植物点云配准总结

总结

代码部分

循环部分

在循环时需要注意利用 if 判断跳过的部分

例如通过某些特征值进行筛选,对特定的类别赋值时,不应忘记没有通过筛选的部分,要对这些部分也进行赋值,否则会导致赋值顺序与实际顺序无法对应

应用变换部分

在将点云应用变换矩阵的时候应该注意,该函数是否会改变原点云,若会改变则需要深复制点云进行保护

策略部分

归一化部分

数据集的归一化具有必要性

但是针对点云中坐标的归一化不能简单的使用最大最小值归一化,因为这可能会导致点云的压缩

针对点云坐标的归一化应该使用均值方差归一化,即 PointNetPointNet++ 所提出的归一化方式

1
2
3
4
5
6
7
import numpy as np

xyz = np.asarray(pcd.points) # pcd 为 open3D 的 PointCloud 类型
centroid = np.mean(xyz, axis=0) # 求取点云的中心
xyz = xyz - centroid # 将点云中心置于原点 (0, 0, 0)
m = np.max(np.sqrt(np.sum(xyz**2, axis=1))) # 求取长轴的的长度
xyz_norm = xyz / m # 将点云进行缩放

配准策略部分

直接对整个点云进行配准可能会面临叶片增加或减少情况,导致配准效果不佳

针对此情况,采取选取植株中最大的三片叶片,对这三片叶片进行计算特征后进行配准

暂时使用的配准方法是使用 open3D 库提供的配准方法

即 计算点云的 FPFH 特征,然后进行粗配准,再进行 ICP 精配准

叶片生长过程中叶片位置、形态可能会发生较大变化

导致相邻时序中选取的叶片并不对应,配准时陷入局部最优(叶片翻转或叶片垂直或叶片偏移)