计算机视觉基于图像的三维重建入门介绍

扶醉桌前 提交于 2021-02-12 11:53:44

计算机视觉从技术角度目前分为两大类:一类是基于传统几何的计算机视觉,另一类是基于深度学习的计算机视觉。在介绍三维重建之前先来讲一下基于传统几何的计算机视觉相关的学习路线。


入门书籍有《视觉SLAM十四讲从理论到实践》《计算机视觉-算法与应用》计算机视觉中的多视几何》


入门视频教程有

浙江大学谭平教授的计算机视觉课程

https://www.bilibili.com/video/BV124411W775

高翔博士的视觉SLAM十四讲从理论到实践

https://www.bilibili.com/video/BV1Z5411t7oB


入门计算机视觉看这几本书,以及这两个课程就足够了,高博的课程比较难懂,可以先看谭老师的课程,再看高博的课程。高博的课程至少要看两遍,才能懂。要达到深刻理解的程度,需要结合后期的项目实践,再看第3遍或者以上。


在学习的过程中,需要自己运行一下《视觉SLAM十四讲》中的代码程序,第一遍只需要知道重要步骤的意思即可,没有必要细扣每一行代码的意思,第二遍需要知道每一行代码的意思,并且要尝试回答《视觉SLAM十四讲》课后习题,有些不会的上网查一下就行,了解了解就行,后面有了实际的项目实践,再来做这些题,回理解比较深刻。


进阶以视觉项目为导向,动手代码实践,理解程序的意思,在这个过程中,需要带着问题学习,多问为什么,上网查阅他人对代码的解读,多看一些解读,对比他们之间的解读有什么不同,自己也要对每一部分的解读进行总结,总结很重要,一定要对每一部分进行总结,有每一步的运行结果,也要保存下来,放到总结里面,这样后期再看的时候,就知道什么意思,有什么样的效果。


推荐项目

https://github.com/raulmur/ORB_SLAM2

https://github.com/HKUST-Aerial-Robotics/VINS-Mono


可以先学习ORB-SLAM2,再学习VINS,因为网上对这个两个的解读甚多,可以参考的学习资料很多,并且测试的数据集也有很多,很容易上手。


在实践的过程中,会有很多与图像处理相关的代码程序,可以查阅 《Learning OpenCV》、《数字图像处理》这两本书,这两本书作为工具书,需要经常查阅。在代码实践的过程中,严禁复制粘贴,每一行代码必须手敲,这样才能起到很好的学习效果。


开发工具有CLion和VSCode,推荐使用CLion,代码阅读,查看函数原码十分方便,在代码实践的过程中,时常需要查看函数的源代码,这样才能深刻理解函数的意义,主要看函数的功能作用、变量参数,以及返回值即可。


开发环境使用Linux系统,推荐使用Ubuntu16.04,这个系统用的比较多,网上的资料也多,遇到问题,可以很快找到相应的解决方案。


三维重建在计算机视觉领域中处于核心位置,香港科技大学权龙教授曾说“三维重建才是计算机视觉的灵魂”。在无人驾驶、增强现实、虚拟现实等领域中,都需要三维重建技术,在增强现实中,需要重建出物理世界,并把虚拟物体与真实物体结合,构建出周围的环境,才能与其进行相互的交流,给人以逼真的感受。


当然,目前随着深度学习的火热推进,除了使用传统方法求解真实世界的三维重建,目前也出现了使用深度学习的相关神经网络模型来求解物体的三维模型。


本文作者主要从事基于传统几何方法来求解物理世界的三维模型,所以本文主要讲解基于传统几何方法的三维重建。三维重建有不同的传感器,比如激光雷达、深度相机(RGB-D)、普通的RGB相机。不同传感器进行三维重建,所需要的的技术是不一样的,本文作者目前研究的是基于图像的三维重建,这里只对图像的三维重建进行介绍,根据学习经验,总结自己的学习过程和三维重建的入门介绍,希望为后面学习三维重建的同学提供一些参考建议。


