齐次坐标系统:计算机图形学的基础
在计算机图形学、计算机视觉、相机标定、三维建模等领域,齐次坐标是一个非常重要的数学工具。本文将介绍:齐次坐标的基本概念、数学原理、我们为什么要引入齐次坐标、及其在实际应用中的价值。
文章目录
- 齐次坐标系统:计算机图形学的基础
- 1. 什么是齐次坐标?
- 2. 齐次坐标的数学原理
- 3. 为什么要引入齐次坐标?——齐次坐标的优势
- 3.1 统一表示变换
- 3.2 处理无穷远点
- 3.3 链式变换的简化
- 4. 在计算机图形学中的应用
- 4.1 3D渲染管线
- 4.2 计算机视觉
- 4.3 机器人学
- 5. 齐次坐标的实际例子
- 5.1 二维平移变换
- 5.2 透视投影
- 6. 结论
- 参考资料
1. 什么是齐次坐标?
齐次坐标是一种表示几何点的方式,它通过添加一个额外的坐标分量,将 n n n维空间中的点表示为 n + 1 n+1 n+1维空间中的点。这种表示方法最早由德国数学家August Ferdinand Möbius在19世纪提出。
在二维空间中,点 ( x , y ) (x, y) (x,y)的齐次坐标表示为 ( x , y , w ) (x, y, w) (x,y,w),其中 w w w是一个非零值。实际的二维坐标可以通过除以w得到: ( x / w , y / w ) (x/w, y/w) (x/w,y/w)。
例如,点 ( 1 , 2 ) (1,2) (1,2)的齐次坐标可以表示为 ( 1 , 2 , 1 ) (1,2,1) (1,2,1),也可以表示为 ( 2 , 4 , 2 ) (2,4,2) (2,4,2),也可以表示为 ( k , 2 k , k ) ( k ≠ 0 ) (k,2k,k) (k≠0) (k,2k,k)(k=0),等等,它们指的都是同一个点,即二位平面中平面直角坐标为 ( 1 , 2 ) (1,2) (1,2)的点。
在三维空间中,点(x, y, z)的齐次坐标表示为(x, y, z, w),原理和二维同理。
2. 齐次坐标的数学原理
齐次坐标的数学基础可以追溯到射影几何。在射影几何中,平行线在无穷远处相交。齐次坐标系统允许我们用代数方式处理这种情况。
当w=0时,齐次坐标(x, y, 0)表示无穷远处的点或方向向量。这使得我们可以在同一个代数框架内处理点和向量,又可以区分点和向量的形式。
类似于欧拉积分定义的Gamma函数(Gamma函数是阶乘函数在复数域上的推广,在数学物理中有广泛应用。类似地,齐次坐标是欧几里得坐标在射影几何中的推广):
Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过 Euler integral
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
齐次坐标也有其优雅的数学表达。
3. 为什么要引入齐次坐标?——齐次坐标的优势
3.1 统一表示变换
使用齐次坐标的最大优势之一是可以用单一的矩阵乘法操作来表示各种几何变换,包括:
- 平移
- 旋转
- 缩放
- 剪切
- 透视投影
P.S. 这些变换的变换矩阵可以参考我的这一篇文章:【等我有时间再写一篇】
在非齐次坐标系统中,平移需要加法操作,而其他变换需要乘法操作。使用齐次坐标,所有这些变换都可以统一为矩阵乘法。
平移变换在几何学和计算机图形学中是常见的操作,但它并不属于线性变换。线性变换需要满足两个条件:可加性和齐次性。具体来说,线性变换 f f f必须满足以下条件:
- 可加性: f ( x + y ) = f ( x ) + f ( y ) f(x + y) = f(x) + f(y) f(x+y)=f(x)+f(y)
- 齐次性: f ( k x ) = k f ( x ) f(kx) = kf(x) f(kx)=kf(x)
平移变换的数学形式为:
x ′ = x + t x x' = x + t_x x′=x+tx y ′ = y + t y y' = y + t_y y′=y+ty z ′ = z + t z z' = z + t_z z′=z+tz这种变换无法用一个矩阵 M M M来表示,使得 M v = w Mv = w Mv=w,因此不满足线性变换的定义。
正因如此,为了将平移变换与线性变换结合,引入了齐次坐标系。在齐次坐标系中,二维点 ( x , y ) (x, y) (x,y)可以表示为 ( x , y , 1 ) (x, y, 1) (x,y,1),三维点 ( x , y , z ) (x, y, z) (x,y,z)可以表示为 ( x , y , z , 1 ) (x, y, z, 1) (x,y,z,1)。通过引入齐次坐标,平移变换可以表示为矩阵乘法,从而与线性变换统一起来。
例如,三维空间中的平移变换可以表示为:
[ x ′ y ′ z ′ 1 ] = [ 1 0 0 t x 0 1 0 t y 0 0 1 t z 0 0 0 1 ] [ x y z 1 ] \begin{bmatrix} x' \\ y' \\ z' \\ 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} x′y′z′1 = 100001000010txtytz1 xyz1
通过引入齐次坐标系统,能够将平移、旋转、缩放等变换统一成矩阵乘法的形式,保证了形式上的线性一致性,使得多次变换可以通过矩阵连乘来实现结合使用,形成更复杂的变换,从而简化计算和降低运算量。
3.2 处理无穷远点
齐次坐标允许我们表示和处理无穷远点,这在透视投影和计算机视觉中非常有用。
3.3 链式变换的简化
多个变换可以通过矩阵乘法链接在一起,大大简化了复杂变换的计算。
4. 在计算机图形学中的应用
4.1 3D渲染管线
在OpenGL和DirectX等图形API中,齐次坐标被广泛用于顶点变换和投影。
4.2 计算机视觉
在计算机视觉中,齐次坐标用于相机标定、立体视觉和三维重建。
4.3 机器人学
在机器人学中,齐次变换矩阵用于表示机器人各关节的位置和方向。
5. 齐次坐标的实际例子
5.1 二维平移变换
在二维空间中,点(x, y)的平移可以表示为:
[ x ′ y ′ 1 ] = [ 1 0 t x 0 1 t y 0 0 1 ] [ x y 1 ] \begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} x′y′1 = 100010txty1 xy1
5.2 透视投影
透视投影可以通过齐次坐标优雅地表示,这是计算机图形学中的核心操作。
6. 结论
齐次坐标系统是计算机图形学和计算机视觉的基础工具。通过引入额外的坐标分量,它提供了一种统一和简化几何变换的强大方法。虽然初学者可能需要一些时间来适应这种表示方法,但掌握齐次坐标对于理解现代计算机图形学算法和技术至关重要。
参考资料
[1] 闫令琪. Lecture 03 Transformation: GAMES101-现代计算机图形学入门 第03讲 转型[EB/OL]. (2020-02-22)[2025-04-13]. https://www.bilibili.com/video/BV1X7411F744?p=3.
[2] 鸡米工程师. 图形学-变换(平移矩阵,旋转矩阵,缩放矩阵,线性变换,仿射变换,齐次坐标)[EB/OL]. (2022-10-19)[2025-04-13]. https://blog.csdn.net/weixin_46773434/article/details/127417579.
[3] 人狮子. 相机标定(一)—— 深入理解齐次坐标及其作用[EB/OL]. (2020-11-12)[2025-04-13]. https://blog.csdn.net/baidu_35536188/article/details/109735600.
[4] 花朝秋月夜6. 平移变换为什么不是线性变换[EB/OL]. (2019-12-08)[2025-04-13]. https://zhidao.baidu.com/question/1706534989170268900.html.
[5] 力博荣三维可视化. 001_图形学里的变换[EB/OL]. (2021-10-05)[2025-04-13]. https://blog.csdn.net/qq_21476953/article/details/120573356.
[6] hywmj. [计算机视觉] 什么是齐次坐标?为什么要引入齐次坐标?[EB/OL]. (2021-07-28)[2025-04-13]. https://blog.csdn.net/wangmj_hdu/article/details/119143771.
[7] 追求卓越583. 为什么要引入齐次坐标,齐次坐标的意义(一)[EB/OL]. (2019-07-11)[2025-04-13]. https://blog.csdn.net/zhuiqiuzhuoyue583/article/details/95228010.