求解空间两个三维坐标系之间的变换矩阵

本文介绍了如何利用三维刚体变换模型,通过Eigen库来求解两个三维坐标系之间的旋转和平移矩阵。核心在于理解转换矩阵T和位移向量t,通过至少3对对应点可以估计出变换参数。详细原理参考特定文献,并提供了经过验证的有效代码示例。
摘要由CSDN通过智能技术生成

三维刚体变换模型(即旋转/平移矩阵,RT矩阵)的估计方法

原理简单阐述:
只要算出变换矩阵,就可以算出A坐标系的一个点P在坐标系B里的对应点坐标,即在这里插入图片描述
T为3x3的转换矩阵, t 为3x1的位移变换向量,这里点坐标均为3x1的列向量(非齐次形式,齐次形式下为4x1列向量,多出的一个元素值补1而已)。
理论上只要给定至少3对点,就能计算出 T 和 t 。自然的,点对越多,计算出来的转换就越精确。
详细的原理请参考《Estimating 3-D Rigid Body Transformations: A Comparison of Four Major Algorithms》,它使用SVD方法计算 T 和 t 。
在这里插入图片描述

下面就话不多说,上代码。亲写亲测有效。

cv
要根据三维点坐标计算变换矩阵,需要知道变换前后的坐标系之间的关系。如果已知变换前后每个点的坐标,可以通过最小二乘法求解变换矩阵。 设变换前的三维点坐标为P1(x1, y1, z1),变换后的三维点坐标为P2(x2, y2, z2),变换矩阵为M,那么可以写出如下方程组: P1 * M = P2 其中,P1和P2都是3x1的矩阵,M是3x3的矩阵。由于方程组中有3个未知数(M的9个元素),至少需要3个点才能求解。 将上面的方程展开,得到以下9个方程: x1 * m11 + y1 * m21 + z1 * m31 = x2 x1 * m12 + y1 * m22 + z1 * m32 = y2 x1 * m13 + y1 * m23 + z1 * m33 = z2 x1 * m14 + y1 * m24 + z1 * m34 = 1 x2 * m11 + y2 * m21 + z2 * m31 = x1 x2 * m12 + y2 * m22 + z2 * m32 = y1 x2 * m13 + y2 * m23 + z2 * m33 = z1 x2 * m14 + y2 * m24 + z2 * m34 = 1 m44 = 1 对于每个点对,都可以得到上面的9个方程,将它们写成矩阵形式: | x1 y1 z1 1 0 0 0 0 0 | | m11 | | x2 | | x2 y2 z2 1 0 0 0 0 0 | | m12 | | y2 | | x3 y3 z3 1 0 0 0 0 0 | | m13 | | z2 | | 0 0 0 0 x1 y1 z1 1 0 | | m14 | | 1 | | 0 0 0 0 x2 y2 z2 1 0 | * | m21 | = | y1 | | 0 0 0 0 x3 y3 z3 1 0 | | m22 | | z1 | | 0 0 0 0 0 0 0 0 x1 | | m23 | | 1 | | 0 0 0 0 0 0 0 0 x2 | | m24 | | 1 | | 0 0 0 0 0 0 0 0 x3 | | m33 | | 1 | 将所有点对应的方程组组合成一个大的方程组,可以得到一个9x9的矩阵A和一个9x1的矩阵b: A * M = b 其中,A是一个9x9的矩阵,M是一个3x3的矩阵,b是一个9x1的矩阵。通过最小二乘法,可以求解出M,使得A * M最小化b的平方和。 最终得到的M就是变换矩阵
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

thequitesunshine007

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

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

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

打赏作者

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

抵扣说明:

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

余额充值