zoukankan      html  css  js  c++  java
  • [二维成像与三维重建]系列(6) 三维重建的简易原理与总体框架

    关键词:基于图像的三维重建 单目视觉 极简原理 总体框架 作者:李二 日期:14/04/2020 - 16/04/2020

    本系列博客从这里开始,进入第二部分,也就是三维重建。
    

    我觉得不能一下就陷入到具体的步骤或者流程中去,讲东西最好先给大家一个总的轮廓以及其核心原理,这样由浅入深,由粗到精,更容易接受与吸收。

    本期博客仅仅介绍三维重建的核心原理,里面涉及的要素或模块,我将在后面的几期中逐个展开。

    话不多说,还是恢复讲故事模式。话说李二在家喜欢上了写博客,天天在阳台上码字,家里人越看他越不顺眼,因为感觉他似乎并没有干什么正经事,于是就有了下面的对话。

    1. 什么是三维重建

    李二的老婆Mme.Zhang问:我说咱天天地也不出去溜达溜达,看你都快废了。前几天看你在朋友圈里面发二维成像与三维重建,费劲巴力的写了这么长时间,想干点啥? 话说什么是三维重建?

    李二觉得难得老婆想了解自己做了点啥事,于是便高兴地说道:简单点说,三维重建≈三维点云获取。如果较起真来,三维重建=三维点云获取+几何结构恢复+场景绘制

    我讲的三维重建指的是基于图像的三维重建,直白点说,就是从一系列图像中恢复三维点云

    严格意义上的三维重建(摘自深蓝学院)
    严格意义上的三维重建(摘自深蓝学院)

    注意:点云构建之后的几何结构恢复(即三维格网化)和场景绘制(即纹理贴图),则不在本系列的scope之内。

    2. 三维重建有什么用

    Mme.Zhang:那三维重建有什么用处?

    李二:太多了。根据重建到的三维物体,可以准确测量它的三维结构

    • 例1. 比如咱们去巴黎的时候,很遗憾的没有参观巴黎圣母院,他 不是被火烧了嘛。这时我们根据以前测量到的三维结构,就可以原汁原味的恢复它火烧之前的面貌。
    • 例2. 再比如,现在虚拟现实、增强现实不是都很火嘛,关键就是把三维建出来。
    • 例3. 还有关于我的近地面植被遥感工作,只有把树和作物的三维建立出来,才能更好地测量他们的一些参数,比如生物量、叶倾角之类的。

    假如我们只看图像,它缺失了距离信息,扭曲了物体之间的角度信息,我们没法基于影像做一些准确的测量。

    了解一下:计算机视觉包含两个基本方向,物体识别和三维重建。

    • 图像识别的突破性进展源自于2012年卷积神经网络的兴起(AlexNet)
    • 三维重建是未来的必然趋势,我们生活在三维空间里,必须将虚拟世界恢复到三维,才能和环境进行交互。
    • 三维重建和图像识别将逐渐融为一体

    3. 需要什么设备来重建三维

    Mme.Zhang忽然觉得李二每天也不是瞎胡闹了,倒是有点用处了,于是便问起来:那用什么设备能获取三维信息呢?

    李二见老婆挺上道,话匣子便打开了:刚才我说了,三维重建其实可以认为就是获取三维点云,那么点云获取的方式有三种:

    • 激光雷达LiDAR,直接对三维进行测量,直接得到三维点云
    • 深度相机,比如Kinect,也是直接获取三维信息,其实感觉不能叫做三维,算是2.5维,得到深度图
    • 双目立体视觉,两个标定好的相机,通过同时拍照以及立体视差获取三维信息,可以类比于人眼;摄影测量就是这么干的。
    • 单目视觉,也就是一个相机,通过一系列照片,根据某些算法,恢复三维。
    三维获取的四种方式(摘自深蓝学院)
    三维获取的四种方式(摘自深蓝学院)

    (每一项的具体信息,不做展开了,各位看官请自行出门左转了解)

    Mme.Zhang坚定的说:那还弄啥嘞,直接LiDAR上呀。

    李二突然一下不知道该咋解释了,便含糊的说道:

    • LiDAR不是贵嘛,目前一般人买不起,等到跟相机差不多钱了可能就行了。
    • 深度相机的左右距离有限,只能最多3-5米的范围吧。
    • 双目立体视觉需要两个位置、姿态标定好的相机,弄起来比较费劲,万一你磕了碰了弄弯了,还得重新标定。
    • 单目视觉就很方便了,一个相机,通过运动,就可以恢复三维,而且这个还有纹理与色彩信息,对于图像识别也是有好处的

    (我解释的可能不够,但是应该把主要问题包含了)

    Mme.Zhang若有所思,突然说道:其实单个相机也不好,因为这样你们男生可以只用一个手机,准确计算出女生的三围、身高、体重了。 李二:这..... 唉.....

    4. 基于图像的三维重建 - 极简原理

    Mme.Zhang终于开始问点关键的了:那你大致说说怎么样基于一个相机恢复三维点云呀,就是你前面说的基于图像的三维重建。不过我是文科生,你别讲太深了。

    李二自信满满的说:别说你是文科生,你就是初中生,我都给你讲明白了。核心原理十分简单,肯定能听懂。

    (各位看官若是看不懂,评论区写差评)

    李二开始了表演:

    准备材料:我们刚刚说到,必须要一系列的图像才行,而且图像之间要有重叠,不能拍的东西完全不同,否则咋重建。不妨拿四张图像来解释一下三维重建。


    极简思路:假如这四幅影像是在不同视角拍摄的同一地物,由下图可以看出,这四幅影像同时看到了地物的一些相同的地方,比如我们知道每幅影像的拍摄位置(或者光心(焦点)位置) 以及姿态 (嗨,看官们,其实就是外方位元素),它们在不同视角都看到了点,那么就可以通过图像 、点对应的像素位置 恢复出视线(line of sight) ,一共四条视线。因为所有的视线都应该交于点 ,因此构成了6个空间三角形。

    • 其实一个空间三角形,就能够确定点 的空间位置,就是三角定位(triangulation)。在极简思路中,你可以认为多出的空间三角形没用。(备注一下,是非常有用的,因为噪声的问题)。
    • 不一定在每幅图像中都必须出现点 ,理想情况下,两幅就够了,因为两幅图像的视线就可以构造一个空间三角形进行三角定位。(备注一下,事实上至少三四张,才能有理想结果)。

    这四幅影像其实不止同时看到了点 ,他们可能同时也看到了其他很多点,这时就能够构成点云啦,也就恢复三维了

    由影像同名点构成的多个三角几何,并进行三角定位
    由影像同名点构成的多个三角几何,并进行三角定位

    (如果仅仅想了解三维重建的核心原理的看官,看到这就够了。之后无非是怎么找特征点,确定同名点,三角定位确定三维点,因为误差所以需要不断优化调整,得到最终的三维点以及相机的内外方位元素)

    Mme.Zhang很高兴,她觉得她已经已经理解了,便说:就这么点事呀,那你前段时间又买书又查资料的,又费劲巴力的写二维成像的博客。我的护肤化妆品钱都然你给造了。

    5. 基于图像的三维重建 - 总体框架

    李二梗着脖子,涨红了脸说道:哪有这么简单,实际中还有好多问题呢。比如我下面要讲这些,直到本世纪初,它们的技术才慢慢成形呢,2010年左右才正式到了应用层次。

    Mme.Zhang拗不过我,便说:行行行,你自己玩耍吧,我去护肤化妆去了。

    题外话:我一看见一桌子护肤品,就想到,相同的钱买点电子产品也好呀。我是人穷志气短呀!
    

    李二看Mme.Zhang没有听下去的欲望,不知是为了表明这事情真不容易,还是因为其他原因,便自言自语地接着说了下去,在实际三维重建中我们会发现几个问题:

    上面说到四幅图像都看到空间点 ,对应在图像上的像素点分别为 ,这四个像素点是你人眼识别出来的,但是现在得让计算机识别出来,而且识别出这四个像素点都对应同一个空间点 ,这就有点难度了。

      1. 特征点检测:图像中会有很多像素点,一些比较有特征的点更容易识别和表达出来,比如灰度变化剧烈的点,这些点被称为特征点或者关键点,因此我们可以把每幅图像的这些特征点先提取出来,这就是特征点检测。
      1. 特征点匹配:每幅图像的特征点被检测出之后,我们需要知道图像与图像之间,哪些特征点是对应的(比如),称之为同名点,这就需要对特征点进行匹配。
      1. 误匹配删除:实际匹配结果可能存在误差,也就是很多错误匹配的点,因此需要通过某种方式对误匹配的点进行删除;
      1. 集束调整(或光束法平差):误差或者噪声何时何地都是存在的,在构建三角几何关系时,也不例外。实际情况中,不同图像对于同一空间点的视线并不一定能保证交于这一点,因此需要通过某种方式对视线进行调整,使其交于一点。在此过程中,基于成像模型,我们也恢复了相机的位置与姿态等外方位元素,同时实现了点云的构建;
      1. 稠密重建:由于一般特征点数量并不是特别多,因此重建出来的点云比较稀疏。但是有了相机位姿之后,每幅图像的每个像元对应的视线我们都知道了,这是就可以根据某种方式,建立稠密点云,形成比较完整的三维。

    这就是基于图像的三维重建的各个模块,每个模块中涉及了很多内容,没有那么简单。但是三维重建的核心东西就是这些。

    基于图像的三维重建的总体框架与流程
    基于图像的三维重建的总体框架与流程

    其实所有的商业或开源三维重建软件的技术路线基本都是一样,但是一些技术细节不同,造成结果的差异。说明具体的技术细节还是十分重要吧!正如对于世界上绝大多数国家来说,即使拿到DF-17的详细图纸,也不一定能造出来。

    6. 后记

    以上故事纯属虚构,如果Mme.Zhang看到,企盼理解,不要揍我。
    

    接下来的几期博客,我可能不会讲的太细了,因为好多具体内容我自己也不了解,更不敢打肿脸充胖子给各位看官讲了。我个人认为:如果不是专门做这个的,仅知其大略或思路即可,不必苛求过深,思路对于我们的借鉴意义更大一些。

  • 相关阅读:
    线性时间选择
    ios理解 Pro Mutlithreading and Memory Management for iOS and OS X with ARC, Grand Central Dispatch, and Blocks
    ef
    c# 采集 获取网页数据内容 一会超时的问题
    entity4.1
    逐渐约束
    entity4.1
    ObjectContext.Refresh
    使用内存表
    MVCdropdownlist
  • 原文地址:https://www.cnblogs.com/ludwig1860/p/12709846.html
Copyright © 2011-2022 走看看