【问题标题】:How to change world space camera orientation and position vectors to the camera space?如何将世界空间相机方向和位置向量更改为相机空间?
【发布时间】:2015-04-18 17:30:37
【问题描述】:

我的问题与How to determine world coordinates of a camera?正好相反。

如果 R 和 t 是相机在世界空间中的方向和位置向量?如何轻松转换回 rvec and tvec 这样的空间?

【问题讨论】:

  • 您想将一些真实世界的点坐标转换为本地相机坐标吗?看看计算机图形理论。公平地说,它应该只是将 3D 点乘以相机矩阵的倒数。
  • 看这里Understanding 4x4 homogenous transform matrices 请记住相机矩阵是逆矩阵
  • @Micka,因为我弄错了投影矩阵中的 [R|t] 是什么。我计算了世界空间中相机的 R 和 t。所以现在我希望将它们转换回相机空间,而无需编写太多代码。
  • 在我对“相机空间”的理解中,R 是单位垫,对于在其自己的“相机空间”中的相机而言,t 处处为零(如果在相机空间中给出点,您可以执行标准投影),但我可能错了...

标签: opencv math computer-vision


【解决方案1】:

如果你说你在世界空间中确实有Rt,那么这不是很准确。

但是,让我们假设 R 和 t(一个 3x3 旋转矩阵和 3x1 平移向量)表示用于将世界空间中的点 Xw 转换为相机空间中的点 Xc 的方向和平移( 没有齐次坐标):

Xc = R*Xw + t

这些是 Rt,它们是投影矩阵 P 的一部分(适用于齐次坐标)和 solvePnP 的结果(请参阅底部的注释):

P = K[R|t]

t 是相机空间中的世界原点。

反过来,将相机空间中的一个点转换为世界空间,可以很容易地导出,因为正交矩阵R 的逆矩阵是R'(R 转置):

 Xw = R'*Xc - R't

如您所见,R'(3x3 矩阵)和- R't(3x1 向量)现在分别是从相机到世界空间转换的方向矩阵(更精确的- R't 是相机原点/中心)世界空间通常称为C)。

注意:rvec是旋转向量的形式,你可能知道Rodrigues()是用来在两种表示之间切换的。

【讨论】:

  • 我的目的是正确组合 P=K[R|t] 投影矩阵。但是,作为您的previous answer,无论在世界空间还是相机空间中,R 都不会改变。所以 Xc 是一个 3x1 的位置向量,它可以是 P=K[R|t] 中的 t 吗?
  • 我测试了你的 P=K[R|-Rc] 其中 c 是世界空间中的相机中心坐标,但是这个投影矩阵是错误的,在我的重建算法中进行了测试。
  • 不,你误解了这一点。首先,你不能说一个矩阵R在某个空间中。它是一种变换,更准确地说是一种旋转,有助于从一个空间到另一个空间,但它不是某个空间。当然,这个矩阵会根据你想要切换的空间而改变。其次,投影矩阵将任何齐次点从世界转换到相机空间,然后将其映射到图像平面上。要构建它,请使用来自solvePnPRt(你会得到矩阵RRodrigues())。
  • XcXw 只是各自空间中的任意点来说明转换。并且不要忘记投影矩阵的内在函数。
  • 感谢 gfkri。我的问题是我的校准中有部分 R 和 t 信息,我必须从现有视图中恢复更多视图的 R 和 t。所以直接从solvePnP计算R和t是没有意义的,我要把这些R和t转换到世界空间,然后恢复。所以我的问题实际上是我怎样才能将它们转换回来?
猜你喜欢
  • 2014-05-18
  • 2021-12-14
  • 2016-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
相关资源
最近更新 更多