DrifterFun

One need not hope in order to undertake, nor succeed in order to persevere.

投影灭点与月亮

2018-10-02


V-SLAM对于3D视觉的要求很高。所以说基本上很多时候对于同样一幅图像,很多人会关注图像的构图,光影等等,而做V-SLAM的人更会关注图像中的一些几何信息等等。其中很多这样的观察能够解释很多生活中有趣的例子。就比如今天想要介绍的:投影灭点与月亮的故事。

首先讲讲投影灭点的意思吧。我们人类的视觉系统常常被建立为小孔成像模型。也就是说我们认为我们眼中图像是和相机的小孔成像模型一样,利用透视变换将三维世界投影到我们视网膜的感光细胞上以产生视觉。在数学上,我们有一套几何理论(射影几何)来描述三维世界到我们眼中世界的变换。

$$[x,y,1]^T = P[X,Y,Z,1]^T$$

在上式中[x,y,1]代表我们眼中的坐标系,[X,Y,Z,1]代表世界的三维坐标系,P代表投影矩阵。

也就是说我们视觉产生的过程可以被理解为一个由三维向量空间到二维向量空间的线性变换。在这个变换中一些奇异点的存在会导致一些奇怪的现象,这也就导致了我们视觉系统对世界的一些认知上的偏颇。今天想和各位看官分享的就是透视几何中的——投影灭点。我们尝尝有这样的错觉,在三维世界中两条平行的直线,在我们的视觉系统中被成像为相交的两条直线,就像是下面这幅图所示。

图片名称


其中两条平行线相交的点在3D视觉领域有一个术语——投影灭点。那么是什么原因导致了这个奇怪的现象呢(明明是平行的两条线在我们的视觉系统中却相交了)?其实这个现象在数学上不难解释,通俗一点解释起来就是:在一个平面上的一组平行线,经过空间中的某一点投影到另外一组平面上时投影出来的两条直线就会相交。具体的图像可以参考这里

接下来要探讨的问题就是,那么这个交点是个什么东西呢?为什么明明在空间中不相交的平行线经过投影,在我们的视觉系统中出现的交点到底意味着什么呢?先说答案吧:其实这个交点就是平行线无穷远处的交点在我们视网膜上所呈出的像。

这里有个巨大的难以理解的概念,什么叫做平行线的交点?首先回忆一下平行这个概念最初是怎么进入我们的认知的?对了,人类第一次对平行的认知是我们学习了欧式几何之后。其实这个世界上不仅仅有欧式几何,还有非欧式几何,其中一个很大的区别在于我们是否认可“平行”这个概念。下面我们分别给出欧式几何的公理和射影几何的公理。

欧氏几何

射影几何

射影几何是欧式几何的发展,它去掉了欧氏几何中有关“平行”的概念。为了去掉这个概念而引入了类似“无限远点”等等的数学概念。射影几何发展到今天已经成为了一个完备的理论体系,是一个比欧氏几何更加方便的用于分析相机成像模型的理论工具。因此我们可以在射影几何的定义内说平行线是有交点的,而他们交点的投影就是投影灭点。得益于射影几何的解析理论,我们现在终于可以讨论下“月亮跟着我走”的问题了。

在射影几何中我们可以用一个线性变换来描述小孔成像问题。

$$ p = K[R|t]P $$

其中P代表空间中的三维点,p代表相片上的二维点。根据射影几何的原理,空间中无限远的点可以表示成[X,Y,Z,0],带入上式可以得到:

$$[x,y]^T = KR[X,Y,Z]^T$$

也就是说无线远处的点在我们眼中的投影位置的变化只与R(旋转)有关,而与t(平移)没有关系。在现实生活中月亮离我们特别远,可以认为近似是一个无穷远点所以当我们抬头望向月亮时,它在我们视网膜中的位置与我们是否移动没有关系。月亮跟着我走这个童年谜案到这里也就正式破案了。