总结
在计算机视觉和图形学中,将世界坐标扩充成四维,以及图像坐标扩充成三维,是为了便于运用齐次坐标(homogeneous coordinates)进行坐标变换。这样的做法简化了投影变换的数学表示和计算,特别是在三维场景和二维图像间的转换中。
一、为什么世界坐标要扩充成四维, 图像坐标要扩充成三维
1. 世界坐标扩充成四维
世界坐标系统描述三维空间中的点。在使用三维坐标 (X, Y, Z) 进行表示时,转换操作(如平移和旋转)通常需要单独处理。为了统一这些操作,可以将三维坐标扩充到四维齐次坐标 (X, Y, Z, W)。在齐次坐标中:
平移、旋转、缩放 以及其他线性变换可以通过一个 4x4 矩阵来表示和处理。
当 W=1 时,(X, Y, Z, 1) 直接对应于 (X, Y, Z)。
使用四维坐标,可以通过矩阵乘法来组合多个变换,这在计算机图形和机器视觉中非常有用。
2. 图像坐标扩充成三维
图像坐标系通常是二维的,表示为 (x, y)。为了将这些坐标与三维世界坐标系中的点对应起来,并方便地进行透视投影变换,可以扩充图像坐标到三维齐次坐标 (x, y, w)。
在图像处理和计算机视觉中,使用齐次坐标可以简化相机的投影模型。例如,透视投影可以通过一个 3x4 投影矩阵与四维世界坐标的点相乘来实现。
三维齐次图像坐标允许通过简单的矩阵乘法实现从世界坐标到图像坐标的转换。w 分量在进行投影变换时起到了归一化的作用,使得变换后可以通过除以 w 来回到常规的二维坐标形式。
总的来说,使用齐次坐标系统是为了在处理几何变换时增加数学上的便利性和效率,特别是在涉及多步骤变换和不同坐标系之间的转换时。这种方法广泛应用于计算机图形、图像处理、计算机视觉以及机器人技术中。
二、几何变换的矩阵表示
在三维计算机图形中,使用 4x4 矩阵进行平移、旋转和缩放等变换是常见的方法,这些矩阵可以单独使用,也可以组合来表示复杂的变换序列。
1. 旋转变换矩阵(以 Z 轴为例)
旋转矩阵可以围绕任意轴进行旋转,但最常见的是围绕主轴(X轴、Y轴、Z轴)的旋转。例如,围绕 Z 轴旋转 𝜃度的旋转矩阵是:
cos ( θ ) − sin ( θ ) 0 0 sin ( θ ) cos ( θ ) 0 0 0 0 1 0 0 0 0 1 \begin{matrix} \cos(\theta) & -\sin(\theta) & 0 & 0 \\ \sin(\theta) & \cos(\theta) & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix} cos(θ)sin(θ)00−sin(θ)cos(θ)0000100001
2. 缩放变换矩阵
如果你想改变一个物体的大小,缩放矩阵允许你在每个方向上独立地调整尺寸。缩放矩阵如下所示:
s x 0 0 0 0 s y 0 0 0 0 s z 0 0 0 0 1 \begin{matrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1 \end{matrix} sx0000sy0000sz00001
可以看到在旋转和缩放变换中,使用4*4的矩阵是毫无意义的,那为什么还要使用4*4的矩阵呢?
是因为另一个非常常用的变换–平移–需要使用到第四维。
3. 平移变换矩阵
1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 \begin{matrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{matrix} 100001000010txtytz1
其中 t x t y t z \begin{matrix} t_x\\t_y\\t_z \end{matrix} txtytz是沿 X, Y, Z 轴的平移距离。
4. 平移变换的矩阵乘法表示
1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ⋅ X Y Z 1 = X + t x Y + t y Z + t z 1 \begin{matrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{matrix} \cdot \begin{matrix} X \\ Y \\ Z \\ 1 \end{matrix}= \begin{matrix} X + t_x \\ Y + t_y \\ Z + t_z \\ 1 \end{matrix} 100001000010txtytz1⋅XYZ1=X+txY+tyZ+tz1
在这里我们终于看到了第四维的应用,而且这里只能通过4*4方式来进行矩阵运算,不管是第四行还是第四列,对于平移变换来说都是必需的。
5. 组合运算
这些矩阵可以通过矩阵乘法组合来实现复杂的变换。例如,一个物体先围绕 Z 轴旋转 45 度,然后沿 X 轴平移 5 单位,最后在所有方向上缩放 2 倍,可以通过以下矩阵乘法来实现:
S c a l e × T r a n s l a t e × R o t a t e Scale×Translate×Rotate Scale×Translate×Rotate
计算出的结果矩阵将包含所有这些变换的效果。
这些变换的实际应用包括在计算机图形、机器人路径规划、空间分析等领域。在实践中,这样的矩阵运算可以通过各种图形API或数学库(如OpenGL、DirectX、glm库等)来实现。
那么使用4*4的矩阵结构来进行运算的优势已经很明显了,总的来说就是:
可以统一处理各种变换
在传统的三维坐标系统中,旋转和缩放可以通过乘以一个 3x3 矩阵来实现,但平移变换需要单独处理,通常是通过加上一个向量来完成。这意味着,如果你想要组合多种变换(例如,先旋转后平移),就必须单独计算每一种变换,这在编程和算法设计中会增加复杂性。
使用四维齐次坐标,多个变换可以组合成一个矩阵,这样一个物体的多个变换可以预先计算并存储为一个矩阵。这对于图形渲染效率至关重要,因为它减少了在渲染每个物体时需要执行的计算量。
另外,还有一个使用4*4结构的原因是关于透视投影的。
在三维计算机图形中,将三维场景投影到二维屏幕上是一个核心任务。齐次坐标使得透视投影(其中物体大小随距离变化)也可以通过矩阵乘法实现。透视投影通常涉及除以深度值(z坐标),在齐次坐标中,这可以通过简单地将坐标除以齐次坐标的最后一个分量(通常是 w)来自动完成。关于w分量的作用可以自行查询。