多视图几何——介绍(一)

本文介绍了射影几何的基本概念,包括射影变换如何保持直线性,以及如何通过在欧氏空间中添加无穷远点形成射影空间。通过讨论平行线、无穷远点和齐次坐标,阐述了从欧氏几何到仿射几何再到射影几何的过程,强调了射影空间在计算机视觉中的应用,特别是在三维重建中的重要性。

Introduction – a Tour of Multiple View Geometry

       本章是对主要思想的介绍,并对这些话题进行了非正式的处理。精确、明确的定义、缜密的代数以及对精细估计算法的描述在第2章及以后的章节。在整个介绍中,我们一般不会给出具体的前几章。

  1. 泛射影几何

       我们都很熟悉射影变换,当我们看一张图片时,我们看到的不是正方形,也不是圆形的圆圈。将这些平面对象映射到图片上的变换是射影变换的一个例子。

       那么有哪些几何性质是通过射影变换而维持不变的呢?当然,形状不是,因为一个圆可能是椭圆。也不是长度,因为射影变换,不同圆的两个垂直半径被不同的长度拉长。角度,距离,距离比这些都没有被保留下来,而且似乎很少几何性质通过射影变换能够保留下来。然而,直线度这个属性可以保留下来。结果表明,这是对映射的最一般要求,我们可以定义平面的射影变换,作为平面上保持直线的点的任何映射。

       为了了解为什么我们需要射影几何,我们从熟悉的欧氏几何开始。这是描述物体的角度和形状的几何学。欧氏几何在一个主要方面有些麻烦——我们需要不断地对几何的一些基本概念——如直线的交点——进行推理。两条线(我们在这里考虑的是二维几何)几乎总是在一个点上相遇,但也有一些不这样做的线——我们称之为平行线。解决这个问题的一个通用的描述是说平行线满足“无穷远”。然而这并不完全令人信服,并与另一个意见冲突,无穷的不存在,而只是一个虚构的。我们可以通过在平行线相遇的无穷远处加上这些点来强化欧氏平面,并通过称它们为“理想点”来解决无穷大的困难。

      通过在无穷远处加上这些点,将熟悉的欧氏空间转化为一种新的几何对象——射影空间。这是一种非常有用的思维方式,因为我们熟悉欧氏空间的性质,涉及距离、角度、点、线和入射等概念。射影空间并没有什么神秘的东西,它只是欧氏空间的一种延伸,在这两点中,两条直线总是在一点相遇,有时甚至在无穷远处的神秘点上相遇。

坐标.

       在欧氏空间的一个点是由一个有序实数对(x,y)表示。我们可以给这对增加一个额外的坐标,给出一个三元坐标(x,y,1),我们声明代表相同的点。这似乎是没什么区别,因为我们可以简单地通过添加或移除最后一个坐标来从一个点到另一个表示。我们现在着重从概念上来解释为什么最后一个坐标需要为1,毕竟其他两个坐标不受约束。三元坐标(x,y,2)呢?。在这里,我们作一个定义,说(x,y,1)和(2x,2y,2)代表同一点,当然对任何非零值K,(Kx,Ky,K)也表示同一点。正式地,点由三元坐标的等价类别表示,其中两个三元组在它们不同的公倍数时是等效的。这称为点的齐次坐标。给定一个三元坐标(Kx,Ky,K),我们在得到原来的坐标后除以K得到(x,y)

       读者会注意到,虽然(x,y,1)与坐标对(x,y)表示相同的点,但没有对应于三元坐标(x,y,0)的点。如果我们试着用最后一个坐标来划分,我们得到了无穷的点(x / 0,y / 0)。无穷远点就是这样产生的。它们是齐次坐标最后那个坐标为零的点。

       现在我们知道了如何在二维欧氏空间中做到这一点,通过把点表示为齐次向量,然后可以把它扩展到射影空间,很明显,我们可以在任何维度上做同样的事情。欧氏空间的IRⁿ可通过将点表示成齐次向量而扩展到射影空间的IPⁿ。结果表明,二维射影空间中无穷远点形成一条线,通常称为无穷远处的直线。在三个维度中,它们在无穷远处形成平面。

