2018年浙大SLAM暑期学校学习整理——相机模型与投影变换——齐次坐标(麻麻再也不用担心我理解不了齐次坐标了)

  有幸能够参加浙江大学CAD&CG国家中重点实验室举办的第一届SLAM暑期学校真的棒,在这四天时间里分别见到了刘浩敏,王京,李名杨等大佬也是真的让人开阔眼界。
  这四天也介绍了很多的知识和信息,觉得有必要趁热打铁整理一下,不然过段时间就全部忘光了。
  咳咳,那就开始吧哈哈哈~

齐次坐标(Homogeneous Coordinate)

首先,什么是齐次坐标呢?这个问题一直在困扰着我,一般我查了一下,
基本都是这样说的:是用n+1维的向量来表示原本n维的向量
优点是:合并矩阵运算中的加法和乘法
也就是说:在原有的维度上增加一个维度,但却不增加自由度

这样的说法也算是让人明白了吧,但是理解上我总觉得还是缺一些什么的(当然主要可能还是自己的理解能力比较差吧)。

然后自己看到《计算机图形学(OpenGL版)》的作者F.S. Hill Jr.曾说过一句话:
“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”

这里要划重点了,因为这句话一下子点醒我了。从这两个方面去理解,一下子就能豁然开朗了

1. 【其一是区分向量和点

假设给定我们一个坐标(4,3,5),在同一个坐标基下,我们其实是根本不知道这个表示的是一个向量还是一个点。比如说:
对于一个向量v的话,可以用坐标(4,3,5)以及基(a,b,c)来表示该向量:
v = 4 a + 3 b+5 c;
对于一个空间点p的话
p - o = 4 a + 3 b + 5 c表示po这个向量,
p =o + 4 a + 3 b + 5 c位于(4,3,5)那个空间位置的点。这里o就是坐标的原点。
可以明显的看出来要表示的一个点和要表示一个向量的还是有差别的,表示点还需要额外的量o。
所以这里用齐次坐标的话就能够很轻松的对给定的一个三维量进行判断和区分,判定其到底是一个向量还是一个3D点,这就是齐次坐标为什么说要加一个维的原因了。
比如说,在给定一个三维的量(6,6,6),我们还是不知道,但是当加上一个维度后,将其用四维形式表示,我们就可以很容易的区分同一组基表示下的点和向量,
如果是(6,6,6,0),就是表示一个向量;
如果是(6,6,6,1),就表示的是一个空间点
从普通坐标转换成齐次坐标时
如果(x,y,z)是个点,则变为(x,y,z,1);
如果(x,y,z)是个向量,则变为(x,y,z,0)
从齐次坐标转换成普通坐标时
如果是(x,y,z,1),则知道它是个点,变成(x,y,z);
如果是(x,y,z,0),则知道它是个向量,仍然变成(x,y,z)

2. 【其二是易于进行仿射变换(Affine Transformation)

(关于仿射变换的概念等东西会在后面的博客中再记录一下,主要就是旋转,平移和尺度缩放这三个部分,这些基础的东西都逃不过的呢其实,如果不好好的理解和建立成自己的世界观,就很难再继续深入进行相关的学习!)

所以结论:由于自己研究的SLAM方向主要就是环境中的landmark或者说feature进行处理,这样就可以把3D点表示成齐次坐标的形式,方便用矩阵对其进行操作!!!

以下稍微举例子说明一下齐次坐标的使用。
—————————————————————分割线—————————————————
(1)齐次坐标:
齐次坐标的感受
(2)些齐次坐标用法的小栗子——表示平移(对于像素坐标来说就是给u,v加一个维度,把平面2D 坐标用3D齐次坐标来进行表示。)
(2.1)一般坐标和齐次坐标表示平移:
表示平移的例子
(2.2)利用其次坐标判断点在线上,点在面上:
点在线、面上

嗯嗯,大概就是这样了!果然有助于自己的理解!

猜你喜欢

转载自blog.csdn.net/Amazingren/article/details/81258814