河北 保定 网站建设,wordpress修改html,网站的推广代码是什么,鹤壁网站建设费用序号内容1【数理知识】自由度 degree of freedom 及自由度的计算方法2【数理知识】刚体 rigid body 及刚体的运动3【数理知识】刚体基本运动#xff0c;平动#xff0c;转动4【数理知识】向量数乘#xff0c;内积#xff0c;外积#xff0c;matlab代码实现5【数理知识】最…序号内容1【数理知识】自由度 degree of freedom 及自由度的计算方法2【数理知识】刚体 rigid body 及刚体的运动3【数理知识】刚体基本运动平动转动4【数理知识】向量数乘内积外积matlab代码实现5【数理知识】最小二乘法从线性回归出发数值举例并用最小二乘法求解回归模型6【数理知识】最小二乘法一般线性情况矩阵化表示过程最佳参数的求解公式过程7【数理知识】协方差随机变量的的协方差随机变量分别是单个数字和向量时的协方差8【数理知识】奇异值分解从数据的线性变换角度来理解9【数理知识】旋转矩阵的推导过程基于向量的旋转来实现同时解决欧式变换的非线性局限10【数理知识】已知 N3 个点在前后时刻的坐标求刚体平移矩阵旋转矩阵且这 N3 点间距离始终不变代表一个刚体 文章目录 1 解决流程1. 找寻质心Centroid2. 奇异值分解SVD3. 通过协方差矩阵得到旋转矩阵4. 计算平移矩阵 2 举例验证 11. 找寻质心Centroid2. 计算协方差矩阵3. 奇异值分解4. 计算平移矩阵 Ref 存在有 N ≥ 3 N\ge 3 N≥3 个点它们两两之间距离始终不变这就满足了可代表一个刚体的条件。同时已知这 N ≥ 3 N\ge 3 N≥3 个点在前后时刻的坐标如何求对应刚体的平移矩阵旋转矩阵
如下图所示对应点的颜色相同 R R R 是旋转 t t t 是平移。我们希望找到能将数据集 A A A 中的点对齐到数据集 B B B 的最佳旋转和平移。这种变换有时被称为欧几里得变换Euclidean或刚性变换Rigid transform因为它保留了形状和大小。这与仿射变换不同后者包括缩放和剪切。
这个问题尤其出现在三维点云数据注册等任务中因为这些数据是从三维激光扫描仪或流行的 Kinect 设备等硬件中获取的。 接下来的描述中我们为了和图中情况保持一致我们都假设 N 3 N 3 N3。
1 解决流程
旋转和平移的方程式可以表示为如下形式 R A t B \begin{aligned} RA t B \end{aligned} RAtB
最终目的是求取最合适的 R R R 和 t t t。
至于为什么可以这么表示请参考文章开头所提及到的其他文章。
1. 找寻质心Centroid
这一步也比较简单质心就是 N 3 N 3 N3 个数据点的平均值 Centroid A 1 3 ∑ k 1 3 A k Centroid B 1 3 ∑ k 1 3 B k \begin{aligned} \text{Centroid}_{A} \frac{1}{3} \sum_{k1}^{3} A_k \\ \text{Centroid}_{B} \frac{1}{3} \sum_{k1}^{3} B_k \end{aligned} CentroidACentroidB31k1∑3Ak31k1∑3Bk
其中 A k A_k Ak 和 B k B_k Bk 分别表示在数据集 A A A 和 B B B 中第 k k k 个数据点的坐标。 2. 奇异值分解SVD
有几种方法可以找到点之间的最佳旋转。最简单的方法是使用奇异值分解SVD因为许多编程语言Matlab、Octave、使用 LAPACK 的 C 语言、使用 OpenCV 的 C 语言…都可以使用这个函数。SVD 就像线性代数中的一根神奇魔杖可以解决各种数值问题。这里不会详细介绍它的工作原理而会介绍如何使用它。你只需要知道SVD 可以将一个矩阵称作 E E E分解/因式分解为另外 3 个矩阵即 [ U , S , V ] SVD ( E ) E U S V T \begin{aligned} [U, S, V] \text{SVD} (E) \\ E U S V^\text{T} \end{aligned} [U,S,V]ESVD(E)USVT
如果 E E E 是方阵那么 U 、 S U、S U、S 和 V V V 的大小也相同。
3. 通过协方差矩阵得到旋转矩阵
要找到最佳旋转方式我们首先要重新调整两个数据集的中心使两个中心点都位于原点如下图所示。 这样就去除了平移部分只剩下旋转部分需要处理。下一步是累加一个矩阵称为 H H H然后使用 SVD 求出旋转如下所示 H ( A − Centroid A ) ( B − Centroid B ) T [ U , S , V ] SVD ( H ) R V U T \begin{aligned} H (A - \text{Centroid}_{A})(B - \text{Centroid}_{B})^\text{T} \\ [U, S, V] \text{SVD} (H) \\ R V U^\text{T} \end{aligned} H[U,S,V]R(A−CentroidA)(B−CentroidB)TSVD(H)VUT
其中 H H H 是我们熟悉的协方差矩阵。 A − Centroid A A - \text{Centroid}_{A} A−CentroidA 是用 A A A 减去 Centroid A \text{Centroid}_{A} CentroidA 中的每一列的操作。
需要注意的一点是要正确计算 H H H。它最终应该是一个 3 × 3 3 \times 3 3×3 矩阵而不是一个 N × N N \times N N×N 矩阵这里 N N N 是指点的数量而 3 3 3 是指数据的坐标 [ x , y , z ] [x,y,z] [x,y,z] 维度是 3 3 3。注意转置符号。它是在两个矩阵之间进行乘法运算这两个矩阵的实际维数分别是 3 × N 3 \times N 3×N 和 N × 3 N \times 3 N×3。乘法的顺序也很重要如果换一种方法就会变成是从 B B B 到 A A A 的旋转。
4. 计算平移矩阵
得到旋转矩阵 R R R 后平移矩阵 t t t 也就变得简单了。把质心代入开篇咱们提到的方程那么有 R A t B R × Centroid A t Centroid B t Centroid B − R × Centroid A \begin{aligned} RA t B \\ R \times \text{Centroid}_A t \text{Centroid}_B \\ t \text{Centroid}_B - R \times \text{Centroid}_A \end{aligned} RAtR×CentroidAttBCentroidBCentroidB−R×CentroidA 2 举例验证 1
假设有 3 3 3 个相对位置保持不变的点已知它们在数据集合 A A A 和数据集合 B B B 中的位置然后计算旋转矩阵 R R R 和平动矩阵 t t t。
在数据集合 A A A 中 点 1 1 1 的位置为 A 1 ( 1 , 2 , 3 ) A_1 (1, 2, 3) A1(1,2,3) 点 2 2 2 的位置为 A 2 ( 4 , 5 , 6 ) A_2 (4, 5, 6) A2(4,5,6) 点 3 3 3 的位置为 A 3 ( 7 , 8 , 9 ) A_3 (7, 8, 9) A3(7,8,9)。
在数据集合 B B B 中 点 1 1 1 的位置为 B 1 ( 2 , 3 , 4 ) B_1 (2, 3, 4) B1(2,3,4) 点 2 2 2 的位置为 B 2 ( 5 , 6 , 7 ) B_2 (5, 6, 7) B2(5,6,7) 点 3 3 3 的位置为 B 3 ( 8 , 9 , 10 ) B_3 (8, 9, 10) B3(8,9,10)。
计算思路为
先计算平移通过求取这些点在两个时刻的质心位置然后求差来得到平移矩阵
1. 找寻质心Centroid
这一步也比较简单直接代入样本数据 Centroid A ( 1 4 7 , 2 5 8 , 3 6 9 ) 3 ( 1 4 7 3 , 2 5 8 3 , 3 6 9 3 ) ( 4 , 5 , 6 ) Centroid B ( 2 5 8 , 3 6 9 , 4 7 10 ) 3 ( 2 5 8 3 , 3 6 9 3 , 4 7 10 3 ) ( 5 , 6 , 7 ) \begin{aligned} \text{Centroid}_{A} \frac{(147, 258, 369)}{3} (\frac{1 4 7}{3}, \frac{2 5 8}{3}, \frac{3 6 9}{3}) (4, 5, 6) \\ \text{Centroid}_{B} \frac{(258, 369, 4710)}{3} (\frac{2 5 8}{3}, \frac{3 6 9}{3}, \frac{4 7 10}{3}) (5, 6, 7) \end{aligned} CentroidACentroidB3(147,258,369)(3147,3258,3369)(4,5,6)3(258,369,4710)(3258,3369,34710)(5,6,7)
2. 计算协方差矩阵
根据公式 Cov ( X , Y ) i j ∑ k n 3 ( x k i − x ˉ i ) ( y k j − y ˉ i ) n − 1 \begin{aligned} \text{Cov} (X,Y)_{ij} \frac{\sum_k^{n3} (x_{ki} - \bar{x}_i)(y_{kj} - \bar{y}_i)}{n-1} \end{aligned} Cov(X,Y)ijn−1∑kn3(xki−xˉi)(ykj−yˉi)
可以得到协方差矩阵 Cov ( X , Y ) [ 3 3 3 3 3 3 3 3 3 ] \begin{aligned} \text{Cov} (X,Y) \left[\begin{matrix} 3 3 3 \\ 3 3 3 \\ 3 3 3 \\ \end{matrix}\right] \end{aligned} Cov(X,Y) 333333333
关于协方差矩阵的原理和求解方法可参考文章【数理知识】协方差随机变量的的协方差随机变量分别是单个数字和向量时的协方差。
3. 奇异值分解
可以直接使用 Matlab 进行奇异值分解可以得到 U [ − 0.5774 0.8165 − 0.0000 − 0.5774 − 0.4082 − 0.7071 − 0.5774 − 0.4082 0.7071 ] , S [ 9 0 0 0 0 0 0 0 0 ] , V [ − 0.5774 0.8165 0 − 0.5774 − 0.4082 − 0.7071 − 0.5774 − 0.4082 0.7071 ] U \left[\begin{matrix} -0.5774 0.8165 -0.0000 \\ -0.5774 -0.4082 -0.7071 \\ -0.5774 -0.4082 0.7071 \\ \end{matrix}\right], S \left[\begin{matrix} 9 0 0 \\ 0 0 0 \\ 0 0 0 \\ \end{matrix}\right], V \left[\begin{matrix} -0.5774 0.8165 0 \\ -0.5774 -0.4082 -0.7071 \\ -0.5774 -0.4082 0.7071 \\ \end{matrix}\right] U −0.5774−0.5774−0.57740.8165−0.4082−0.4082−0.0000−0.70710.7071 ,S 900000000 ,V −0.5774−0.5774−0.57740.8165−0.4082−0.40820−0.70710.7071 R V U T [ 1 0 0 0 1 0 0 0 1 ] R V U^\text{T} \left[\begin{matrix} 1 0 0 \\ 0 1 0 \\ 0 0 1 \\ \end{matrix}\right] RVUT 100010001
至此得到了旋转矩阵。
4. 计算平移矩阵 t Centroid B − R × Centroid A ( 1 , 1 , 1 ) \begin{aligned} t \text{Centroid}_B - R \times \text{Centroid}_A (1, 1, 1) \end{aligned} tCentroidB−R×CentroidA(1,1,1) Ref
FINDING OPTIMAL ROTATION AND TRANSLATION BETWEEN CORRESPONDING 3D POINTS从3组对应点中求得最佳的旋转和平移变换