齐次性.

       在经典欧氏几何中,所有点都是一样的。没有特殊点。整个空间都是齐次的。当坐标增加时,一个点被指定作为原点。然而,要认识到这只是一个人为的选择。我们同样可以找到一个原点是不同点的坐标平面。事实上,我们可以考虑欧氏空间的坐标变换,在这些空间中,轴被移动并旋转到不同的位置。我们可以用另一种方式来思考这个问题,因为空间本身在转换和旋转到另一个位置。由此产生的操作称为欧氏变换。

       更一般的类型转换是线性变换IR,其次是欧氏变换移动空间原点。我们可以认为这是空间的移动,旋转,最后可以在不同方向按不同比例线性拉伸。由此产生的变换称为仿射变换。

       欧氏变换或仿射变换的结果是无穷远处的点保持在无穷远处。这样的点在某种程度上,至少是作为一个集合,通过这样的转换来保留。它们在某种程度上是突出的,或者在欧氏或仿射几何的背景下是特别的。

       从射影几何的观点来看,无穷远点与其他点没有任何区别。正如欧氏空间是均匀的,射影空间也是一样。在无穷远处点在齐次坐标表示中最后的坐标为零,只是人为的对坐标系进行选择造成的。与欧氏变换或仿射变换相类似,我们可以定义射影空间的射影变换。欧氏空间中的线性变换IR是通过用坐标表示的矩阵乘法表示。同样,射影空间的射影变换IPⁿ是表示一个点((n+1)向量)的齐次坐标的映射,其中坐标向量由一个非奇异矩阵相乘得到。在这种映射下,无穷远点(末尾坐标为零)被映射到任意其他点。无穷远点不被保留。因此,射影空间的射影变换IPⁿ是由齐次坐标的线性变换表示的。


       在计算机视觉问题中,通过扩展到三维(3D)射影空间,射影空间可以便捷的表示真实三维世界。同样地,通常把现实世界空间射影到二维表示上形成的图像,也被方便地扩展为二维投影空间。事实上,现实世界和它的图像不包含无穷远点,我们需要保持我们的手指是虚构的点,即图像中无穷远处的线和世界上无穷远的平面。由于这个原因,虽然我们通常使用射影空间,但我们知道无穷远的直线和平面在某种程度上是特殊的。这违背了纯粹射影几何的精神,但它适用于解决我们的实际问题。通常,在适当的时候我们都会使用这两种方式同时处理射影空间所有点,并在必要的时候找到在空间中无穷远的线或在图像中无穷远的平面。


1.1.1仿射和欧氏几何
我们可以通过在无穷远处加一条直线(或平面)来获得射影空间。我们现在考虑逆向过程。本文主要讨论两个三维射影空间。

仿射几何. 

       我们将考虑到投影空间最初是均匀的,没有首选的坐标系。在这样一个空间,没有平行线的概念,由于平行线(或三维空间中的平面)是那些永不相交。然而,在射影空间中,没有哪一点是无穷远的概念,所有的点都是相等的。我们说平行不是射影几何的概念。谈论它是毫无意义的。

       为了使这个概念变得有意义,我们需要找出一些特定的线,并决定这是无穷远的线。这就产生了这样一种情形:尽管所有的点都是相等的,但有些却比其他的更平等。因此,从一张空白的纸,想象它无限延伸,形成一个射影空间IP²。我们所看到的只是空间的一小部分,看起来很像普通欧氏平面的一部分。现在,让我们在纸上画一条直线,并声明这是无穷远的直线。接下来,我们画出另外两条相交于这条线。因为它们在“无穷远线”相遇,我们把它们定义为平行的。情况类似于人们通过观察无穷平面所看到的情况。想象一下在地球上非常平坦的区域拍摄的照片。平面上的无穷远点在图像中显示为地平线。像铁轨一样的线条在画面上出现,就像在地平线上相遇的线。图像中地平线上的点(天空的图像)显然与世界平面上的点不一致。然而,如果我们考虑在照相机后面延伸相应的光线,它将在摄像机后面的某个点与平面相遇。因此,图像中的点与世界平面上的点之间存在一一对应关系。世界平面上的无穷远点对应于图像中一条真实的地平线,世界上的平行线对应于地平线上的线。从我们的观点来看,世界平面和它的图像只是观察射影平面几何的另一种方式,加上一条特殊的线。射影平面的几何和一条特殊的直线称为仿射几何,任何射影变换把一条空间中的特殊的线映射到另一个空间的直线上,称之为仿射变换。

       通过识别一条特殊的线,即“无穷远线”,我们可以定义平面上直线的平行度。然而,只要我们能够定义平行度,某些其他概念也有意义。例如,我们可以定义平行线的两点之间的间隔相等。例如,如果有A,B,C和D四点,AB和CD是平行的,如果线AC和BD也是平行的,那么我们定义两个间隔AB和CD的长度相等。同样地,如果在平行线上存在另一个相等的间隔,则在同一行上的两个间隔相等。