三维重建属于计算机视觉领域,在学习三维重建之前,掌握一些计算机视觉和图形学相关的基础知识对于理解三维重建有很大的帮助作用。三维重建是将二维图片中的信息在三维虚拟空间中显现,是一个由二维到三维的过程。


推荐视频教程计算机视觉之三维重建篇

https://www.bilibili.com/video/BV15f4y1v7pa

GAMES101现代计算机图形学入门闫令琪

https://www.bilibili.com/video/BV1X7411F744


三维重建的进阶以项目为主导,可以根据目前开源的算法,进行学习。开源的三维重建方法有很多,并且侧重点有所不同,每一个开源算法都十分的庞大复杂,对于初学者来说门槛比较高。这里根据大家以及我的经验,推荐下面几个开源算法,非常适合初学者,深入学习三维重建。


推荐项目

https://openmvg.readthedocs.io/en/latest/software/SfM/SfM/

https://github.com/cdcseacave/openMVS

https://demuc.de/colmap/


首先推荐大家学习的是openMVG与openMVS,这是一个完整的三维重建过程,openMVG是根据图像来重建出场景的稀疏点云,openMVS是根据稀疏点云和图像来重建出场景的稠密点云与真实的三维模型。


如果有时间的话,也可以再学习一下ColMap,它对openMVG与openMVS进行了改进,重建的效果更好了。


在理解openMVG源代码的过程中,会涉及到很多相关的算法,这里推荐在学习时,对每个步骤只学习一个到两个算法即可,因为openMVG中会实现很多算法, 比如特征提取方法,只需要掌握一个到两个算法即可;SFM算法,只需要掌握增量式SFM全局式SFM即可。


当然,还有很多一些其他的算法,那是里面涉及的知识点很多,一开始不需要完全学习,这样会占用很多时间,只要学习其中一个到两个算法即可,理解之后,有时间后,再去学习其他的算法,也能与之前学习的算法进行对比。


往期教程汇总

安装Ubuntu16.04

如何制作一个U盘用来安装Ubuntu16.04 系统

Windows10 下安装 Ubuntu16.04 双系统教程

这个Ubuntu系统使用教程让小白的你瞬间变为大神

Cmake编译教程

源代码是如何变成可执行程序的 ?(一)

源代码是如何变成可执行程序的 ?(二)

源代码是如何变成可执行程序的 ?(三)

源代码是如何变成可执行程序的 ?(四)

源代码是如何变成可执行程序的 ?(五)

源代码是如何变成可执行程序的 ?(六)

GDB调试教程

GDB调试源码以及出现段错误核心已转存的错误如何借助core dump文件去解决问题

Clion编译和调试教程

Ubuntu16.04系统下安装和配置CLion编译器详细教程

Ubuntu16.04系统下用CLion编译器调试C++代码详细图文视频教程

Ubuntu16.04系统下用CLion编译器调试ROS代码详细教程

OpenCV|C++代码实践

OpenCV|C++代码实践之图像基础操作

OpenCV|C++代码实践之图像的旋转平移仿射和透视变换

OpenCV|C++代码实践之图像混合和同时显示多张图像

OpenCV|C++代码实践之图像的滤波操作和添加噪声

OpenCV|C++代码实践之图像上绘制文本空心和实心图形

OpenCV|C++代码实践之从文件或终端读写yaml和txt文件

OpenCV|C++代码实践之两种图像批量重命名方法

OpenCV|C++代码实践之图像提取过滤特征

OpenCV|C++|详细注释代码实践之图像去除畸变的几种方法



2021年1月31号晚九点哔哩哔哩直播讲解如何快速入门视觉SLAM

https://live.bilibili.com/22337550


扫描或者长按下方二维码添加小秋私人微信,可答疑并邀请加入微信交流群,本文部分内容整理来自网络如有侵权请联系删除。


本文分享自微信公众号 - 小秋SLAM笔记(gh_df091a0565ac)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!