Math 根据原点更改前后的摄影机旋转/平移确定点位置

Math 根据原点更改前后的摄影机旋转/平移确定点位置,math,computer-vision,3d,rotational-matrices,Math,Computer Vision,3d,Rotational Matrices,抱歉,如果这是一个愚蠢的问题,我对3D工作还很陌生 我有许多针孔相机,带有3x3旋转矩阵和基于原点(0,0,0)的平移向量 我使用的系统可以移动原点并旋转摄影机(尽管所有摄影机都保持相对),从而为每个摄影机生成一个新的旋转矩阵和平移向量,我可以访问该矩阵和平移向量 那么,我的问题是:给定一个点在原始空间中具有三维位置,如何使用相同摄影机(或多个摄影机)的新旋转/平移计算新空间中相同点的三维位置 当我问问题的时候,有没有更有效的方法 我建议使用来跟踪矩阵和变换。我想你的问题是如何在不同的相机视图之

抱歉,如果这是一个愚蠢的问题,我对3D工作还很陌生

我有许多针孔相机,带有3x3旋转矩阵和基于原点(0,0,0)的平移向量

我使用的系统可以移动原点并旋转摄影机(尽管所有摄影机都保持相对),从而为每个摄影机生成一个新的旋转矩阵和平移向量,我可以访问该矩阵和平移向量

那么,我的问题是:给定一个点在原始空间中具有三维位置,如何使用相同摄影机(或多个摄影机)的新旋转/平移计算新空间中相同点的三维位置

当我问问题的时候,有没有更有效的方法

我建议使用来跟踪矩阵和变换。我想你的问题是如何在不同的相机视图之间来回变换点

如果将摄影机变换表示为单个矩阵运算
M
,则向后移动就是
逆(M)
。更好的是,如果您的相机矩阵是由几个步骤组成的,则可以反转这些步骤。例如,如果
M=rotatex(θ)*标度(sx,sy,sz)*平移(x,y,z)
,那么
inverse(M)=平移(-x,-y,-z)*标度(1/sx,1/sy,1/sz)*旋转(-theta)
。请注意,您还必须颠倒顺序。这是“袜子/鞋子”的财产。你穿上袜子,然后穿上鞋子。反过来,你脱下鞋子,然后脱下袜子


一旦可以从每个摄影机向前和向后移动,就可以轻松地在任何摄影机视图之间交换点。

我假设点的位置相对于原点矩阵,可以平移/旋转原点矩阵

假设所有这些都是必要的,那么您的点的新位置如下所示:

pos_newCoord = R^-1 * T^-1 * pos_oldCoord
你所做的是把你的新原点,翻译回原来的原点,然后解旋转。用另一种方式写:

newOrigin = myTranslation(myRotation(oldOrigin))
def newCoordinates(point):
    return inverse(myRotation)(inverse(myTranslation)(point))
您可以预先计算逆运算,尤其是使用4d矩阵时


“如何根据摄像机的旋转和平移变化确定原点的旋转和平移变化?”–OP

如果您没有被告知此信息,您可以按如下方式恢复它。我们将使用4d点和4v4仿射变换矩阵(en.wikipedia.org/wiki/affine_transformation)

  • 任何4台摄像机都可以拍摄
  • 考虑原始摄影机点与其平移/旋转的点
  • 可能有更好的线性代数方法,但是如果你访问Wikipedia链接,我们会注意到有一个3x3子矩阵a和一个3x1子矩阵b,因此有12个未知数。4个点,每个点3个方程,得到12个方程。有一个解决方案,因为这种形式的矩阵是可逆的。使用您最喜欢的线性方程求解技术系统进行求解,例如12x12矩阵上的高斯消去法

你能把这个问题归结起来并提出本质吗?我想“本质”是:考虑到针孔相机在改变前后的外部参数,当原点改变时,你如何找到点的新3D位置?谢谢你的输入!我的下一个问题是如何根据照相机的旋转和平移的变化来确定原点的旋转和平移的变化。@ USER 807068:如果你没有被告知这个信息,你可以恢复如下:取4个相机,并考虑它们的原点和它们的平移/旋转点。我们将使用4d点和4v4仿射变换矩阵()。可能有更好的线性代数方法,但你可以注意到有一个3x3子矩阵a和一个3x1子矩阵b,因此有12个未知数。4个点,每个点3个方程,得到12个方程。有一个解决方案,因为这种形式的矩阵是可逆的。用高斯消去法求解。谢谢回复!遗憾的是,没有,我知道如何在静态场景的摄影机视图之间切换。我的问题是,当选择一个新点作为原点时会发生什么,改变相机相对于新原点的旋转/平移,尽管相机在“真实空间”中是静止的。例如,我将为每个摄影机设置两组旋转和平移矩阵:一组在原点更改之前,另一组在原点更改之后。是否有任何方法可以使用这些值根据新原点的先前位置确定该点相对于新原点的位置?