Deal with Real World? Rotation & Translation
需要指出的是,在perspective projection这一步,我们处理的点是在以相机为参照系的三维世界坐标系中的,也就是说我们还需要把真实三维世界中的点(WP)转化到以相机为参照系的三维世界坐标系中(CP)。我们可以通过变换坐标系的方法来达到目的,而变换方法为旋转(rotate)和移动(translation)。
坐标系B到A的转换
假设两个坐标系A, B。在三维世界上有一个点P,在坐标系A上观察时,我们称点P为AP,同理在坐标系B上称之为BP。如果已知BP需要求出AP,我们可以通过矩阵乘法来达到目的:
AP=ATBBP
其中
ATB被称为变换矩阵(transformation matrix)。
那该如何得到ATB呢?
首先,我们需要了解如何通过一系列的旋转和移动来进行坐标系变换。 假设坐标系B沿坐标轴x旋转了α,沿坐标轴y旋转了β,沿z旋转了θ;并且沿坐标轴x平移了10个单位(unit)。
那么ATB可以写成:
ATB=[ARBAtB]
其中:
ARB=Rot(z,θ)Rot(y,β)Rot(x,α)
AtB=⎡⎣⎢⎢1000⎤⎦⎥⎥
Rot(x,α)=⎡⎣⎢⎢1000cosαsinα0−sinαcosα⎤⎦⎥⎥
Rot(y,β)=⎡⎣⎢⎢cosβ0−sinβ010sinβ0cosβ⎤⎦⎥⎥
Rot(z,θ)=⎡⎣⎢⎢cosθsinθ0−sinθcosθ0001⎤⎦⎥⎥
坐标系A到B的转换
如果从坐标系A到B呢?我们很容易得到:
BP=(ATB)−1AP
要知道旋转矩阵
ARB是正交矩阵(orthonomal matrix),所以其逆矩阵等于其转置矩阵,考虑到
AP=ARB(BP)+AtB
简化写法:
AP=R(BP)+t
RT(AP−t)=BP
或者:
BP=(RT)AP−RTt
所以得到:
ATB=(BTA)−1=[(BRA)T]−(BRA)T(BtA)
这就是两个坐标轴的转换矩阵之间的关系。
另一种转换方法
事实上,ATB=[ARBAtB]蕴涵了很重要的几何关系。ARB上的每一列都代表了相对于坐标系A,B坐标系的单位向量,所以又可以写成:
ARB=[AxBAyBAzB]
而
ATB 的第四列
AtB 是坐标系B的原点在坐标系A中的坐标。
这样的话,可以由观察得到变换矩阵。
Summary — Camera Matrix
所以,image formation pipeline可以由三个步骤组成,分别为:

最终,我们可以把公式写成:
⎡⎣⎢⎢⎢imximy1⎤⎦⎥⎥⎥=⎡⎣⎢⎢x/ωy/ω1⎤⎦⎥⎥
⎡⎣⎢⎢xyω⎤⎦⎥⎥=⎡⎣⎢⎢⎢f/sx000f/sy0oxoy1⎤⎦⎥⎥⎥[CRCt]⎡⎣⎢⎢⎢⎢XWYWZW1⎤⎦⎥⎥⎥⎥
或者更简单的写法:
⎡⎣⎢⎢xyω⎤⎦⎥⎥=M⎡⎣⎢⎢⎢⎢XWYWZW1⎤⎦⎥⎥⎥⎥
M就是相机矩阵(camera matrix),大小为3*4。这个矩阵也是我们在图像转换中需要求得的参数。
下一篇文章将讲述Homography的基本概念,以及如何用python实现几种简单的图像变换。