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