欧氏几何.

       通过区分射影平面中一条特殊直线,我们得到了平行几何和放射几何的概念。仿射几何被视为射影几何的特化,在其中我们根据某个维度找出一条特定的直线(或平面—根据维度),称之为无穷远的直线。

       接下来,我们谈谈欧氏几何。通过在无穷远的仿射几何上找选出线或平面的一些特殊特征成为欧氏几何。在这篇文章中,我们介绍了这本书中最重要的概念之一,绝对二次曲线。

       我们从考虑圆这个二维几何开始。请注意,圆不是仿射几何的概念,因为平面的任意拉伸,在无穷远处保持直线,使圆变成椭圆。因此,仿射几何不能区分圆和椭圆。

       然而,在欧氏几何学中,它们明显有着重要的区别。代数、椭圆是由一个二次方程描述。因此,我们期望并以为正确的是,两个椭圆通常在四点相交。然而,几何上明显的是,两个不同的圆不能相交超过两个点。代数上,我们使两个二次曲线在这里相交,或等价成二次方程求解。我们应该得到四个解决方案。问题是,只在两点相交的圆有什么特别之处?

       这个问题的答案当然是有另外两种解决方案,这两个圆在另外两个复数点相交。我们不必去看这两点了。

       齐次坐标(x,y,w)中圆的方程是以下形式


这表示以齐次坐标为中心的圆作为表示,很快就证明了点位于每一个圆上。为了重复这个有趣的事实,每个圆都经过点,因此它们位于任意两个圆的交点。由于它们的末位为零,所以这两个点位于无穷远处的直线上。很明显,它们被称为平面的圆形点。值得注意的是,虽然两圆点是复数点,但他们满足一对实数方程:

       这一发现给出了我们如何定义欧氏几何的线索。欧氏几何是在射影几何中指定一个无穷远线,随后,在这条线上的两点称为循环点。当然,圆点是复数点,但在大多数情况下,我们不太担心这一点。现在,我们可以定义一个圆为任何一个通过两圆环点圆锥曲线(由方程定义的曲线)。注意,在标准欧氏坐标系中,圆点坐标为。在将欧氏结构分配到射影平面上时,我们可以把该直线上的任意直线和任意两个(复数)点表示为无穷远点和圆点。

       作为应用这个观点的例子,我们注意到,一般的圆锥曲线可以通过平面上的五个任意点,如通过计算二次方程的系数个数可以看出。另一方面,圆是仅由三个点定义的。另一种看待的方法是,圆锥曲线通过两个特殊点,圆点,以及另外三个点,因此,对于任何圆锥曲线,它需要五个点来唯一确定

       现在可以知道,定出两圆点从而可以获得我们熟悉的欧氏几何的整体。特别是,如角度和长度比的概念,可以根据原点来定义。然而,这些概念最容易根据欧氏平面的一些坐标系来定义,详见后面的章节。


       三维欧氏几何.

       我们通过在无穷远处指定一条直线和一对圆点,来了解欧氏平面是如何用射影平面来定义的。这样的思想也可以应用到三维几何中。和二维情况下一样,人们可以仔细观察球体,以及它们是如何相交的。两球相交成一个圆圈,而不是一般的第四度曲线,如代数所示,并且作为两个一般的椭圆体处理(或其他二次曲面)。沿着这一思路就会发现,在齐次坐标所有球体在无限远的平面上与等式:表示的曲线相交。这是一个二次曲线(圆锥曲线),它位于无穷远的平面上,仅由复点构成。它被称为绝对二次曲线,是本书中最重要的几何实体之一,尤其是因为它与摄像机标定有关,后面会讲述。

       绝对二次曲线是由上述方程仅在欧氏坐标系下定义的。一般来说,我们认为三维欧氏空间来源于一个射影空间,在射影空间中找到在无穷远平面并且指定在这个平面上的一个特定的圆锥曲线作为绝对二次曲线。这些实体在射影空间的坐标系中可能有一般性的描述。

       在这里,我们不会详细介绍绝对二次曲线如何决定完整的欧氏3D几何。举个例子。空间直线的垂直度在仿射几何中不是有效的概念,但属于欧氏几何。线的垂直度可根据绝对二次曲线定义,如下。通过将直线延伸到无穷远平面上,我们得到两个点,称为两条直线的方向。线的垂直度是根据两个方向与绝对二次曲线的关系来定义的。如果两个方向是遵从绝对二次曲线的共轭点,那么直线是垂直的。在第2.8.1节定义了共轭点的几何和代数表示。简而言之,如果绝对曲线是由3×3对称矩阵Ω∞表示,及方向是点D1和D2,如果,那么它们相对于Ω∞是共轭的。在任意坐标系中,角度可以根据绝对二次曲线定义,如第3.23节所示。

