[计算机视觉] 什么是齐次坐标?为什么要引入齐次坐标?

0、参考链接

1、问题:两条平行线可以相交于一点

  • 欧式空间中,同一平面的两条直线不能相交;

  • 透视空间中,两条平行线可以相交,火车轨道随着我们的视线越来越窄,最后两条平行线在无穷远处交于一点;

  • 欧式空间描述2D/3D几何非常合适,但这种方法不适合处理透视空间的问题。

2、解决方法:利用齐次坐标解决这一问题

  • 齐次坐标就是用N+1维来代表N维坐标;

  • 我们可以在一个2D笛卡尔坐标(X, Y)末尾加上一个额外的变量w来形成2D齐次坐标(x, y, w),并且有:

    X = x / w

    Y = y / w

    例如,笛卡尔坐标系下(1, 2)的齐次坐标可以表示为(1, 2, 1),如果(1, 2)移动到无限远处,在笛卡尔坐标系下变成(∞, ∞),这个点没有意义,它的齐次坐标为(1, 2, 0)。

  • 平行线在透视空间的无穷远处交于一点,但是在欧氏空间却不能。

3、为什么叫齐次坐标?

我们把齐次坐标转化为笛卡尔坐标的方法是前面n-1个坐标分量分别除以最后一个分量即可。
( x , y , w ) ⇔ ( x w , y w )  Homogeneous  \begin{array}{cc} (x, y, w) & \Leftrightarrow & \left(\frac{x}{w}, \frac{y}{w}\right) \\ \text { Homogeneous } \end{array} (x,y,w) Homogeneous (wx,wy)

( 1 , 2 , 3 ) ⇒ ( 1 3 , 2 3 ) ( 2 , 4 , 6 ) ⇒ ( 2 6 , 4 6 ) = ( 1 3 , 2 3 ) ( 4 , 8 , 12 ) ⇒ ( 4 12 , 8 12 ) = ( 1 3 , 2 3 ) ⋮ ⋮ ( 1 a , 2 a , 3 a ) ⇒ ( 1 a 3 a , 2 a 3 a ) = ( 1 3 , 2 3 ) \begin{array}{c} (1,2,3) \Rightarrow\left(\frac{1}{3}, \frac{2}{3}\right) \\ (2,4,6) \Rightarrow\left(\frac{2}{6}, \frac{4}{6}\right) \quad=\left(\frac{1}{3}, \frac{2}{3}\right) \\ (4,8,12) \Rightarrow\left(\frac{4}{12}, \frac{8}{12}\right)=\left(\frac{1}{3}, \frac{2}{3}\right) \\ \vdots & \vdots \\ (1 a, 2 a, 3 a) \Rightarrow\left(\frac{1 a}{3 a}, \frac{2 a}{3 a}\right)=\left(\frac{1}{3}, \frac{2}{3}\right) \end{array} (1,2,3)(31,32)(2,4,6)(62,64)=(31,32)(4,8,12)(124,128)=(31,32)(1a,2a,3a)(3a1a,3a2a)=(31,32)

我们发现(1, 2, 3)、(2, 4, 6)和(4, 8, 12)对应同一个欧几里得点(1/3, 2/3),因此这些点是齐次的,因为它们代表了笛卡尔坐标系里面的同一个点。

4、证明:两条直线可以相交

