精华内容
下载资源
问答
  • 针对基于棱镜的单目立体视觉系统,提出了一种分析和选择系统参数的最优化方法。该方法可以使系统拍摄到的图像以最佳的位置满足立体视觉算法处理的需要。从系统的建立和参数的选择角度分析了单目立体视觉系统的组成。...
  • 基于双焦单目立体视觉的多层次特征检测算法
  • 常见的视差计算方法研究都是面向双目立体视觉,而双焦单目立体视觉的视差分布不同于双目视差,具有沿极线辐射的特点。针对双焦单目立体视觉的特点,提出了一种单目立体视差的计算方法。对于计算到的初步视差图,把视...
  • 新的单目立体视觉的视差图的获得方法
  • #资源达人分享计划#
  • 利用Opencv3.4实现单目视觉的三维重建,项目需要搭建相关环境并附有测试图例
  • 摘要:立体视觉是计算机视觉的一个重要分支,目前已经广泛应用于工业,...为了适应这样的发展需求,研究人员利用棱镜的分光作用,提出了基于棱镜的单目立体视觉系统.然而,棱镜的引入虽然降低了系统的搭建成本,减小了系...

    摘要:

    立体视觉是计算机视觉的一个重要分支,目前已经广泛应用于工业,航天,医疗等众多领域.随着立体视觉技术的发展和应用方向的不断拓展,人们对立体视觉系统经济化,微型化,轻量化的使用要求也在不断提升,多目立体视觉系统的缺点愈加凸显,在很多领域的应用受到不同程度的限制.为了适应这样的发展需求,研究人员利用棱镜的分光作用,提出了基于棱镜的单目立体视觉系统.然而,棱镜的引入虽然降低了系统的搭建成本,减小了系统体积及质量,却也带来了系统采集图像的畸变问题. 为了解决上述单目立体视觉系统的图像畸变问题,本文提出了基于极线约束的单目立体视觉系统自由曲面棱镜设计.根据平行光轴双目立体视觉系统的极线几何原理,利用自由曲面的丰富自由度的光学特性,通过改变双视角棱镜的表面面型,改变光线经过棱镜两次折射后的光路走向,设计满足要求的自由曲面棱镜,消除系统的非线性畸变,从根本上解决系统的图像畸变问题.主要的工作内容如下: 第一,从单目立体视觉成像系统中的平面双视角棱镜的光线折射产生畸变的原理出发,提出在单目立体视觉系统中使用自由曲面棱镜替代平面双视角棱镜的设计思想. 第二,设计出合适的自由曲面棱镜.首先选择一个初始的平面双是视角棱镜,根据几何光学分析光线经过棱镜折射的过程及图像畸变原理,结合平行光轴双目立体视觉系统的极线几何关系,推导出自由曲面棱镜的偏微分方程组. 第三,通过Matlab编程求解曲面上的离散点坐标,再对求出的离散点坐标进行等距离抽样,然后利用OriginLab数据绘图软件将抽样得到的离散点拟合成为光滑的自由曲面棱镜曲面面型,并进行拟合误差分析. 拟合实验结果表明,该自由曲面棱镜左侧底面的拟合选择ploy2D拟合方法最为合适,拟合精度最高,而在左侧侧面拟合时,Extreme2D和Parabola2D两种方法的拟合效果相当,拟合误差相差不大,都可以采用,但Extreme2D方法的拟合误差稍小一些,拟合精度更高一些.本文从理论的角度分析了通过设计自由曲面棱镜消除基于棱镜的单目立体视觉系统的图像畸变问题,得到无畸变的单目立体视觉系统的可行性.

    展开

    展开全文
  • 单目视觉成像模型以及双目立体视觉的三维点计算一、单目视觉成像模型1. 世界坐标系→相机坐标系:2. 相机坐标系→像平面坐标系3. 像平面坐标系→像素坐标系二、双目立体视觉的三维点计算 一、单目视觉成像模型 ...

    一、单目视觉成像模型

    单目视觉成像系统示意图
    在整个单目视觉成像系统中,涉及到的坐标系有(均为左手系):世界坐标系(Xw,Yw,Zw),相机坐标系(Xc,Yc,Zc),像平面坐标系(X,Y),像素坐标(u,v)。像素坐标为离散的整数坐标。

    1. 世界坐标系→相机坐标系:

    在这里插入图片描述
    其中,R为旋转变换矩阵,t为平移向量。

    2. 相机坐标系→像平面坐标系

    实际物体在相机坐标系中的坐标位置为P(Xc,Yc,Zc)。经过相机成像原理,即透镜成像原理,得到的像平面坐标为P`(X,Y)

    在这里插入图片描述

    3. 像平面坐标系→像素坐标系

    像素单元的几何特征尺寸分别为α、β,像素坐标系的坐标原点在像平面坐标系中的坐标为(Cx,Cy),则
    在这里插入图片描述

    像平面-像素平面示意图
    在这里插入图片描述
    综上所述,
    在这里插入图片描述

    二、双目立体视觉的三维点计算

    事先声明,双目相机光轴平行,两个相机连线垂直光轴,两个相机的相机坐标系X轴取在两个相机连线所在直线上。世界坐标系取在两个相机连线的中点,其方位与相机方位相同,各坐标系仍取为左手系。
    在这里插入图片描述

    在世界坐标系中,物体的坐标为(Xw,Yw,Zw);物体在左侧相机的像平面中的成像位置为(Xl,Yl),在右侧相机的像平面中的成像位置为(Xr,Yr);物体在左侧相机坐标系中的位置为(XL,YL,ZL),在右侧相机中的位置为(XR,YR,ZR)。

    根据单目成像原理有:

    在这里插入图片描述

    其中,根据之前的定义限制,ZL=ZR。

    定义相机间距

    在这里插入图片描述
    左右相机成像视差为
    在这里插入图片描述

    则,
    在这里插入图片描述

    因此,

    在这里插入图片描述

    据此,代入像平面到相机坐标系的转换公式中,得到物体相对左目的位置坐标为
    在这里插入图片描述

    转化到世界坐标系中为:
    在这里插入图片描述

    展开全文
  • 基于单目视觉的三维重建算法综述

    万次阅读 2019-03-09 17:40:16
    三维计算机视觉在计算机视觉是偏基础的方向,随着2010年阿凡达在全球热映以来,三维计算机视觉的应用从传统工业领域逐渐走向生活、娱乐、服务等,比如AR/VR,SLAM,自动驾驶等都离不开三维视觉的技术。 三维重建...

    三维计算机视觉在计算机视觉是偏基础的方向,随着2010年阿凡达在全球热映以来,三维计算机视觉的应用从传统工业领域逐渐走向生活、娱乐、服务等,比如AR/VR,SLAM,自动驾驶等都离不开三维视觉的技术。

    三维重建包含三个方面,基于SFM的运动恢复结构,基于Deep learning的深度估计和结构重建,以及基于RGB-D深度摄像头的三维重建。

                                    图 1基于图像的三维重建算法

    SfM(Structure From Motion),主要基于多视觉几何原理,用于从运动中实现3D重建,也就是从无时间序列的2D图像中推算三维信息,是计算机视觉学科的重要分支。广泛应用于AR/VR,自动驾驶等领域。虽然SFM主要基于多视觉几何原理,随着CNN的在二维图像的积累,很多基于CNN的2D深度估计取得一定效果,用CNN探索三维重建也是不断深入的课题。

    深度学习方法呈现上升趋势,但是传统基于多视几何方法热情不减,实际应用以多视几何为主,深度学习的方法离实用还有一定的距离。

    本综述主要介绍基于单目monocular的三维重建方法,主要分为基于SfM三维重建和基于Deep learning的三维重建方法,另外由于多视觉几何涉及大量的矩阵、线性代数和李群等数学概念,本综述不做进一步研究,详细可参考经典多视觉几何MVG。

    图 2基于图像的三维重建基本流程

    1、SfM 与三维重建

    从二维图像中恢复三维场景结构是计算机视觉的基本任务,广泛应用于3D导航、3D打印、虚拟游戏等。

    Structure from Motion(SfM)是一个估计相机参数及三维点位置的问题。一个基本的SfM pipeline可以描述为:对每张2维图片检测特征点(feature point),对每对图片中的特征点进行匹配,只保留满足几何约束的匹配,最后执行一个迭代式的、鲁棒的SfM方法来恢复摄像机的内参(intrinsic parameter)和外参(extrinsic parameter)。并由三角化得到三维点坐标,然后使用Bundle Adjustment进行优化。

    图 3 SfM典型框架图

    根据SfM过程中图像添加顺序的拓扑结构(图 4),SfM方法可以分为增量式(incremental/sequential SfM),全局式(global SfM),混合式(hybrid SfM),层次式(hierarchica SfM)。另外有基于语义的SfM(Semantic SfM)和基于Deep learning的SfM。

    图 4增量式、全局式、混合式和层次式SFM拓扑结构区别

    1.1    增量式 SfM

    以[1]的方法位置,增量式SfM首先使用SIFT特征检测器提取特征点并计算特征点对应的描述子(descriptor),然后使用ANN(approximate nearest neighbor)方法进行匹配,低于某个匹配数阈值([1]中的阈值为20)的匹配对将会被移除。对于保留下来的匹配对,使用RANSAC(RANdom Sample Consensus)和八点法来估计基本矩阵(fundamental matrix),在估计基本矩阵时被判定为外点(outlier)的匹配被看作是错误的匹配而被移除。对于满足以上几何约束的匹配对,将被合并为tracks。然后通过incremental方式的SfM方法来恢复场景结构。首先需要选择一对好的初始匹配对,一对好的初始匹配对应该满足:

    (1)足够多的匹配点;

    (2)宽基线。之后增量式地增加摄像机,估计摄像机的内外参并由三角化得到三维点坐标,然后使用Bundle Adjustment进行优化。

    增量式SfM从无序图像集合计算三维重建的常用方法。在[1]的基础上,增量式SfM可分为如图 3所示几个阶段:图像特征提取、特征匹配、几何约束、重建初始化、图像注册、三角化、outlier过滤、Bundle adjustment等步骤。

    图 5 增量式SfM框架图

    实现增量式SfM框架的包含COLMAP、openMVG、Theia等,如图 6所示典型增量式SfM框架在增量式SfM算法各个阶段的细节对比。

    图 6 增量式SfM实现框架对比

    增量式SfM优势:系统对于特征匹配以及外极几何关系的外点比较鲁棒,重讲场景精度高;标定过程中通过RANSAC不断过滤外点;捆绑调整不断地优化场景结构。

    增量式SfM缺点:对初始图像对选择及摄像机的添加顺序敏感;场景漂移,大场景重建时的累计误差。效率不足,反复的捆绑调整需要大量的计算时间。

    1.2        全局式SfM

    全局式:估计所有摄像机的旋转矩阵和位置并三角化初始场景点。

    优势:将误差均匀分布在外极几何图上,没有累计误差。不需要考虑初始图像和图像添加顺序的问题。仅执行一次捆绑调整,重建效率高。

    缺点:鲁棒性不足,旋转矩阵求解时L1范数对外点相对鲁棒,而摄像机位置求解时相对平移关系对匹配外点比较敏感。场景完整性,过滤外极几何边,可能丢失部分图像。

    1.3    混合式SfM

    混合式SfM[5]在一定程度上综合了incremental SfM和global SfM各自的优点。HSfM的整个pipeline可以概括为全局估计摄像机旋转矩阵,增量估计摄像机位置,三角化初始场景点,如图 7所示。

    图 7 全局式SfM框架图

    用全局的方式提出一种基于社区的旋转误差平均法,该方法既考虑了对极几何的精度又考虑了成对几何的精度。基于已经估计的相机的绝对旋转姿态,用一种增量的方式估计相机光心位置。对每个添加的相机,其旋转和内参保持不变,同时使用改进的BA细化光心和场景结构。

    层次式SfM同样借鉴incremental SfM和global SfM各自优势,但是基于分段式的incremental SfM和全局式SfM,没有像混合式SfM分成两个阶段进行。

    SfM中我们用来做重建的点是由特征匹配提供的,所以SfM获得特征点的方式决定了它不可能直接生成密集点云。而MVS则几乎对照片中的每个像素点都进行匹配,几乎重建每一个像素点的三维坐标,这样得到的点的密集程度可以较接近图像为我们展示出的清晰度。

    1.4    三维场景重建实例

    初学者容易陷入MVG等大部头经典书籍理解基于多视觉几何的公式,从一个实际例子理解实现更容易建立信心。本节简单介绍利用openMVG和PMVS实现三维场景的点云重建。

    openMVG (Open Multiple View Geometry):开源多视角立体几何库,这是一个cv界处理多视角立体几何的著名开源库,信奉“简单,可维护”,提供了一套强大的接口,每个模块都被测试过,尽力提供一致可靠的体验。

    openMVG实现以下典型应用:

    • 解决多视角立体几何的精准匹配问题;

    • 提供一系列SfM需要用到的特征提取和匹配方法;

    • 完整的SfM工具链(校正,参估,重建,表面处理等);

    • openMVG尽力提供可读性性强的代码,方便开发者二次开发,核心功能是尽量精简的,所以你可能需要其它库来完善你的系统。

    github地址:

    https://github.com/openMVG/openMVG


    使用文档:

    http://openmvg.readthedocs.io/en/latest/

    从git克隆openMVG到本地(支持windows vs2015/linux/mac环境),安装必要的依赖库(缺少依赖库时cmake或make会报错,也可根据提示安装)。

    $ git clone --recursive https://github.com/openMVG/openMVG.git

    $ mkdir openMVG_Build

    $ cd openMVG_Build

    $ cmake -DCMAKE_BUILD_TYPE=RELEASE -DOpenMVG_BUILD_TESTS=ON -DOpenMVG_BUILD_EXAMPLES=ON . ../openMVG/src/

    $ make

    $ make test

    CMVS-PMVS(a modified version):将运动结构(SfM)软件的输出作为输入,然后将输入图像分解成一组可管理大小的图像簇。 MVS软件可以用来独立和并行地处理每个簇,其中来自所有簇的重建不错过任何细节。

    Github地址:https://github.com/pmoulon/CMVS-PMVS

    CMVS-PMVS编译也比较简单,切换到克隆源码目录,

    $ mkdir build && cd build

    $ cmake ..

    $ make

    既可完成编译,build/main文件夹中生成cmvs、genOption、pmvs2三个可执行文件。

    首先cd到openMVG_Build/software/SfM/文件夹中,在终端运行$ python tutorial_demo.py

    它是封装了SfM pipeline的脚本,它先克隆文件夹ImageDataset_SceauxCastle到SfM文件夹中,作为图像输入
    再生成一个tutorial_out文件夹保存输出结果
    由于openMVG生成的是稀疏的点云,只含有它在图像中提取到的特征点的点云映射,所以需要用PMVS处理图像和位置的关系来得到稠密的点云。

    SfM_Data是一个数据容器,储存在sfm_data.bin中,它包括(大概也就是二进制编码的结构):

    • Views - 图像

    • Intrinsics –      相机内参数

    • Poses – 相机外参数

    • Landmarks – 三维点和它们的二维图像对应点

    把SfM_Data转化为适用于PMVS输入格式的文件

    $ openMVG_main_openMVG2PMVS -i tutorial_out/reconstruction_global/sfm_data.bin -o tutorial_out/reconstruction_global

    在reconstruction_global文件夹中会生成PMVS文件夹,包含 models, txt, visualize 三个文件夹,models为空,txt包含11个对应图像的txt文档,每个里面都是一个3x4的矩阵,大概是相机位姿,visualize包含11张图像,不确定是原图像还是校正过的图像。切换到tutorial_out/reconstruction_global目录,

    $ pmvs2 ./PMVS/ pmvs_options.txt

    PMVS/models文件夹中生成一个大小为15.2MB的pmvs_options.txt.ply点云文件,用meshlab打开即可看到重建出来的彩色稠密点云,如所示。

    图 8 三维重建效果图

    2、Deep learning与三维重建

    常规的3D shape representation主要有四种: 深度图(depth), 点云(point cloud), 体素(voxel), 网格(mesh)。

    2.1    深度估计

    假设我们有一张2d图片I,我们需要一个函数F来求取每个像素其相对应的深度 d,这个过程可以写为: d=F(I)。

    图 9 单幅无法图像估计深度

    但是众所周知,F 是非常复杂的函数,因为从单张图像中获取具体的深度相当于从二维图像推测出三维空间,即使人类的双眼也无法获取深度信息,如图 9所示,人类无法判断所谓的巨人手掌上是模型还是摆拍(如果前方巨人换成孙大圣到是有可能,不过已经变成玄幻电影)。所以传统的深度估计在单目深度估计上效果并不好。人们更着重于研究多视觉几何,即从多张图片中得到深度信息。因为两张图片就可以根据视角的变化得到图片之间disparity的变化,从而达到求取深度的目的。

    随着2012年CNN在二维图像取得巨大成就,涌现很多基于CNN的depth map:因为depth map本身是一个监督学习,真值可以通过激光/结构光等深度传感器获取,而分辨率和输入图像相同,本质是一个二维图像像素分类的问题难题。但是depth image还不足以解释重构原始input的信息,它只能作为3D scene understanding的一个辅助信息。所以开始研究利用一组二维图来重构3D点云图或voxel以及mesh图。

    使用深度学习做深度估计最经典的两篇文章应该属于Eigen组[6][7]的两篇工作:

    在NIPS2014[6]的文章中, 如所示,作者提出了一个Multi-Scale的深度神经网络用来解决深度预测的问题。Coarse 网络是一个经典的AlexNet(NIPS 212)结构,最后一层从1000个分类器换做了一个coarse的depth map。在Fine网络中,作者先采用大步长的卷积核将图片的大小变小之后的卷积核并没有再去降低特征的大小,而是采用了步长为1,大小为5的卷积核去进行特征提取并结合之前Coarse网络的结果得到最终预测的结果。在训练的时候,此网络先训练Coarse网络然后再固定Coarse网络的训练参数再去训练Fine网络。

    在此基础上,FCRN尝试了更深层次的网络带来的好处:使用一个pretrained的ResNet50结构,采用经典的卷积和反卷积架构,效率提升一倍。

    图 10 Multi-Scale depth map预测

    随着深度学习的发展,涌现很多基于视频[9]的depth map预测。

    2.2    3D shape预测

    但是depth image还不足以解释重构原始input的信息,它只能作为3D scene understanding的一个辅助信息。

    基于deep learning的3D点云和mesh重构是较难以计算的,因为深度学习一个物体完整的架构需要大量数据的支持。然后传统的3D模型是由vertices和mesh组成的,因此不一样的data size造成了training的困难。所以后续大家都用voxelization(Voxel)的方法把所有CAD model转成binary voxel模式(有值为1, 空缺为0)这样保证了每个模型都是相同的大小。

    [10]采用深度学习从2D图像到其对应的3D voxel模型的映射:首先利用一个标准的CNN结构对原始input image进行编码,然后用Deconv进行解码,最后用3D LSTM的每个单元重构output voxel。3D voxel是三维的,它的resolution成指数增长,所以它的计算相对复杂,目前的工作主要采用32*32*3以下的分辨率以防止过多的占用内存。但是也使得最终重构的3D model分辨率并不高。所以科研道路道阻且长。

    mesh和point cloud是不规则的几何数据形式,因此直接使用CNN是不可行的。但是可以考虑将3D mesh data转化成graphs形式,再对3D曲面上的2D参数进行卷积。具体有[11]。

    基于point cloud的方法,看Hao Su的CVPR2017论文 PointNet[12]。

    基于mesh和point cloud的方法总的来讲数学较多,而且重建细节恢复上效果欠佳。不过可以考虑voxel来提高重构精度。

    3、三维视觉发展趋势

    趋势1:多视觉几何与Deep learning方法融合

    在深度学习一统天下的计算机视觉领域,三维视觉方向主导算法仍然是传统的多视角几何方法,但是深度学习方法也是一种重要而有效的辅助,比如在解决单目初始化纯旋转问题上。

    趋势2:多传感器融合

    目前基于普通摄像头的视觉传感器仍然是主导,但是工业界对算法的鲁棒性要求比较高,纯视觉方法很难保证在复杂的环境下保持鲁棒的效果。所以,用廉价的激光传感器、IMU(惯性测量单元)等与视觉传感器进行融合,是一种比较靠谱的方法。比如在移动端目前基于摄像头+IMU方法越来越多。

    趋势3:算法与硬件的结合

    比如深度相机厂商在尽力把一些视觉算法嵌入到相机前端,提升相机的本地处理能力。2018年发表在Robotics & Autonomous Systems 的一篇论文 《Embedding SLAM algorithms: Has it come of age? 》讨论了嵌入式SLAM算法的可能性,并给出了一种在低功耗嵌入式系统上实现SLAM的算法:FastSLAM2.0。

    趋势4:算法与具体应用的结合能够更快的推动算法进步

    三维视觉算法目前比较好的商业应用主要集中在无人驾驶、无人搬运车(Automatic Guided Vehicle,简称AGV)、AR(教育、影音游戏)、机器人等领域。

    4、Discussion 

    个人观点:

    1、尽管SfM在计算机视觉取得显著成果并应用,但是大多数SfM和基于周围环境是静止这一假设,既相机是运动的,但是目标是静止的。当面对移动物体时,整体系统重建效果显著降低。

    2、传统SfM基于目标为刚体的假设。

    3、个人对3D重建算法不是深入,SfM也许没有vSLAM技术热点,但是多视觉几何和SfM是进入三维世界的大门,基础应用永不过时。

    以上仅为个人阅读论文后的理解、总结和思考。观点难免偏差,望读者以怀疑批判态度阅读,欢迎交流指正。

    参考文献 

    [1] Seitz S M, Szeliski R, Snavely N. Photo Tourism:Exploring Photo Collections in 3D[J]. Acm Transactions on Graphics, 2006, 25(3):835-846.

    [2] Agarwal S,Snavely N, Simon I, et al. Building Rome in a day[J]. Communications of the Acm, 2011, 54(10):105-112.

    [3] Toldo R,Gherardi R, Farenzena M, et al. Hierarchical structure-and-motion recovery from
    uncalibrated images[J]. Computer Vision & Image Understanding, 2015,140(C):127-143.

    [4] Chen Y,Chan A B, Lin Z, et al. Efficient tree-structured SfM by RANSAC generalized Procrustes analysis[J]. Computer Vision & Image Understanding, 2017,157(C):179-189.

    [5] H Cui , X Gao,S Shen, Z Hu. HSfM: Hybrid Structure-from-Motion[C]// Computer Vision and Pattern Recognition. IEEE, 2017.

    [6] D. Eigen, C. Puhrsch, and R. Fergus. Depth map prediction from a single image using a multi-scale deep network. NIPS,2014.

    [7] D. Eigen,R. Fergus.Predicting Depth, Surface Normals and Semantic Labels with a Common Multi-Scale Convolutional Architecture.ICCV2015

    [8]  Iro Laina , Christian Rupprecht .Deeper Depth Prediction with Fully Convolutional Residual Networks.2016

    [9] V.Sudheendra, Susanna Ricco .SfM-Net: Learning of Structure and Motion from Video.arxiv2017

    [10] Christopher B. Choy, Danfei Xu, JunYoung Gwak.3D-R2N2: A Unified Approach for Single and Multi-view 3D Object Reconstruction.ECCV2016.

    [11] Jonathan Masciy∗ Davide Boscainiy∗ Michael M. Bronstein.Geodesic convolutional neural networks on Riemannian manifolds.AAAI2018.

    [12] Charles R. Qi, Hao Su, Kaichun Mo, Leonidas J. Guibas.PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation.CVPR2017.

    展开全文
  • 双目立体视觉概述

    千次阅读 2020-02-12 18:25:46
    双目立体视觉深度相机的工作流程 双目立体视觉深度相机详细工作原理 理想双目相机成像模型 极线约束 图像矫正技术 基于滑动窗口的图像匹配 基于能量优化的图像匹配 双目立体视觉深度相机的优缺点 ----------...

    导读

    为什么非得用双目相机才能得到深度?

    双目立体视觉深度相机的工作流程

    双目立体视觉深度相机详细工作原理

    理想双目相机成像模型

    极线约束

    图像矫正技术

    基于滑动窗口的图像匹配

    基于能量优化的图像匹配

    双目立体视觉深度相机的优缺点

    ---------------------------------------------------

    基于双目立体视觉的深度相机类似人类的双眼,和基于TOF、结构光原理的深度相机不同,它不对外主动投射光源,完全依靠拍摄的两张图片(彩色RGB或者灰度图)来计算深度,因此有时候也被称为被动双目深度相机。比较知名的产品有STEROLABS 推出的 ZED 2K Stereo Camera和Point Grey 公司推出的 BumbleBee。

    ZED 2K Stereo Camera

    为什么非得用双目相机才能得到深度?

    说到这里,有些读者会问啦:为什么非得用双目相机才能得到深度?我闭上一只眼只用一只眼来观察,也能知道哪个物体离我近哪个离我远啊!是不是说明单目相机也可以获得深度?

    在此解答一下:首先,确实人通过一只眼也可以获得一定的深度信息,不过这背后其实有一些容易忽略的因素在起作用:一是因为人本身对所处的世界是非常了解的(先验知识),因而对日常物品的大小是有一个基本预判的(从小到大多年的视觉训练),根据近大远小的常识确实可以推断出图像中什么离我们远什么离我们近;二是人在单眼观察物体的时候其实人眼是晃动的,相当于一个移动的单目相机,这类似于运动恢复结构(Structure from Motion, SfM)的原理,移动的单目相机通过比较多帧差异确实可以得到深度信息。

    但是实际上,相机毕竟不是人眼,它只会傻傻的按照人的操作拍照,不会学习和思考。下图从物理原理上展示了为什么单目相机不能测量深度值而双目可以的原因。我们看到红色线条上三个不同远近的黑色的点在下方相机上投影在同一个位置,因此单目相机无法分辨成的像到底是远的那个点还是近的那个点,但是它们在上方相机的投影却位于三个不同位置,因此通过两个相机的观察可以确定到底是哪一个点。

    双目相机确定深度示意图

    双目立体视觉深度相机简化流程

    下面简单的总结一下双目立体视觉深度相机的深度测量过程,如下:

    1、首先需要对双目相机进行标定,得到两个相机的内外参数、单应矩阵。

    2、根据标定结果对原始图像校正,校正后的两张图像位于同一平面且互相平行。

    3、对校正后的两张图像进行像素点匹配。

    4、根据匹配结果计算每个像素的深度,从而获得深度图。

    欲知详情,且看下面详细介绍。

    双目立体视觉深度相机详细原理

    1

    理想双目相机成像模型

    首先我们从理想的情况开始分析:假设左右两个相机位于同一平面(光轴平行),且相机参数(如焦距f)一致。那么深度值的推导原理和公式如下。公式只涉及到初中学的三角形相似知识,不难看懂。

    理想情况下双目立体视觉相机深度值计算原理

    根据上述推导,空间点P离相机的距离(深度)z=f*b/d,可以发现如果要计算深度z,必须要知道:

    1、相机焦距f,左右相机基线b。这些参数可以通过先验信息或者相机标定得到。

    2、视差d。需要知道左相机的每个像素点(xl, yl)和右相机中对应点(xr, yr)的对应关系。这是双目视觉的核心问题。

    2

    极线约束

    那么问题来了,对于左图中的一个像素点,如何确定该点在右图中的位置?是不是需要我们在整个图像中地毯式搜索一个个匹配?

    答案是:不需要。因为有极线约束(名字听着很吓人)。极线约束对于求解图像对中像素点的对应关系非常重要。

    那什么是极线呢?如下图所示。C1,C2是两个相机,P是空间中的一个点,P和两个相机中心点C1、C2形成了三维空间中的一个平面PC1C2,称为极平面(Epipolar plane)。极平面和两幅图像相交于两条直线,这两条直线称为极线(Epipolar line)。P在相机C1中的成像点是P1,在相机C2中的成像点是P2,但是P的位置事先是未知的。

    我们的目标是:对于左图的P1点,寻找它在右图中的对应点P2,这样就能确定P点的空间位置,也就是我们想要的空间物体和相机的距离(深度)。

    所谓极线约束(Epipolar Constraint)就是指当同一个空间点在两幅图像上分别成像时,已知左图投影点p1,那么对应右图投影点p2一定在相对于p1的极线上,这样可以极大的缩小匹配范围。

    根据极线约束的定义,我们可以在下图中直观的看到P2一定在对极线上,所以我们只需要沿着极线搜索一定可以找到和P1的对应点P2。

    极线约束示意图

    细心的朋友会发现上述过程考虑的情况(两相机共面且光轴平行,参数相同)非常理想,相机C1,C2如果不是在同一直线上怎么办?

    事实上,这种情况非常常见,因为有些场景下两个相机需要独立固定,很难保证光心C1,C2完全水平,即使是固定在同一个基板上也会因为装配的原因导致光心不完全水平。如下图所示。我们看到两个相机的极线不仅不平行,还不共面,之前的理想模型那一套推导结果用不了了,这可咋办呢?

    非理想情况下的极线

    不急,有办法。我们先来看看这种情况下拍摄的两张左右图片吧,如下所示。左图中三个十字标志的点,在右图中对应的极线是右图中的三条白色直线,也就是对应的搜索区域。我们看到这三条直线并不是水平的,如果进行逐点搜索效率非常低。

    左图中三个点(十字标志)在右图中对应的极线是右图中的三条白色直线

    3

    图像矫正技术

    怎么办呢?把不理想情况转化为理想情况不就OK了!这就是图像矫正(Image Rectification)技术。

    图像矫正是通过分别对两张图片用单应(homography)矩阵变换(可以通过标定获得)得到的,的目的就是把两个不同方向的图像平面(下图中灰色平面)重新投影到同一个平面且光轴互相平行(下图中黄色平面),这样就可以用前面理想情况下的模型了,两个相机的极线也变成水平的了。

    图像校正示意图

    经过图像矫正后,左图中的像素点只需要沿着水平的极线方向搜索对应点就可以了(开心)。从下图中我们可以看到三个点对应的视差(红色双箭头线段)是不同的,越远的物体视差越小,越近的物体视差越大,这和我们的常识是一致的。

    图像校正后的结果。红色双箭头线段是对应点的视差

    上面讲到的对于左图的一个点,沿着它在右图中水平极线方向寻找和它最匹配的像素点,说起来简单,实际操作起来却不容易。这是因为上述都是理想情况下的假设。实际进行像素点匹配的时候会发现几个问题:

    1、实际上要保证两个相机完全共面且参数一致是非常困难的,而且计算过程中也会产生误差累积,因此对于左图的一个点,其在右图的对应点不一定恰好在极线上。但是应该是在极线附近,所以搜索范围需要适当放宽。

    2、单个像素点进行比较鲁棒性很差,很容易受到光照变化和视角不同的影响。

    4

    基于滑动窗口的图像匹配

    上述问题的解决方法:使用滑动窗口来进行匹配。如下图所示。对于左图中的一个像素点(左图中红色方框中心),在右图中从左到右用一个同尺寸滑动窗口内的像素和它计算相似程度,相似度的度量有很多种方法,比如 误差平方和法(Sum of Squared Differences,简称SSD),左右图中两个窗口越相似,SSD越小。下图中下方的SSD曲线显示了计算结果,SSD值最小的位置对应的像素点就是最佳的匹配结果。

    滑动窗口匹配原理示意图

    具体操作中还有很多实际问题,比如滑动窗口尺寸。滑动窗口的大小选取还是很有讲究的。下图显示了不同尺寸的滑动窗口对深度图计算结果的影响。从图中我们也不难发现:

    小尺寸的窗口:精度更高、细节更丰富;但是对噪声特别敏感

    大尺寸的窗口:精度不高、细节不够;但是对噪声比较鲁棒

    不同尺寸的滑动窗口对深度图计算结果的影响

    虽然基于滑动窗口的匹配方法可以计算得到深度图,但是这种方法匹配效果并不好,而且由于要逐点进行滑动窗口匹配,计算效率也很低。

    5

    基于能量优化的图像匹配

    目前比较主流的方法都是基于能量优化的方法来实现匹配的。能量优化通常会先定义一个能量函数。比如对于两张图中像素点的匹配问题来说,我们定义的能量函数如下图公式1。我们的目的是:

    1、在左图中所有的像素点和右图中对应的像素点越近似越好,反映在图像里就是灰度值越接近越好,也就是下图公式2的描述。

    2、在 同一张图片里,两个相邻的像素点视差(深度值)也应该相近。也就是下图公式3的描述。

    能量函数

    上述公式1代表的能量函数就是著名的马尔科夫随机场(Markov Random Field)模型。通过对能量函数最小化,我们最后得到了一个最佳的匹配结果。有了左右图的每个像素的匹配结果,根据前面的深度计算公式就可以得到每个像素点的深度值,最终得到一幅深度图。

    双目立体视觉法优缺点

    根据前面的原理介绍,我们总结一下基于双目立体视觉法深度相机的优缺点。

    1

    优点

    1、对相机硬件要求低,成本也低。因为不需要像TOF和结构光那样使用特殊的发射器和接收器,使用普通的消费级RGB相机即可。

    2、室内外都适用。由于直接根据环境光采集图像,所以在室内、室外都能使用。相比之下,TOF和结构光基本只能在室内使用。

    2

    缺点

    1、对环境光照非常敏感。双目立体视觉法依赖环境中的自然光线采集图像,而由于光照角度变化、光照强度变化等环境因素的影响,拍摄的两张图片亮度差别会比较大,这会对匹配算法提出很大的挑战。如下图是在不同光照条件下拍摄的图片:

    不同光照下的图像对比

    另外,在光照较强(会出现过度曝光)和较暗的情况下也会导致算法效果急剧下降。

    2、不适用于单调缺乏纹理的场景。由于双目立体视觉法根据视觉特征进行图像匹配,所以对于缺乏视觉特征的场景(如天空、白墙、沙漠等)会出现匹配困难,导致匹配误差较大甚至匹配失败。

    纹理丰富(左)和纹理缺乏场景(右)

    3、计算复杂度高。该方法是纯视觉的方法,需要逐像素计算匹配;又因为上述多种因素的影响,需要保证匹配结果比较鲁棒,所以算法中会增加大量的错误剔除策略,因此对算法要求较高,想要实现可靠商用难度大,计算量较大。

    4、相机基线限制了测量范围。测量范围和基线(两个摄像头间距)关系很大:基线越大,测量范围越远;基线越小,测量范围越近。所以基线在一定程度上限制了该深度相机的测量范围。

    展开全文
  • 本文介绍了使用单目立体视觉传感器的SLAM系统。 SLAM解决方案可在室内和室外实施。 除了用于测试回路闭合及其相应轨迹变形的回路样本之外,SLAM样本还采用了不同的模式,例如使我们能够测量漂移的直线。 为了验证...
  • 设计并实现了一种基于广角相机和平面镜的单目多视点立体图像摄像系统,给出了硬件装置的设计指标和优化方法;同时,在研究了硬件系统的...该类图像等价于视点不同的多幅图像,可以使用多视点立体视觉算法实现三维测量。
  • 为使机器人同时具备双目立体视觉单目运动视觉的仿人化环境感知能力,克服双目视场狭窄、单目深度感知精度低的缺陷,本文基于人眼结构特点,设计了一个具有4 个旋转自由度的双目仿生眼平台,并分别基于视觉对准策略...
  • OpenCV Using Python——单目视觉三维重建

    万次阅读 多人点赞 2015-03-11 08:40:32
    单目视觉三维重建 1. 单目视觉三维重建简介  单目视觉三维重建是根据单个摄像头的运动模拟双目视觉获得物体在空间中的三维视觉信息。已知单个摄像头在两个不同时间点上同时在空间中两个不同位置的图像等价于已知...
  • 相机模型、相机标定及基于yolov5的单目测距实现

    千次阅读 热门讨论 2021-07-17 21:44:34
    相机模型、相机标定及基于yolov5的单目测距实现1 前言2 相机模型及单目测距原理3 相机参数标定3.1 内参矩阵3.2 内参标定 1 前言 在摄像头成像过程中,物体反射的光线通过摄像头的凸透镜打在成像器件上,形成一张图片...
  • 提出一种基于单目视觉的致密场景重建方法,以实现对环境快速,准确地三维立体化建模。该方法针对自由式手持单目相机,在并行跟踪与地图创建(PTAM)算法框架下准确地实现相机的自定位。在此基础上,选取关键帧处图像...
  • 作者:CV_Community 来源:计算机视觉社区本文还是在传统机器视觉的基础上讨论单目测距,深度学习直接估计深度图不属于这个议题,主要通过mobileye的论文管中窥豹,相信离实际工...
  • 基于深度学习的单目视觉深度估计研究综述

    万次阅读 多人点赞 2019-08-19 10:38:50
    引用自:基于深度学习的单目视觉深度估计研究综述 郭继峰,白成超,郭 爽 1 引言 ​        传统获取高精度的目标深度信息常采用激光雷达实现,但因其价格昂贵,目前多用于技术研发和测试阶段...
  • 视觉SLAM笔记(61) 单目稠密建图

    万次阅读 2019-11-23 09:27:40
    立体视觉、极线搜索与块匹配、高斯分布的深度滤波器
  • 通过四元数小波变换分解立体图像的左右视图,获取不同尺度不同方向的幅值相位信息,并结合人眼视觉特性生成单目图;对左右视图和单目图作亮度去均值对比度归一化(MSCN)处理,获取MSCN系数图,采用广义高斯分布模型拟合...
  • 点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达 本文转自|新机器视觉 机器人视觉系统是指用计算机来实现人的视觉功能,也就是用计算机来实现对客观的三...
  • 提出一种基于光流反馈的单目视觉三维(3D)重建方法,实现对场景快速、准确的3D 立体化建模。由帧间光流场建立更为稳健的同名像点匹配关系,同时运用五点算法估计摄像机的相对位姿,以构建稀疏点云和初始网格。从运动...
  • Opencv4.3中新提供的一种高精度棋盘标定方法,对于精度的提升有很大帮助。本代码中包含了OpenCV3.4和OpenCV4.3两种标定方法,只需要打开相应的注释代码结合博客中的内容,你就可以比较这两种代码的区别了!
  • 【论文速读】AVP-SLAM:自动泊车系统中的语义SLAM 【点云论文速读】StructSLAM:结构化线特征SLAM SLAM和AR综述 常用的3D深度相机 AR设备单目视觉惯导SLAM算法综述与评价 SLAM综述(4)激光与视觉融合SLAM Kimera实时...
  • 单目视觉的运动目标跟踪定位

    万次阅读 2017-04-12 08:10:00
    欢创科技CEO周琨,详细讲解单目定位技术
  • MonoGRNet:一种用于单目三维物体检测和定位的几何推理网络KITTI
  • 单目视觉标定原理

    千次阅读 2017-01-08 12:42:02
    单目视觉标定原理 http://www.cnblogs.com/polly333/p/4994408.html 在计算机视觉中,通过相机标定能够获取一定的参数,其原理是基于三大坐标系之间的转换和摄像机的畸变参数矩阵。在实验中经常用张正友...
  • 多视角立体视觉简介

    2021-07-27 15:07:14
    文章目录摘要简介收集图像摄像机投影模型来自运动中的结构光束法平差多视角立体视觉 摘要 本文介绍了多视图立体视觉的动手视图,重点介绍了实际算法。多视图立体视觉算法能够仅从图像中构建高度详细的三维模型。他们...
  • 单目视觉定位方法研究综述

    万次阅读 2017-04-18 11:10:07
    根据单目视觉定位所用图像帧数不同把定位方法分为基于单帧图像的定位和基于双帧或多帧图像的定位两类。单帧图像定位常利用已知的点特征、直线特征或曲线特征与其在图像上的投影关系进行定位,其中用点特征和直线特征...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,087
精华内容 1,634
关键字:

单目立体视觉