从3组对应点中求得最佳的旋转和平移变换

 问题陈述:已知:上图中颜色相同的点为两个点云之间的对应点,现在要利用3组对应点,来求解点云配准的最佳旋转、平移矩阵。这个变换叫做刚性变换或者欧式变换。

也就是要求解R,t:

B=R*A+t;

其中R,t是应用于数据集A的变换,以使其与数据集B对齐,尽可能最佳。

找到最佳刚性变换矩阵可以分解为以下步骤:

  1. 找到两个点集的重心;
  2. 将两个点集的重心都带到原点,然后找到最佳旋转矩阵R;
  3. 找到平移矩阵t

一、找到点云的重心

P = \ left [\ begin {array} {c} x \\ y \\ z \ end {array} \ right]

centroid_A = \ frac {1} {N} \ displaystyle \ sum \ limits_ {i = 1} ^ N P_A ^ i

centroid_B = \ frac {1} {N} \ displaystyle \ sum \ limits_ {i = 1} ^ N P_B ^ i

平移到原点是为了去除平移的影响,只考虑旋转。 

 

二、求解R

之后就是使用奇异值分解去求解,旋转矩阵R。 

H = \ displaystyle \ sum \ limits_ {i = 1} ^ Nï¼P_A ^ i  -  centroid_Aï¼ï¼P_B ^ i  -  centroid_Bï¼^ T

[Uï¼Sï¼V] = SVDï¼Hï¼

R = VU ^ T.

其中,H是协方差矩阵。

 三、求解t

平移矩阵

t = -R \ times centroid_A + centroid_B

 完成!

注意:只要存在至少3个点,所提出的解决方案就可以用于任何大小的数据集。当有超过3个点时,获得最小二乘解,使得以下误差最小化:

err = \ displaystyle \ sum \ limits_ {i = 1} ^ N \ left | \ left | RP_A ^ i + t -P_B ^ i \ right | \ right | ^ 2

 在这里,操作符|| || 是两个向量之间的欧几里德距离,即标量值。err只是两个数据集中各点之间的平方距离误差。

 

### 三维重建中的旋转平移变换 #### 概念解释 在三维重建领域,旋转平移变换用于描述物体或点云在一个三维空间内的位置变化。这些变换通常由两个主要部分成:旋转矩阵 \( R \) 平移向量 \( t \),合称为刚体变换矩阵 \( Rt \)[^1]。 - **旋转**:指围绕某个轴(通常是X、Y 或 Z 轴)改变对象的方向而不影响其大小或形状的操作。可以通过构建特定的旋转矩阵来表达这种操作。 - **平移**:指的是沿直线移动对象的位置,不涉及任何方向上的转动。这通过增加一个位移矢量到原始坐标上来完成。 对于给定的一源点集 P 目标点集 Q,在寻找最佳匹配时可以采用奇异值分解(SVD)的方求得最优解形式下的旋转平移参数。 #### 方与实现 为了计算从一已知点映射至另一相应点所需的旋转变换,可利用如下Python代码片段展示如何创建并应用绕Z轴旋转的角度θ: ```python import numpy as np import math angel_z = 90 # 设置旋转角度为90度 radian = angel_z * np.pi / 180 # 将角度转换成弧度制 Rotation_Matrix_Z = [ [math.cos(radian), -math.sin(radian), 0], [math.sin(radian), math.cos(radian), 0], [0, 0, 1] ] Rotation_Matrix_Z = np.array(Rotation_Matrix_Z) pointCloud = ... # 假设这里有一个3D点云数作为输入 p_rotated = np.dot(Rotation_Matrix_Z, pointCloud.T).T # 对点云执行旋转操作 ``` 当涉及到连续多次旋转时,则需依次叠加各个单独轴上的旋转效果;例如先绕Z轴转后再绕X轴转的情况可通过连乘相应的旋转矩阵达成目的[^2]。 另外值得注意的是,在实际应用场景中获取两帧图像间的关系并非简单的在同一坐标系内做几何运算,而是要考虑到它们可能处于不同的参照框架之下,因此所讨论的实际上是同一物理实体于不同观测视角间的线性映射关系[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值