在本文中,我们将探讨摄影机的外参,并通过Python中的一个实践示例来加强我们的理解。
相机外参
摄像头可以位于世界任何地方,并且可以指向任何方向。我们想从摄像机的角度来观察世界上的物体,这种从世界坐标系到摄像机坐标系的转换被称为摄像机外参。
那么,我们怎样才能找到相机外参呢?一旦我们弄清楚相机是如何变换的,我们就可以找到从世界坐标系到相机坐标系的基变换的变化。我们将详细探讨这个想法。
具体来说,我们需要知道相机是如何定位的,以及它在世界空间中的位置,有两种转换可以帮助我们:
有助于确定摄影机方向的旋转变换。
有助于移动相机的平移变换。
让我们详细看看每一个。
旋转
通过旋转改变坐标
让我们看一下将点旋转一个角度的变换。让我们举一个在ℝ²的简单例子,对点𝑃逆时针旋转角度𝜃 得到点𝑃′, 如下图所示:
𝑃的坐标是(𝑥,𝑦) 以及𝑃′的坐标是(𝑥′,𝑦′). 我们需要找到(𝑥′,𝑦′).
从图来看,
sinα = y/r , cosα = x/r − [1]
⟹ xsinα = ycosα − [2]
同样的, x′ = rcos(θ+α)
⟹ x′ = (x/cosα) ∗ cos(θ+α) (from [1])
但, cos(θ+α) = cosθcosα − sinθsinα
⟹ x′ = (x/cosα) ∗ (cosθcosα − sinθsinα)
⟹ x′ = xcosθ − xsinα ∗ (sinθ / cosα)
⟹ x′ = xcosθ − ycosα ∗ (sinθ / cosα) (from [2])
⟹ x′ = xcosθ − ysinθ
同样地,
y′ = rsin(θ+α)
⟹ y′ = (y/sinα) ∗ sin(θ+α) (from [1])
但, sin(θ+α) = sinθcosα + cosθsinα
⟹ y′ = (y/sinα) ∗ (sinθcosα + cosθsinα)
⟹ y′ = ycosθ + ycosα ∗ (sinθ / sinα)
⟹ y′ = ycosθ + xsinα ∗ (sinθ / sinα) (from [2])
⟹ y′ = ycosθ + xsinθ
⟹ y′ = xsinθ + ycosθ
因此我们有,
x′ = xcosθ − ysinθ
y′ = xsinθ + ycosθ
旋转是一种线性运算,上述方程可以表示为矩阵乘法:
这个操作是一个线性变换。
扩展到R3
我们可以很容易地将旋转变换扩展到𝐑³. 旋转的变换矩阵𝐑关于标准X轴、Y轴和Z轴,如下所示:
绕Z轴旋转:
绕X轴旋转: