MVS多视图立体视觉
目录
1. 双目立体视觉 (Binocular Stereo Vision)
2. 多视图立体视觉 (Multi-View Stereo, MVS)
1. 双目立体视觉 (Binocular Stereo Vision)
可以将其理解为对人类双眼视觉系统的模拟。它使用两个位置固定的相机来捕捉场景,通过分析左右图像的差异来获取深度信息。
1.1 核心思想
视差(Disparity):就像我们的左眼和右眼看到的物体位置有微小差异一样,两个固定位置的相机会以不同的视角捕捉到同一个三维点。这个点在左右两幅图像上对应像素位置的水平坐标差,就是视差。根据三角测量原理,物体的视差与其深度成反比,即离相机越近的物体,视差越大;离得越远的物体,视差越小。
1.2 工作原理与流程
-
相机标定 (Camera Calibration):
-
这是第一步,也是基础。通过拍摄特定的棋盘格等标定物,精确计算出两个相机的内部参数(焦距、主点等)和它们之间的外部相对位姿关系(旋转矩阵R和平移向量T)。这个相对位姿,尤其是平移向量,定义了两个相机光心之间的距离,即基线(Baseline)。
-
-
图像校正 (Image Rectification):
实际包括畸变校正和极线校正,这里只说极线校正过程,数学原理见:https://blog.csdn.net/A1008612121/article/details/150210884?spm=1001.2014.3001.5501
利用标定好的内外参数,通过数学变换将原始的左右图像进行“拉直”处理。校正后的图像有以下关键特性:1)两幅图像的成像平面完全共面。2)两幅图像的水平线完全平行。3)这使得同一个三维点在左图中的投影,必然与它在右图中的投影位于同一条水平线上。
-
对应点搜索 (Correspondence Search / Stereo Matching):
对于左图中的每一个像素,我们需要在右图的同一条水平线上找到与之匹配的同名点。图像校正将原本需要在整个2D图像上进行的搜索,简化为在一维的水平线上进行搜索,极大地降低了计算复杂度。这个过程通常通过比较像素点周围小窗口(Patch)的颜色、纹理相似度来完成。
-
深度计算 (Depth Calculation):
一旦找到了对应点,我们就得到了该像素的视差值
d(左右图像x坐标之差)。根据简单的三角测量公式,可以计算出该点的深度Z:
其中 f 是相机焦距,B 是基线长度。
1.3 优点
-
计算速度快:由于有强大的极线约束(校正后为水平线约束),匹配搜索空间小,算法相对简单,适合实时应用。
-
结构简单:通常是固定的双相机设备,易于集成。
-
无需预处理:不需要像MVS那样依赖SfM等复杂的前置步骤来估计相机位姿。
1.4 缺点
-
对遮挡敏感:某个物体如果只在一个相机中可见(被遮挡),则无法计算其深度。
-
对纹理依赖强:在缺少纹理的区域(如白墙、光滑表面),像素块的相似度区分不明显,很难进行准确匹配。
-
固定基线的局限:基线长度决定了有效深度范围。基线太短,对远处物体不敏感;基线太长,近处物体的视差过大,可能在另一幅图像中找不到对应点。
-
视场有限:只能重建两个相机共同视野内的场景。
2. 多视图立体视觉 (Multi-View Stereo, MVS)
多视角立体(MVS)是双目视觉的泛化和扩展,它不局限于两个视角,是利用一系列无序图像重建一个完整、精细的三维模型。其基本原理可包括:三角测量(Triangulation)和光度一致性(Photometric Consistency)。
2.1 核心思想
从一系列任意位置、任意数量的无序图像重建一个完整、精细的三维模型
光度一致性 (Photometric Consistency):其核心假设是,如果一个三维空间点的坐标是正确的,那么将这个三维点分别投影到所有能看到它的相机视图中时,所得到的像素颜色、纹理应该是高度相似或“一致”的。MVS算法通过系统性地在空间中搜索,来找到满足这种光度一致性的所有点的集合。
2.2 工作原理与流程
MVS的流程通常更复杂,且依赖于前序步骤:
第零步:准备工作 (SfM)
在运行MVS之前,我们必须知道每一张照片的精确拍摄位置、朝向(相机外参)以及相机自身的参数(如焦距,即内参)。这些信息通常由运动恢复结构(Structure from Motion, SfM)来提供。SfM的工作:输入一大堆无序的照片,通过自动寻找和匹配图像间的特征点,反向推算出每个相机的位姿,并同时生成一个稀疏的3D点云(场景的大致骨架)。
第一步:选择参考视图和源视图
算法会选取其中一张图像作为参考图像(Reference Image),并将其周围的其他几张图像作为源图像(Source Images),组成一个处理单元。算法将为这个参考图像生成一个深度的局部估计,然后遍历所有图像作为参考图像,最后将结果拼接起来。
第二步:深度估计(最核心的步骤)
这是MVS技术的核心。算法会为参考图像中的每一个像素点,计算出它的深度(即该点到相机的距离)。
-
提出深度假设:对于参考图像中的某个像素P,算法会提出一系列的深度假设。例如,“假设P点的深度是d1米”,“或者d2米”,“或者d3米”……
-
验证假设(光度一致性检验):如何判断哪个假设是正确的?这里就要用到**光度一致性(Photometric Consistency)**原理。
-
具体操作是:根据一个深度假设,可以计算出像素P在三维空间中的坐标。然后,将这个三维坐标点重新投影到各个源图像中,找到其对应的像素位置。接着,比较参考图像中P点周围的一个小区域(称为“Patch”)与源图像中对应点周围的Patch。
-
如果这些Patch的颜色、纹理非常相似,说明光度一致性高,这个深度假设正确的可能性就大。反之,如果差异很大,说明这个假设很可能是错的。这个不相似的程度,我们称之为匹配代价(Matching Cost)。
-
-
构建代价体(Cost Volume):算法会对每一个像素的所有深度假设,都计算一遍匹配代价。最终会形成一个三维的数据立方体,即代价体。它的三个维度分别是图像的宽、高和假设的深度,存储着每个像素在每个可能深度上的匹配代价。
-
确定深度:对代价体进行分析,为每个像素点选择那个使其匹配代价最小(即光度一致性最高)的深度值,作为该像素的最终深度。这个过程完成后,我们就得到了一张深度图(Depth Map)。深度图是一张灰度图,其中每个像素的灰度值代表了其深度信息。
第三步:深度图融合与模型生成
由于每个参考视图都生成了一张带有噪声和缺失的深度图,算法需要将这些来自不同视角的深度图进行融合。
-
融合:将所有深度图转换到同一个世界坐标系下,形成一个统一的、密集的三维点云(Point Cloud)。在融合过程中,算法会剔除掉那些在多个视图中不一致的错误点(外点),并填充因遮挡而产生的空洞,使得结果更加完整和精确。
-
网格化(Meshing):最后,通过特定的表面重建算法(如泊松表面重建),将密集的三维点云连接成由许多微小三角形面片组成的三维网格模型(Mesh),最终得到我们所见的完整、平滑的3D模型。
3. 数学原理
“根据一个深度假设,可以计算出像素P在三维空间中的坐标”这里的3D坐标是如何计算的?
这是MVS算法中一个关键的几何变换步骤。将一个2D像素点根据深度假设转换为3D坐标,依赖于相机内参(Camera Intrinsics)和针孔相机模型(Pinhole Camera Model)。

