社区计算机视觉课程文档

相机模型

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

相机模型

针孔相机

Pinhole camera from https://commons.wikimedia.org/wiki/File:Pinhole-camera.svg

最简单的相机——也许是你自己做过的相机——由一个不透光的盒子组成,其中一面有一个小孔,另一面是一个屏幕或相片胶片。穿过小孔的光线在盒子的后壁上生成一个倒像。这种简单的相机模型常用于 3D 图形应用程序。

相机坐标轴约定

Blender camera axes conventions 相机坐标轴的方向有多种约定。在这里,我们将遵循 Blender 的约定(参见图示),即相机沿负 Z 轴方向,相机 X 轴指向左侧(从相机视角看),相机 Y 轴指向上方。

针孔相机坐标变换

Pinhole transformation 3D 空间中的每个点都映射到 2D 平面上的一个点。为了找到 3D 和 2D 坐标之间的映射,我们首先需要知道相机的内参,对于针孔相机而言,这些内参是

  • 焦距,fxf_xfyf_y.
  • 主点坐标,cxc_xcyc_y即图像的光学中心。该点是光轴与图像平面的交点。

使用这些内参,我们构建相机矩阵K=(fx0cx0fycy001) K = \begin{pmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \\ \end{pmatrix}

为了将它应用于 3D 空间中的一个点p=[x,y,z] p=[x,y,z],我们将该点乘以相机矩阵K@p K @ p 得到一个新的 3x1 向量[u,v,w] [u,v,w]。这是一个 2D 齐次向量,但其最后一个分量不为 1。为了找到该点在图像平面中的位置,我们必须将前两个坐标除以最后一个坐标,以得到点[u/w,v/w][u/w, v/w].

虽然这是相机矩阵的教科书定义,但如果我们使用 Blender 相机约定,它将左右和上下翻转图像(因为相机前方的点将具有负 Z 值)。一种可能的解决方法是更改相机矩阵中某些元素的符号K=(fx0cx0fycy001) K = \begin{pmatrix} -f_x & 0 & c_x \\ 0 & -f_y & c_y \\ 0 & 0 & 1 \\ \end{pmatrix}

相机变换矩阵

通常,相机不只在原点,我们必须将点从世界坐标转换为相对于相机的坐标。为此,我们首先将世界到相机矩阵应用于这些点,然后应用相机矩阵。

更复杂的相机模型

可以建立更复杂的相机模型,模拟真实镜头产生的畸变。有关此类模型的讨论,请参阅计算机视觉中的多视图几何

< > 在 GitHub 上更新