Matrix 从投影矩阵获取焦距和焦点

Matrix 从投影矩阵获取焦距和焦点,matrix,graphics,computer-vision,camera-calibration,Matrix,Graphics,Computer Vision,Camera Calibration,我有一个4x4投影矩阵 (SCNMatrix4) s = (m11 = 1.83226573, m12 = 0, m13 = 0, m14 = 0, m21 = 0, m22 = 2.44078445, m23 = 0, m24 = 0, m31 = -0.00576340035, m32 = -0.0016724075, m33 = -1.00019991, m34 = -1, m41 = 0,

我有一个4x4投影矩阵

(SCNMatrix4) 
   s = (m11 = 1.83226573, 
   m12 = 0, 
   m13 = 0, 
   m14 = 0,
   m21 = 0,
   m22 = 2.44078445,
   m23 = 0,
   m24 = 0,
   m31 = -0.00576340035, 
   m32 = -0.0016724075, 
   m33 = -1.00019991, 
   m34 = -1, 
   m41 = 0, 
   m42 = 0, 
   m43 = -0.20002, 
   m44 = 0)
我想从这个矩阵中获得焦点和焦距。

来自幻灯片4和5:

焦距只是矩阵中的第一个元素(
m11

然而,焦点不能单独从该矩阵中提取-您需要摄像机方向
D
和位置
p
。一旦有了它们,只需执行
P+D*m11
即可获得焦点。

来自幻灯片4和5:

焦距只是矩阵中的第一个元素(
m11


然而,焦点不能单独从该矩阵中提取-您需要摄像机方向
D
和位置
p
。一旦有了它们,只需执行
P+D*m11
即可获得焦点。

相机的位置是3D点,而焦点是2D点。我对相机的位置感到困惑camera@andre为什么你认为焦点是二维的?这也是一个3D点。恢复一篇旧文章,但这让我明白了:这并没有说e分子中的1应该是视口宽度的一半。如果你在使用OpenGL,这是可行的,因为视口是[-1,1]x[-1,1],所以一半的宽度实际上是1,但是如果你试图推导真实世界相机的焦距,公式确实是
m11=1/tan(FOV/2)
,但是
FOV=2*arctan(传感器半宽/焦距)
,所以最后
焦距=m11*传感器半宽度
。请注意,传感器宽度和焦距的单位是相同的。相机的位置是3D点,而焦点是2D点。我对相机的位置感到困惑camera@andre为什么你认为焦点是二维的?这也是一个3D点。恢复一篇旧文章,但这让我明白了:这并没有说e分子中的1应该是视口宽度的一半。如果你在使用OpenGL,这是可行的,因为视口是[-1,1]x[-1,1],所以一半的宽度实际上是1,但是如果你试图推导真实世界相机的焦距,公式确实是
m11=1/tan(FOV/2)
,但是
FOV=2*arctan(传感器半宽/焦距)
,所以最后
焦距=m11*传感器半宽度
。注意传感器宽度和焦距的单位相同。