线性代数(3):理解齐次坐标

   前面有个问题我们还没聊开,不知道小伙伴们记得不?在几何向量的基本概念这一章,我们了解了如下两个概念:


        1.矢:空间中的一个直线段,当规定其两个端点中一个为起始点,一个位终止点,这个线段就称为一个矢。


        2.向量:具有同样长度和方向的失的集合称为一个向量,单独的一个矢为向量的一个代表。


        这里就引出了我们迷惑的问题了,因为数学上(当然程序中也一样)表示向量和坐标点是一样的,比如向量a = (3,2,5),坐标点P = (3,2,5),这也就罢了,然而向量a = (3,2,5)可以表示空间中平行且长度相同的任意向量,追求严谨的数学家们当然不希望这样,所以想了个方法来处理这种问题,就是齐次坐标表示法,写法上就是在n维向量(或坐标点)后面增加一维,比如:


        a(二维向量或坐标点) = (X,Y)则变成a = (x,y,w)且X = x/w,Y = y/w


        b(三维向量或坐标点) = (X,Y,Z)则变成了b = (x,y,z,w)且


        这里我们可以看出数学家的习惯,凡是遇到问题,喜欢新增一个未知量进行辅助思考和计算。


        那么齐次坐标中引入一个w分量到底表示什么意思呢?我看过一些书籍和帖子, 官方表示w分量的作用如下:


        1.齐次坐标的分量w可以区分a(x,y,z,w)表示的到底是向量还是坐标点,w为0时表示的向量,w为其他实数表示的坐标点。


        2.齐次坐标的写法非常利于线性变换。


        不知道大家能从这两句话中理解出来什么?反正我是一脸懵逼,虽然按照书籍中的规则,我们可以很容易的使用3x3和4x4的矩阵对二维向量和三维向量(齐次表示)进行各种变换(平移,旋转,缩放,错切),但是任然不理解齐次坐标本身的意义,为此我查阅过的一些资料,收集了下面的一些见解。


        笛卡尔和费马两人创立了解析几何,我们前面也说过几何学一开始就是为了测量大地的,所以有平面几何以及笛卡尔平面坐标系,测量大地后当然也就要去测量天空和大海了,就有了空间几何和笛卡尔空间坐标系①,坐标系的具体样子如下图:

image.png


        


        在这种坐标系中,向量和点的数学描叙会让人迷惑,比如向量AB = (3,5,4),向量CD =  (3,5,4),坐标点P =  (3,5,4),如果在现实世界中,我们肯定不会认为一个质点P和一条线段AB是一个东西,而且也不能认为桌子上一条线段AB和天花板上一条平行且长度相同的线段CD是一个东西。


        既然谈到现实世界了,我们好好想一下我们感受到的现实世界是怎么样子的?我们通过双眼观察这个世界,太阳光线照射到物体上,反射进入我们眼睛,光线被晶状体折射后打到视网膜上,呈现了物体倒立的等比缩放图像,经过大脑主动修正,我们就看到正立的物体的图像。我们用眼睛观察世界有一个特点,就是越远的物体看起来就越小,而且我们还能通过“越远越小”这种视觉效果估算距离。假如我们站在现实世界中的一条很远的马路上,马路尽头在我们眼中就交汇成了一个点,如下图:

image.png

        


       这种现象被称为透视现象,同样的存在这种现象的空间被称为透视空间②。


       透视现象在现实生活中无处不在,计算机视觉中也遵循这个原理。


       在笛卡尔空间中,两条平行线是永远不会相交的,但是在透视空间中,两条平行线会相交于一点,这是两种空间最大的区别。


        想像一下一条长直的铁杆长度等于上图街道的宽度,同时平行于地面,并且处于越来越远的运行状态,假设刚开始铁杆的向量AB为(x=10,y=1,z=1,w=1),那么随着铁杆越来越远,x,y,z,w的数值越来越小并且x/w,y/w,z/w的数值保持不变,这样的话(x,y,z,w)既能表示同样的向量长度方向,又能区分向量的位置,所以w分量的引入确实起到了实际作用。


        image.png


        如上图,假如铁杆移动到无限远处,那么铁杆向量AB在笛卡尔空间下表示为(∞,∞,∞) ,那么在透视空间的齐次坐标表示下AB = (10/w = ∞,1/w = ∞,1/w = ∞,w=0),这么一来就说明w = 0就表示了透视空间中一个向量平移成一个点。


        同时我看过一篇文章,谈到计算机图形学中的图形变换,实际上是在仿射空间③中进行的,而并在一般的向量空间中。


        仿射空间是向量空间的一个子集,或者说仿射空间是向量空间的一种,但是区别于向量空间的特殊之处就是仿射空间没有选定原点,一般的向量空间我们都会人为的定义一个“绝对中心”也就是原点,仿射空间则不局限于这个“绝对中心”。


        仿射空间的坐标原点是不确定的,一个仿射空间A变换成另一个仿射空间B就是A经过线性变换(旋转)然后平移,变成B。那么我们可以认为向量空间中图形的变换,就是从图形的中心心所在的同样中心仿射空间A经过仿射变换变成另一个仿射空间B,这个应该很好理解,因为我们观察unity引擎中表示物体Obj的transform是不是有个worldposition属性,我们可以理解为worldposition属性就代表着当前物体Obj所处的仿射空间A的原点就是worldposition,物体Obj通过变换后transform上的worldposition属性就变成了新的仿射空间B的原点。


这个过程中仿射空间A可能经过了旋转缩放最后再平移变成了仿射空间B,其中的图形也跟着变换,可以理解仿射变换的函数表示:


         γ = T*α+β,其中α为原始图形,T为线性变换矩阵,β为平移向量


        因为β平移无法满足线性f(a+b) = f(a) + f(b)同时f(ka) = k*f(a)的可加性和比例性,所以这个变换暂时不能称为线性变换,但是缩放k倍和旋转θ角这两种变换却是可以的,所以我们需要扩充维度进行β平移的计算,以便达到完美统一的线性变换的目的,如下图:


        image.png


        因为仿射空间的存在,我们认为图形变换就是变换了以图形为原点的仿射坐标,那么我们使用齐次坐标表示法,同时变换矩阵也扩充一个维度称它为”平移维度“,这时候我们可以利用数学技巧“忽略掉”除了“平移维度”之外的维度,只进行“平移维度”的计算, 根据矩阵乘法的计算规则,那么tx,ty就很自然的处理了两个仿射空间的平移,如下图,忽略黑框中的线性变换方块:


        image.png


       这大概就是图形学书上面对齐次坐标的作用的解释。


  

————————————————

版权声明:本文为CSDN博主「羊羊2035」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/yinhun2012/article/details/79566148



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864