三维重建和SfM相机内在参数

时间:2016-11-16 15:39:20

标签: computer-vision 3d-reconstruction structure-from-motion

我正在尝试理解3D重建的基本原理,并选择使用OpenMVG然而,我看到证据表明我要问的以下概念适用于所有/大多数 SfM / MVS工具,而不仅仅是OpenMVG。因此,我怀疑任何计算机视觉工程师都应该能够回答这些问题,即使他们没有直接的OpenMVG经验。

我正在尝试完全理解内在相机参数,或者它们似乎被称为“相机本体”或“内在参数”。根据OpenMVG的文档,相机内在函数取决于用于拍摄照片的相机类型(例如,相机型号),其中,OpenMVG支持五种型号:

  • 针孔:3个内在参数(焦点,主点x,主点y)
  • 针孔径向1:4内在参数(焦点,主点x,主点y,一个径向畸变因子)
  • 针孔径向3:6参数(焦点,主点x,主点y,3个径向畸变因子)
  • 针孔布朗:8个参数(焦点,主点x,主点y,5个畸变因子(3弧度+ 2切线))
  • 针对鱼眼失真的针孔:7个参数(焦点,主点x,主点y,4个失真因子)

这是在wiki page that explains their camera model上解释的,这是我提问的主题。

在该页面上,我需要澄清几个核心概念:

  • 焦平面:它是什么以及它与图像平面有何不同(如该页面顶部的图所示)?
  • 焦距/长度:它是什么?
  • 主要观点:它是什么,为什么理想情况下它应该是图像的中心?
  • 比例因子:这只是估计相机离图像平面的距离吗?
  • 失真:它是什么以及它的各种子类型有什么区别:
    • 径向
    • 切向
    • 鱼眼

预先感谢此处的任何澄清/更正!

1 个答案:

答案 0 :(得分:1)

我不确定焦平面,所以在我写下你提到的其他概念之后我会再回过头来看看。假设你有一个带有矩形像素的针孔相机模型,让 P = [X Y Z] ^ T 成为相机空间中的一个点, ^ T 表示转置。在这种情况下(假设 Z 是摄像机轴),此点可以投影为 p = KP ,其中 K (校准矩阵)是

f_x  0   c_x
0   f_y  c_y
0    0    1 

(当然,你需要将 p 除以其后的第三个坐标)。

焦距,我会注意 f 是相机中心和图像平面之间的距离。变量

f_x=s_x*f 
f_y=s_y*f
上面的矩阵中的

分别以像素宽度和高度表示该值。变量 s_x s_y 是您引用的页面上提到的比例因子。比例因子是像素的大小(宽度或高度)与您在相机空间中使用的单位之间的比率。因此,例如,如果您的像素宽度是在相机空间的 x 轴上使用的单位的一半,那么您将 s_x = 2。

我见过人们使用术语主要点来引用不同的东西。虽然有些人将其定义为相机轴和图像平面之间的交点(Wikipedia似乎这样做),但其他人将其定义为 [c_x c_y] ^ T 给出的点。为了清楚起见,让我们将整个投影过程分开:

等式右边的两个术语做了不同的事情。第一个缩放点并将其放入图像平面。第二项( [c_x c_y 1] ^ T )将结果从另一项移位。因此, [ - c_x,-c_y] ^ T 是图像坐标系的中心。

关于切向/径向失真之间的差异:通常在校正失真时,我们假设图像的中心 o 保持不失真。在失真的影响下,像素 p 将从其真实位置 q “移开”。如果该运动沿着矢量 q-o ,则失真是径向的,但如果该运动具有不同方向的分量,则称其(也)具有切向失真。

正如我所说,我对他们的数字中显示的焦平面有点不确定,但我认为这个术语通常指的是倒置图像会形成的平面在物理针孔相机中。图像平面上的点 P (以世界坐标表示)将在焦平面上 -P