### 多视图几何(MVS)的实现原理与算法 多视角立体视觉(Multi-View Stereo, MVS)是种通过多个摄像机拍摄同场景的不同角度图像,从而恢复该场景三维结构的技术。其核心目标是从二维图像中提取深度信息并构建三维模型。 #### 1. 可见性建模 在MVS中,可见性问题是关键之。由于物体可能被其他部分遮挡,在不同视角下的可见性会有所不同。为了应对这挑战,通常采用以下几种方法: - **几何法**:这种方法尝试精确模拟成像过程以及场景的真实形状,以此判断哪些场景元素在特定图像中是可见的[^1]。 - **准几何法**:这类技术利用简化版的几何推理来估算可见性关系,虽然精度稍逊于纯几何法,但在计算效率上更具优势。 - **出格点法**:此方法不依赖复杂的几何推导,而是把遮挡现象当作异常数据处理,即所谓的“出格点”,并通过统计学手段排除这些干扰项。 #### 2. 图片匹配与致性度量 旦解决了可见性问题,下步就是进行图片间的特征匹配。这步骤旨在找到跨视角间对应像素的位置,并衡量它们之间的相似程度。常用的致性度量指标有如下几类: - 基于颜色或纹理的信息对比; - 利用梯度或其他边缘检测器捕捉局部特性差异; - 结合全局约束条件优化初始配对结果。 #### 3. 深度图生成 完成上述两步之后,就可以生成每张输入图像对应的深度图了。具体做法可以概括为以下几个方面: - 对候选位置执行代价聚合操作,综合考虑邻域内的投票情况得出最终决策; - 应用亚像素插值提升分辨率效果; - 使用正则化策略平滑噪声影响同时保留重要边界细节。 #### 4. 表面重建 最后阶段的任务是对所有获取到的深度测量值加以整合,形成完整的表面表示形式——通常是三角网格或者点云集合。现代框架如Cascade-MVSNet提供了端到端解决方案,能够有效降低内存消耗并加速训练收敛速度[^2]。 ```python import torch from cascade_mvsnet import CascadeMVSNet model = CascadeMVSNet() images = [...] # List of input images from different views depths = model(images) for i, depth in enumerate(depths): print(f"Depth map {i}:") print(depth) ``` 以上代码片段展示了如何加载预定义好的神经网络架构实例`CascadeMVSNet`来进行批量预测工作流程的部分。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值