将一个2D像素点根据深度假设转换为3D坐标的计算过程可以分为两步,其核心是利用相似三角形原理。
第1步:从“像素坐标系”转换到“归一化图像平面”
首先,将以像素为单位的坐标 (u, v) 转换到一个与物理尺寸相关的坐标系。我们使用一个虚拟的、位于相机前方z=1处的平面,称为归一化图像平面(Normalized Image Plane)。
这一步是为了消除相机焦距和主点偏移带来的影响。
计算公式如下:
现在,我们得到了像素P在归一化图像平面上的坐标 。这个点可以表示为三维坐标 ,它定义了一个从相机光心(原点)出发,穿过该点的射线(Ray)。
第2步:沿射线延伸到指定深度
现在我们有了一条方向确定的射线,以及一个深度(距离)d。真实世界中的3D点,正是在这条射线上,距离相机光心为 d 的那个点。
由于 这个点的Z坐标正好是1,我们可以利用相似三角形原理,直接将这个归一化坐标乘以深度
d,来得到最终的3D坐标。
计算公式如下:
最终得到的就是像素P在**相机坐标系(Camera Coordinate System)**中的三维坐标。这个坐标系以相机光心为原点(0,0,0),Z轴沿镜头方向朝前。
4. MVS 的主要方法流派
-
传统方法:以
PMVS、COLMAP为代表,主要基于上述的“PatchMatch”思想,在精度和细节上表现优异,但计算量较大。 -
深度学习方法:以
MVSNet及其一系列改进模型为代表。它们使用卷积神经网络(CNN)来提取更鲁棒的图像特征和优化代价体的处理过程。这使得它们在处理弱纹理区域(如白墙)、反光表面等传统方法难以处理的场景时,表现出更强的性能,并且速度更快,是当前研究的主流方向。
5. 对比

参考
「1」https://zhuanlan.zhihu.com/p/602861595
「2」相机模型、参数和各个坐标系(世界坐标系、相机坐标系、归一化坐标系、图像坐标系、像素坐标系之间变换)_经验分享_ScarLeTzzz-GitCode 开源社区
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)