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

and*_*dre 1 graphics matrix 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, 
   m42 = 0, 
   m43 = -0.20002, 
   m44 = 0)
Run Code Online (Sandbox Code Playgroud)

我想从这个矩阵中得到焦点和焦距。

meo*_*dog 6

来自此 GDC 演示文稿的幻灯片 4 和 5 :

在此输入图像描述

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

然而,焦点不能仅从该矩阵提取 - 您需要相机方向 D位置 P。获得它们后,只需执行即可P + D * m11获得焦点。

  • 恢复旧帖子,但这让我明白了:这并没有说明 e 的分子中的 1 应该是视口宽度的一半。如果你正在使用 OpenGL,这是可行的,因为视口是 [-1, 1] x [-1, 1],所以宽度的一半确实是 1,但如果你试图推断真实世界的焦距相机,公式确实是`m11 = 1 / tan(FOV / 2)`,但是`FOV = 2 * arctan(sensor_half_width / focus_length)`,所以最后`focal_length = m11 *sensor_half_width`。请注意传感器宽度和焦距具有相同的单位。 (3认同)