0、参考链接

  • Homogeneous Coordinates
  • 为什么要引入齐次坐标

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​]=[kx​0​0ky​​][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.50​00.5​][cos45sin45​−sin45cos45​][20​02​][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​⎦⎤​=⎣⎡​100​010​txty1​⎦⎤​⎣⎡​x1y11​⎦⎤​
这是个非常优美的地方,学习过矩阵乘法的同学可以算一下右边的式子,是否最终结果与前面是一样的。

这样,平移变换通过升维后的齐次坐标,也变成了矩阵乘法的形式。当然缩放变换和旋转变换的矩阵形式也得改一改,统一变成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​⎦⎤​=⎣⎡​kx​00​0ky​0​001​⎦⎤​⎣⎡​x1y11​⎦⎤​
旋转变换:
[ 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θ0​−sinθcosθ0​001​⎦⎤​⎣⎡​x1y11​⎦⎤​
终于统一了。以后所有的变换,不管怎样变换,变换多少次,都可以表示成一连串的矩阵相乘了,这是多么的方便。

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

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

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

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

  1. 数字图像处理--引入齐次坐标

    前面我们提到了图像的缩放变换和旋转变换,可以用矩阵乘法的形式来表达变换后的像素位置映射关系. 那么,对于平移变换呢?平移变换表示的是位置变化的概念.如下图所示,一个图像矩形从中心点[x1,y1]平移到 ...

  2. 为什么要引入齐次坐标,齐次坐标的意义(二)

    前面我们提到了图像的缩放变换和旋转变换,可以用矩阵乘法的形式来表达变换后的像素位置映射关系. 那么,对于平移变换呢?平移变换表示的是位置变化的概念.如下图所示,一个图像矩形从中心点[x1,y1]平移到 ...

  3. 为什么要引入齐次坐标,齐次坐标的意义(一)

    问题:两条平行线可以相交于一点 在欧氏几何空间,同一平面的两条平行线不能相交,这是我们都熟悉的一种场景. 然而,在透视空间里面,两条平行线可以相交,例如:火车轨道随着我们的视线越来越窄,最后两条平行线 ...

  4. 为什么要引入齐次坐标?

    问题来源:在研究相机标定的过程中,从世界坐标系变换到相机坐标系和从相机坐标系与图像坐标系之间的转换时,都用到了齐次坐标升了一维,为什么不能直接进行转换呢? 从世界坐标系到相机坐标系的变换开始说起, 相 ...

  5. OpenGL 之 齐次坐标

    为什么要引入齐次坐标 为什么要引入齐次坐标 为什么要引入齐次坐标2 为什么要引入齐次坐标3 齐次坐标的意义 齐次坐标的作用,把各种变换都统一了起来,即 把缩放,旋转,平移等变换都统一起来,都表示成一连 ...

  6. 图像坐标:我想和世界坐标谈谈(A) 【计算机视觉学习笔记--双目视觉几何框架系列】

    玉米竭力用轻松具体的描述来讲述双目三维重建中的一些数学问题.希望这样的方式让大家以一个轻松的心态阅读玉米的<计算机视觉学习笔记>双目视觉数学架构系列博客.这个系列博客旨在捋顺一下已标定的双 ...

  7. 双目视觉几何框架详解(玉米专栏8篇汇总)

    一.图像坐标:我想和世界坐标谈谈(A) 玉米竭力用轻松具体的描述来讲述双目三维重建中的一些数学问题.希望这样的方式让大家以一个轻松的心态阅读玉米的<计算机视觉学习笔记>双目视觉数学架构系列 ...

  8. 拼接模型坐标系的理解(五)

    该系列文章主要是以整理资料为主,在博主学习的过程中,经常收集一些有用没用的资料,这里挑出来的都是我初学者自认为含金量比较高的,如果你有看到该系列文章,不妨跟着走一遍.博主目前还处于模棱两可的阶段,后续 ...

  9. 双目视觉三维重建框架

    一.图像坐标:我想和世界坐标谈谈(A) 玉米竭力用轻松具体的描述来讲述双目三维重建中的一些数学问题.希望这样的方式让大家以一个轻松的心态阅读玉米的<计算机视觉学习笔记>双目视觉数学架构系列 ...

最新文章

  1. JSP第二次作业_6小题
  2. 使用css3属性transition实现页面滚动
  3. LINUX与UNIX SHELL编程指南 学习笔记
  4. Interesting Finds: 2008.01.25
  5. mysql 1118_mysql innodb 引擎 ,建表时报错:ERROR 1118 (42000)
  6. Django | 静态文件处理
  7. 【190112】VC++ 电话簿通讯录程序源代码
  8. linux一键安装lamp教程,CentOS7下LAMP一键安装包教程
  9. 人事管理--转正功能需求分析
  10. 高端计算机教室,惟义楼高端智慧教室!360°高清全景抢先看
  11. 密西根州立大学副教授汤继良:我的人生总有神奇的GPS
  12. 009 Ubuntu安装Google浏览器
  13. 腿部建模布线解析—3D角色建模师必了解的人体结构
  14. FDE之要求密码开机流程
  15. powerAutomate
  16. 寒假每日一题 1 : 笨拙的手指 java
  17. android 手机文件及文件夹目录详解
  18. 解密DeathStalker
  19. 金山打字通2011+免升级
  20. JAVA调用GDAL实现影像格式转换,以tif to jpg为例

热门文章

  1. 评职称有什么好处?有以下8点好处
  2. Power Query 系列 (12) - Power Query 结构化列应用案例
  3. 知乎上40个有趣回复,很精辟!
  4. ROS自定义msg类型及使用
  5. Python爬虫学习(十一)下载验证码图片
  6. pythonbmi代码_python用代码实现体质指数BMI测试功能
  7. 国外免费(开放获取)学术资源大全
  8. Python的文件操作,open、with open
  9. 程序设计思维与实践 Week2 作业 B - Pour Wate
  10. Drill 学习笔记之 入门体验