如何找到两个不同坐标系中对应点之间的旋转和平移(变换矩阵)
How to find rotation and translation (transformation matrix) between corresponding points in two different coorinate systens
我正在研究相机-激光雷达校准,我在以下问题上卡住了一段时间:
我正在使用 USB 摄像头和 2D 激光雷达。我在激光雷达框架和相机框架中都有对应点的坐标(可以说我在激光雷达框架中有 3 个点及其坐标,在相机框架中有相同 3 个点的坐标)。
一分举例:
lidar_pt1(xl, yl)
camera_pt1(xc, yc, zc)
...
众所周知。
如果我对变换矩阵进行硬编码,我会得到预期的结果。现在我尝试不对其进行硬编码,而是使用已知的坐标值自动计算它。我所拥有的是激光雷达框架中 2D 坐标中的 3 个点和相机框架中 3D 坐标中的精确 3 个点。正是在这里,我正在努力根据我拥有的坐标值以某种方式计算旋转。有没有办法获得这种轮换?
camera_pt1 = TransformMat * lidarpt1
变换矩阵 = ?
我看到了一些使用 SVD (http://nghiaho.com/?page_id=671) 的示例,但我认为它们需要更大的数据集并且最少 3 个点不会给出最佳结果。
如果你只从每个系统中取 3 对坐标,那么数学就很简单了。这是一个简单的例子:
|
4 | (R)
| : ',
| : ',
| : ',
3 | : (P)
| : ,'
| : ,'
| : ,'
2 | (A).....(B) (Q)
| : ,'
| : ,'
| : ,'
1 | (C)
|
|
|
0 +-------------------------------------
0 1 2 3 4
假设您有一个三角形 ABC
映射到另一个三角形 PQR
。您可以在 homogeneous coordinates 中表示它们的顶点,如下所示:
.- -. .- -.
| 1 2 1 | | 4 3 1 |
ABC = | 2 2 1 | PQR = | 3 2 1 |
| 1 1 1 | | 3 4 1 |
'- -' '- -'
您需要找到一个矩阵 M
,将 ABC
映射到 PQR
(即 ABC × M = PQR
)。为此,只需将 PQR
乘以 ABC
的倒数:
if ABC × M = PQR,
then ABC⁻¹ × ABC × M = ABC⁻¹ × PQR
so M = ABC⁻¹ × PQR
有很多关于如何求逆 3×3 矩阵的参考资料。这应该会给您以下结果:
.- -.
| -1 -1 0 |
M = | 1 -1 0 |
| 3 6 1 |
'- -'
我正在研究相机-激光雷达校准,我在以下问题上卡住了一段时间:
我正在使用 USB 摄像头和 2D 激光雷达。我在激光雷达框架和相机框架中都有对应点的坐标(可以说我在激光雷达框架中有 3 个点及其坐标,在相机框架中有相同 3 个点的坐标)。
一分举例:
lidar_pt1(xl, yl)
camera_pt1(xc, yc, zc)
...
众所周知。
如果我对变换矩阵进行硬编码,我会得到预期的结果。现在我尝试不对其进行硬编码,而是使用已知的坐标值自动计算它。我所拥有的是激光雷达框架中 2D 坐标中的 3 个点和相机框架中 3D 坐标中的精确 3 个点。正是在这里,我正在努力根据我拥有的坐标值以某种方式计算旋转。有没有办法获得这种轮换?
camera_pt1 = TransformMat * lidarpt1
变换矩阵 = ?
我看到了一些使用 SVD (http://nghiaho.com/?page_id=671) 的示例,但我认为它们需要更大的数据集并且最少 3 个点不会给出最佳结果。
如果你只从每个系统中取 3 对坐标,那么数学就很简单了。这是一个简单的例子:
|
4 | (R)
| : ',
| : ',
| : ',
3 | : (P)
| : ,'
| : ,'
| : ,'
2 | (A).....(B) (Q)
| : ,'
| : ,'
| : ,'
1 | (C)
|
|
|
0 +-------------------------------------
0 1 2 3 4
假设您有一个三角形 ABC
映射到另一个三角形 PQR
。您可以在 homogeneous coordinates 中表示它们的顶点,如下所示:
.- -. .- -.
| 1 2 1 | | 4 3 1 |
ABC = | 2 2 1 | PQR = | 3 2 1 |
| 1 1 1 | | 3 4 1 |
'- -' '- -'
您需要找到一个矩阵 M
,将 ABC
映射到 PQR
(即 ABC × M = PQR
)。为此,只需将 PQR
乘以 ABC
的倒数:
if ABC × M = PQR,
then ABC⁻¹ × ABC × M = ABC⁻¹ × PQR
so M = ABC⁻¹ × PQR
有很多关于如何求逆 3×3 矩阵的参考资料。这应该会给您以下结果:
.- -.
| -1 -1 0 |
M = | 1 -1 0 |
| 3 6 1 |
'- -'