本文为个人笔记,查看原文请关注公众号:计算机视觉life
什么是齐次坐标
定义:齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示,是指一个用于投影几何里的坐标系统,如同用于欧氏几何里的笛卡儿坐标一般。
(x, y) -> (x, y, 1)
(x, y, z) -> (x, y, z, 1)
使用齐次坐标有什么优势
齐次坐标的使用能够大大简化在三维空间中的点线面表达方式和旋转平移等操作,具体分如下几点进行说明。
能非常方便的表达点在直线或在平面上
2D平面上,直线可用方程 ax + by + c = 0 表示,用向量表示一般记为:l = (a, b, c)T
点 p = (x, y) 在直线 l 上的充分必要条件是 ax + by + c = 0
使用齐次坐标,点p的齐次坐标是:p' = (x, y, 1)
那么 ax + by + c = 0 就可以使用两个向量的内积(点乘)表示:
ax + by + c = (a, b, c)T(x, y, 1) = lT * p' = 0
因此,点p在直线l上的充分必要条件就是直线l的向量与p的齐次坐标p'的内积为零:
lT * p' = 0
三维空间类似,点P在平面A上的充分必要条件是平面A与向量P的齐次坐标P'的内积为零:
AT * P' = 0-
方便表达直线与直线,平面与平面的交点
在齐次坐标下,可以用两个点p, q的齐次坐标叉乘结果来表达一条直线l,也即是 l = p × q
也可以用两条直线 l, m 的叉乘表示他们的交点 x,x = l × m叉乘:两个向量a和b的叉乘尽在三维空间中有定义,写作a×b
a×b是与a和b都垂直的向量
其模长等于以两个向量为边的平行四边形的面积
叉乘可以定义为:
其中,θ表示a,b的夹角(0。到180。之间),||a||,||b||是向量的模长
e则是一个与向量a,b所构成的平面垂直的单位向量
根据叉乘定义:
向量自身叉乘结果为0,因为夹角为0。也就是说三维向量 a x a =0, b x b = 0,而点乘(也称点积,内积)的定义是a * b = ||a||* ||b|| * cos(θ)
根据定义:如果两个向量垂直,cos(θ) = 0,点积也为0。为什么两条直线 l, m 的叉乘 l × m 等于他们的交点 p, 也就是 p = l× m?
原因如下:
首先,根据前面叉乘的定义, l ×m 的结果向量(记为 p = l×m)与l 和m 都垂直,根据点乘的定义,垂直的向量之间的点积为0,因此可以得到:
lT * (l × m) = lT * p = 0
mT * (l × m) = mT * p = 0
因此,根据前面点在线上的结论,可以看到p即在直线m上,又在直线l上,所以 p = l×m 是两条直线的交点。此处p是齐次坐标 能够区分一个向量和一个点
如果(x, y, z)是一个点,则变为(x, y, z, 1)
如果(x, y, z)是一个向量,则变为(x, y, z, 0)能够表达无穷远
比如两条平行的直线 ax + by + c = 0, ax + by + d = 0,
可以分别用向量 l = (a, b, c), m = (a, b, d)表示
根据前面直线交点的计算方法,其交点为 l×m
根据叉乘计算法则,可以得到 l×m = (d - c)( b, -a, 0),忽略标量(d-c),我们的到交点为(b, -a, 0),并且是齐次坐标如果要转化为非齐次坐标,那么会得到(b/0, a/0),坐标是无穷大,可以认为该点为无穷远。符合平行线相交于无穷远的概念更简洁的表达欧式变换
使用非齐次坐标
x' = Rx + t
使用齐次坐标(x和'为齐次坐标)
x' = Tx