考虑如下方程组:
{ A x + B y + C = 0 A x + B y + D = 0 \left\{\begin{array}{l} A x+B y+C=0 \\ A x+B y+D=0 \end{array}\right. {Ax+By+C=0Ax+By+D=0
在笛卡尔坐标系里面,该方程无解,因为两条直线平行。

在透视空间里面,用齐次坐标(x / w, y / w)代替x,y:
{ A x w + B y w + C = 0 A x w + B y w + D = 0 ⇒ { A x + B y + C w = 0 A x + B y + D w = 0 \left\{\begin{array} { l } { A \frac { x } { w } + B \frac { y } { w } + C = 0 } \\ { A \frac { x } { w } + B \frac { y } { w } + D = 0 } \end{array} \Rightarrow \left\{\begin{array}{l} A x+B y+C w=0 \\ A x+B y+D w=0 \end{array}\right.\right. {Awx+Bwy+C=0Awx+Bwy+D=0{Ax+By+Cw=0Ax+By+Dw=0
现在我们有一个解(x, y, 0),两条直线相交于(x, y, 0),这个点在无穷远处。

齐次坐标的意义

图像的缩放变换和旋转变换可以用矩阵乘法的形式来表达变换后的像素位置映射关系。

那么对于平移变换呢?平移变换表示的是位置变化的概念。

一个图像矩形中心点从[x1, y1]平移到了[x2, y2],整体大小和角度都没有变化。在x方向和y方向上分别平移了tx和ty的大小,即:
x 2 = x 1 + t x y 2 = y 1 + t y \begin{array}{l} x 2=x 1+t x \\ y 2=y 1+t y \end{array} x2=x1+txy2=y1+ty
写成矩阵的形式:
[ x 2 y 2 ] = [ x 1 y 1 ] + [ t x t y ] \left[\begin{array}{l} x 2 \\ y 2 \end{array}\right]=\left[\begin{array}{l} x 1 \\ y 1 \end{array}\right]+\left[\begin{array}{l} t x \\ t y \end{array}\right] [x2y2]=[x1y1]+[txty]
把缩放变换和旋转变换的矩阵形式写出来:

缩放变换:
[ x 2 y 2 ] = [ k x 0 0 k y ] [ x 1 y 1 ] \left[\begin{array}{l} x 2 \\ y 2 \end{array}\right]=\left[\begin{array}{cc} k_{x} & 0 \\ 0 & k_{y} \end{array}\right]\left[\begin{array}{l} x 1 \\ y 1 \end{array}\right] [x2y2]=[kx00ky][x1y1]
旋转变换:
[ x 2 y 2 ] = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] [ x 1 y 1 ] \left[\begin{array}{l} x 2 \\ y 2 \end{array}\right]=\left[\begin{array}{cc} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{array}\right]\left[\begin{array}{l} x 1 \\ y 1 \end{array}\right] [x2y2]=[cosθsinθsinθcosθ][x1y1]
缩放变换和旋转变换都可以表示成矩阵乘法的形式。实际上,图像的几何变换通常不是单一的,也就是说经常性的缩放、旋转、平移一起变换。例如先放大2倍,然后旋转45度,然后再缩小0.5倍。那么就可以表示成矩阵乘法串接的形式:
[ x 2 y 2 ] = [ 0.5 0 0 0.5 ] [ cos ⁡ 45 − sin ⁡ 45 sin ⁡ 45 cos ⁡ 45 ] [ 2 0 0 2 ] [ x 1 y 1 ] \left[\begin{array}{l} x 2 \\ y 2 \end{array}\right]=\left[\begin{array}{cc} 0.5 & 0 \\ 0 & 0.5 \end{array}\right]\left[\begin{array}{cc} \cos 45 & -\sin 45 \\ \sin 45 & \cos 45 \end{array}\right]\left[\begin{array}{ll} 2 & 0 \\ 0 & 2 \end{array}\right]\left[\begin{array}{l} x 1 \\ y 1 \end{array}\right] [x2y2]=[0.5000.5][cos45sin45sin45cos45][2002][x1y1]
不管有多少次变换,都可以用矩阵乘法来实现。但是平移变换呢?从前面看到,平移变换并不是矩阵乘法的形式,而是矩阵加法的形式!

那能不能把==缩放变换、旋转变换、平移变换统一成矩阵乘法的形式==呢,这样不管进行多少次变换,都可以表示成矩阵连乘的形式,将极大的方便计算和降低运算量。

这种方法就是**升维,引入齐次坐标**,将图像从平面2D坐标变成3D坐标。

平移变换升成3D,表示为:
[ x 2 y 2 1 ] = [ 1 0 t x 0 1 t y 0 0 1 ] [ x 1 y 1 1 ] \left[\begin{array}{c} x 2 \\ y 2 \\ 1 \end{array}\right]=\left[\begin{array}{ccc} 1 & 0 & t x \\ 0 & 1 & t y \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{c} x 1 \\ y 1 \\ 1 \end{array}\right] x2y21=100010txty1x1y11
这是个非常优美的地方,学习过矩阵乘法的同学可以算一下右边的式子,是否最终结果与前面是一样的。

这样,平移变换通过升维后的齐次坐标,也变成了矩阵乘法的形式。当然缩放变换和旋转变换的矩阵形式也得改一改,统一变成3维的形式。
缩放变换:
[ x 2 y 2 1 ] = [ k x 0 0 0 k y 0 0 0 1 ] [ x 1 y 1 1 ] \left[\begin{array}{c} x 2 \\ y 2 \\ 1 \end{array}\right]=\left[\begin{array}{ccc} k_{x} & 0 & 0 \\ 0 & k_{y} & 0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{c} x 1 \\ y 1 \\ 1 \end{array}\right] x2y21=kx000ky0001x1y11
旋转变换:
[ x 2 y 2 1 ] = [ cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ] [ x 1 y 1 1 ] \left[\begin{array}{c} x 2 \\ y 2 \\ 1 \end{array}\right]=\left[\begin{array}{ccc} \cos \theta & -\sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{array}\right]\left[\begin{array}{c} x 1 \\ y 1 \\ 1 \end{array}\right] x2y21=cosθsinθ0sinθcosθ0001x1y11
终于统一了。以后所有的变换,不管怎样变换,变换多少次,都可以表示成一连串的矩阵相乘了,这是多么的方便。

这就是引入齐次坐标的作用:把缩放、旋转、平移等变换都统一起来,都表示成一连串的矩阵相乘的形式,保证了形式上的线性一致性

齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示。

许多图形应用涉及到几何变换,主要包括平移、旋转、缩放。以矩阵表达式来计算这些变换时,平移是矩阵相加,旋转和缩放则是矩阵相乘,综合起来可以表示为 x=R∗X+t(注:因为习惯的原因,实际使用时一般使用变化矩阵左乘向量)(R 旋转缩放矩阵,t 为平移矩阵,X为原向量,x 为变换后的向量)。
引入齐次坐标的目的主要是合并矩阵运算中的乘法和加法,表示为x=P∗X的形式。

### 回答1: 齐次坐标(Homogeneous coordinates)是计算机视觉和图形学中常用的一种坐标系统。它可以将几何图形中的点、向量、平面等抽象概念用一个更为简单和统一的方式表示出来,从而方便计算机对它们进行处理。 在齐次坐标中,一个点的坐标由四个分量表示,通常表示为(x, y, z, w),其中(x, y, z)是点在三维空间中的坐标,w是一个称为齐次坐标参数(homogeneous coordinate parameter)的参数。齐次坐标参数可以取任意非零值,但是通常取1,这样可以避免数值计算中的除法操作。 使用齐次坐标,可以将二维图形中的变换表示为一个3x3的矩阵变换,而将三维图形中的变换表示为一个4x4的矩阵变换,这样可以方便地进行矩阵乘法等数值计算。齐次坐标还可以用于表示平面、直线和多边形等几何图形,方便进行投影和变换操作。 ### 回答2: 齐次坐标是指在计算机视觉中广泛应用的一种扩展形式的坐标表示方法。在齐次坐标中,一个点的坐标由其原始的几何坐标(x、y)和一个额外的维度(w)组成,即(x, y, w)。 齐次坐标可以理解为在欧几里得空间中的同一个坐标系中,通过引入一个额外的维度w来扩展原始坐标。这个额外的维度w允许我们同时表示平移和旋转操作,从而更方便地进行计算。 在齐次坐标中,一个点的坐标可以通过除以w来恢复原始的几何坐标,即:x = x' / w,y = y' / w。这意味着通过齐次坐标可以方便地进行坐标变换,例如平移、旋转、缩放等,并且不需要进行额外的计算。 齐次坐标计算机视觉中的广泛应用主要体现在图像变换和计算几何变换中。例如,在图像变换中,我们可以通过齐次坐标方便地进行图像的平移、旋转等操作。在计算几何变换中,我们可以通过齐次坐标进行方便地进行三维点的投影等操作。 总之,齐次坐标通过引入一个额外的维度w,扩展了原始点的坐标表示,方便了计算机视觉中的图像变换和几何变换的操作。 ### 回答3: 齐次坐标计算机视觉领域中常用的一种表示方法,它是通过在传统的欧几里得坐标系上引入一个额外的维度来扩展的。具体来说,在齐次坐标中,一个点或向量由四个分量表示,通常记作(x, y, z, w),其中(x, y, z)表示点的三维坐标,w表示缩放因子。 齐次坐标的一个重要应用是可以将欧几里得空间中的平移运算与仿射变换(包括平移、旋转、缩放和错切)统一起来。通过齐次坐标,我们可以将平移操作以矩阵的形式表示,并与其他变换操作(如旋转、缩放)组合在一起。 齐次坐标还可以简化对图像的透视变换处理。在传统的欧几里得空间中,透视变换会引入非线性变换,计算复杂度较高。而在齐次坐标中,透视变换可以通过线性变换来表示,简化了计算过程。 在OpenCV库中,齐次坐标经常用于表示图像中的关键点(如角点、边缘点)和几何变换过程中。OpenCV提供了丰富的函数和工具,用于处理和计算齐次坐标表示的点和向量,包括坐标转换、透视变换、仿射变换等。 总之,齐次坐标计算机视觉中一种重要的数学工具,它通过引入额外的维度,将欧几里得空间中的几何变换问题转化为线性变换问题,简化了计算过程,提高了计算效率。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值