点云学习(3)-奇异值分解&表面曲率

1.奇异值分解

average_data = np.mean(data, axis=0)  # 求均值
decentration_matrix = data - average_data  # 去中心化
H = np.dot(decentration_matrix.T, decentration_matrix)  # 求解协方差矩阵 H
eigenvectors, eigenvalues, eigenvectors_T = np.linalg.svd(H)  # SVD求解,特征向量,特征值

2.求表面曲率

cloud = o3d.io.read_point_cloud("C:/Users/HP/Desktop/Open3D/pcl-learning/data/table_scene_lms400_downsampled.pcd")

kdtree = o3d.geometry.KDTreeFlann(cloud)
num_points = len(cloud.points)
points = np.asarray(cloud.points)
k, idx, _ = kdtree.search_radius_vector_3d(cloud.points[100], 0.03)

neighbors = points[idx, :]

data=neighbors

average_data = np.mean(data, axis=0)  # 求均值
decentration_matrix = data - average_data  # 去中心化
H = np.dot(decentration_matrix.T, decentration_matrix)  # 求解协方差矩阵 H
eigenvectors, eigenvalues, eigenvectors_T = np.linalg.svd(H)  # SVD求解特征值、特征向量

if 1:
    sort = eigenvalues.argsort()[::-1]  # 降序排列
    eigenvalues = eigenvalues[sort]  # 索引
w=eigenvalues
delt = np.divide(w[2], np.sum(w), out=np.zeros_like(w[2]), where=np.sum(w) != 0)

注:

np.divide() 将第一个数组中的数组元素除以第二个元素中的元素(所有情况均逐个元素发生)。 arr1和arr2必须具有相同的形状,并且arr2中的元素不能为零;否则会引发错误。

W_update=np.zeros_like(W):函数主要是想实现构造一个矩阵W_update,其维度与矩阵W一致,并为其初始化为全0;这个函数方便的构造了新矩阵,无需参数指定shape大小

### 点云配准的数学基础 点云配准是指将两个或多个来自不同视角或时间的三维数据集对齐的过程。为了实现精确匹配,通常依赖于几何特征和优化技术。 #### 迭代最近点算法 (ICP) ICP 是一种广泛使用的点云配准方法。该算法通过最小化两组对应点之间的距离来寻找最佳刚体变换矩阵 \( T \)[^1]。具体过程如下: 给定源点云 \( P=\{p_1, p_2,...,p_n\} \) 和目标点云 \( Q=\{q_1,q_2,...,q_m\} \),其中 n 和 m 表示各自点的数量。假设存在一个未知的旋转和平移组成的仿射变换 R,t 可以使 P 中每一点映射到最接近它在 Q 的位置,则 ICP 尝试求解下述问题: \[ min_{R,t}\sum^n_{i=1}{||Rp_i+t-q'_i||^2}, q'_i ∈Q \] 这里 \( q'_i \) 表示与 \( p_i \) 对应的最佳匹配点。此方程可通过奇异值分解(SVD) 或其他数值分析手段得到解析解[^2]。 #### 正态分布变换配准 (NDT) 不同于直接操作离散点的方法,NDT 使用连续概率密度函数描述局部形状特性。对于每一个单元格内的点集合 C,计算其协方差矩阵 Σ 并估计高斯混合模型参数 μ,Σ 。当两个扫描间重叠良好时,它们各自的 NDT 模型应该具有相似统计属性;反之则差异较大。因此可以通过最大化似然度来进行全局姿态调整: \[ max_T L(T)=max_T ∏^{N}_{j=1}[∑^{M}_{k=1}w_kN(x_j;μ_k(t),Σ_k)] \] 此处 w_k 代表权重系数,\( x_j \) 属于移动点云而 \( μ_k(t),Σ_k \) 则由固定参照系下的观测值得出。 #### 基于特征不变性的配准 这类方法利用特定类型的稳定特征作为锚定点参与后续处理流程。例如 ORB/FPFH/NARF 特征提取器能够识别并量化表面曲率变化趋势,在此基础上建立索引表以便快速检索潜在关联项。一旦找到足够数量的一致性关系后便可以构建超图结构进而推导整体位姿转换规则。 ```python import open3d as o3d def icp_registration(source,target,max_correspondence_distance): reg_p2p = o3d.pipelines.registration.registration_icp( source, target, max_correspondence_distance, np.eye(4), o3d.pipelines.registration.TransformationEstimationPointToPoint()) return reg_p2p.transformation ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋进在AI路上的小李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值