点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

三维重建 3D reconstruction 有哪些实用算法?

https://www.zhihu.com/question/29885222

知乎高质量回答

一、作者:曹力科

https://www.zhihu.com/question/29885222/answer/918009389

本文来自知乎问答,仅供学习参考,著作权归作者所有。

在这个问题下,竟然没有人说大名鼎鼎的KinectFusion以及他后面的一系列工作?KinectFusion单篇论文引用都已经超过3000次了,不应该啊!

如果只想看现阶段效果最好的三维重建算法,请拉到文章最后(如有更好的算法,还请告知)。

一、KinectFusion

帝国理工的Newcombe等人在2011年提出的KinectFusion,可在不需要RGB图而只用深度图的情况下就能实时地建立三维模型。KinectFusion算法首次实现了基于廉价消费类相机的实时刚体重建,在当时是非常有影响力的工作,它极大的推动了实时稠密三维重建的商业化进程。

KinectFusion重建效果

在他们的论文中没有开源代码,最初的代码是由PCL团队实现的:https://link.zhihu.com/?target=http%3A//pointclouds.org/news/kinectfusion-open-source.html

KinectFusion的重建效果可以看这个视频:

KinectFusion之后,陆续出现了Kintinuous,ElasticFusion ElasticReconstruction,DynamicFusion,InfiniTAM,BundleFusion等非常优秀的工作。其中2017年斯坦福大学提出的BundleFusion算法,据说是目前基于RGB-D相机进行稠密三维重建效果最好的方法。

二、Kintinuous和ElasticFusion

这两个工作都是同一个人做出来的,这个人就是Thomas Whelan。这两个工作应该算KinectFusion之后影响力比较大的。

Kintinuous GitHub代码:https://github.com/mp3guy/Kintinuous

ElasticFusion GitHub代码:https://github.com/mp3guy/ElasticFusion

Kintinuous2.0重建效果:

Kintinuous2.0重建效果

ElasticFusion 重建效果:

ElasticFusion 重建效果

三、ElasticReconstruction

项目官网:http://qianyi.info/scene.html

GitHub代码:https://github.com/qianyizh/ElasticReconstruction

重建效果:

ElasticReconstruction重建效果

四、InfiniTAM

InfiniTAM提供Linux,iOS,Android平台版本,CPU可以实时重建。

官网:http://www.robots.ox.ac.uk/~victor/infinitam/

GitHub代码:https://github.com/victorprad/InfiniTAM

重建效果:

五、DynamicFusion

官网:https://grail.cs.washington.edu/projects/dynamicfusion/

代码:https://github.com/mihaibujanca/dynamicfusion

重建效果:

DynamicFusion重建效果

六、BundleFusion

官网:http://graphics.stanford.edu/projects/bundlefusion/

论文:https://arxiv.org/pdf/1604.01093.pdf

代码:https://github.com/niessner/BundleFusion

重建效果:

二、作者:徐普

https://www.zhihu.com/question/29885222/answer/48940748

本文来自知乎问答,仅供学习参考,著作权归作者所有。

我讲一下用一组图片来做3D reconstruction需要的算法吧(SFM), 使用这种方法的软件比较代表性的有 Pix4Dmapper, Autodesk 123D Catch, PhotoModeler, VisualSFM.

我用JavaScript撸了个WebSFM, 完全用Javascript实现的3D reconstruction系统,可以在浏览器里跑.

http://websfm.org , 用Chrome,Firefox,IE10+打开即可.

pipeline大致是:

先用SIFT对每张照片提取特征,再对每一对图片做鲁棒的特征匹配,将所有2图匹配合并,找出track,通过tracks估算相机参数场景的稀疏结构, 再用相机参数做dense reconstruction, 输出dense point cloud (with surface nornal)

如果需要,可以用poisson surface reconstruction将dense point cloud转化为polygon

1 SIFT (Scale Invariant Feature Transform)

同样的特征点在不同的scale,方向,光照下都能被检测到,并且理论上会有相同的描述向量. (即invariant)

SIFT有很多变种,但实际上很类似,一般是添加几种可以保持invariant的变换, 比如仿射变换.

一个SIFT特征有四个部分(位置position, 大小scale, 方向direction, 描述向量descriptor).

比较两点可以直接比较其特征向量,不用考虑别的参数.

特征点的position和scale是在DoG Pyramid中找到的extrema.

方向是在特征scale下周边梯度histagram的主导方向.

描述向量是特征scale下以特征方向为准的坐标系下的梯度histagram

lowe's sift: http://www.cs.ubc.ca/~lowe/keypoints/

SiftGPU:http://cs.unc.edu/~ccwu/siftgpu/

我的JS实现: hhttps://github.com/ptx-pluto/web-sfm/tree/master/src/websift

2 ANN Feature Matching (近似最邻近特征匹配):

找出两张图片之间特征向量的Nearest Neighbor,从而找出点与点之间的匹配关系。

这里输出的匹配是嘈杂的,存在错误, 且非常耗时,先对两组特征(vs1[], vs2[])分别建立kd-tree,特征有128维,传统的kd-tree效果很差,需要对其进行平衡。在构建kd-tree选择hyperplane的时候,取方差最大的维度,在中位数处split.

为了加快速度,并不寻找严格NN, 而是在kd-tree上寻找ANN(Approximate NN).

匹配是否被采纳并不是使用传统的阀值,而是用一个优先序列来找ANN,最后通过第一与第二的距离比来确定是否采纳。同时v1,v2必须同时互为ANN,匹配(v1,v2)才被采纳.

ann: https://www.cs.umd.edu/~mount/ANN/
我的JS实现: https://github.com/ptx-pluto/web-sfm/tree/master/src/webmatcher

3 RANSAC:

用RANSAC和八点算法可以将嘈杂的匹配的结果稳定化.

适用情形: dataset存在少量错误,但服从一个constrain,并且constrain可以用dataset的一个很小的子集倒推回去。(在几何中这样的例子很多,比如给你某个平面上1000个点的坐标,但其中有错误数据,其constrain就是这个平面,而平面用3个点就可以确定)

原理: 随机抓一个subset并估算constrain,若subset中有错误数据,该constrain会很不准确,reject大部分数据;相反若subset中恰好都是正确数据,则会得到正确的constrain,accept大部分数据。因此不停的执行这个过程,直到找到正确的constrain,然后判定被其reject的数据为错误数据。(或因尝试次数过多退出)

在这里,dataset就是特征匹配输出的对应关系,而constrain就是核线几何(f-matrix), 用8个对应关系即可用八点算法估算出f-matrix. RANSAC可以筛除不符合核线几何的错误匹配.

RANSAC非常简单,代码只有十几行,而且效果非常明显,肉眼可辨

我的JS实现: https://github.com/ptx-pluto/web-sfm/blob/master/src/math/ransac.js

4 Eight Point Algorithm (八点算法)

用八个点点对应关系计算核线几何(f-matrix)

两个Projective Camera之间的点点对应关系是需要满足核线几何的,就像三点可以确定一个平面一样,8对匹配可以确定两个相机的核线几何.

核线几何简单的讲就是 x1*F*x2=0 , F是fundamental matrix (3x3, rank 2), x1,x2是相对应的两点的homogenous坐标。

将x1,x2代入后可以得到关于(f1,....f9)的一个线性方程,8对就是8个方程,再用SVD即可得最小二乘解.

5 Bundler Camera Registrtion

用tracks来估算相机参数.

bundler是incremental的,并且依赖于sparse bundle adjustment。初始化第一对相机后,便不断的用已知点估算新相机,并triangulate新的点,直到没有candidate为止,中间不断的做SBA来拟合新的参数, 并且每一轮做一次全局SBA。

bundler: http://www.cs.cornell.edu/~snavely/bundler/
我的JS实现:https://github.com/ptx-pluto/web-sfm/blob/master/src/webregister/register.js

6 SBA (Sparse Bundle Adjustemt)

SBA就是一个为view geometry优化之后的levenberg-marquardt非线性拟合算法. 在最小化projection error的时候,jacobian和hessian矩阵是稀疏的,而且存在特殊规律。利用了稀疏结构之后,就算有几千个变量需要拟合,速度也非常快。下图为sparse jacobian和sparse hessian.

sba: http://users.ics.forth.gr/~lourakis/sba/
我的JS实现:https://github.com/ptx-pluto/web-sfm/blob/master/src/webregister/sparse-bundle-adjustment.js

7 CMVS/PMVS (Dense Reconstruction)

使用surfel model的dense reconstruction, 比较复杂, 自己看吧

CMVS/PMVS: http://www.di.ens.fr/cmvs/

上述内容,如有侵犯版权,请联系作者,会自行删文。

推荐阅读:

吐血整理|3D视觉系统化学习路线

那些精贵的3D视觉系统学习资源总结(附书籍、网址与视频教程)

超全的3D视觉数据集汇总

大盘点|6D姿态估计算法汇总(上)

大盘点|6D姿态估计算法汇总(下)

机器人抓取汇总|涉及目标检测、分割、姿态识别、抓取点检测、路径规划

汇总|3D点云目标检测算法

汇总|3D人脸重建算法

那些年,我们一起刷过的计算机视觉比赛

总结|深度学习实现缺陷检测

深度学习在3-D环境重建中的应用

汇总|医学图像分析领域论文

大盘点|OCR算法汇总

重磅!3DCVer-知识星球和学术交流群已成立

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导,550+的星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

欢迎加入我们公众号读者群一起和同行交流,目前有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加群或投稿

三维重建 3D reconstruction 有哪些实用算法?相关推荐

  1. 三维重建 几何方法 深度学习_三维重建 3D reconstruction 有哪些实用算法?

    主要的深度学习系列算法有DBN, ConvNets, RNN等,基本上经典的深度学习算法都用过. 详细请看唐路路(研究方向 深度学习 3D重建)在专栏 机器学习&深度学习--学术水准的理解 总 ...

  2. python opencv 三维重建_三维重建 3D Reconstruction

    建设中,记录日常学习到的碎片,最后整理 什么是三维重建? 这里指的三维重建是基于对环境或者物体的一系列不同角度的照片,通过一系列的处理,获得环境或物体的三维模型. 三维模型的表示方式 点云(Point ...

  3. 三维重建【二】————3D reconstruction 较为实用的算法资料整理(传统方式)

    本文结合一些pape并且将资源进行整合,以便于后期的学习.博客将这些资源一下,这里不得提到大名鼎鼎的KinectFusion以及他后面的一系列工作.KinectFusion单篇论文引用都已经超过300 ...

  4. 3D Reconstruction三维重建halcon算子,持续更新

    目录 3D Reconstruction三维重建 Binocular Stereo双目立体 binocular_disparity binocular_disparity_mg binocular_d ...

  5. 【论文阅读】Occupancy Networks: Learning 3D Reconstruction in Function Space

    论文题目:Occupancy Networks: Learning 3D Reconstruction in Function Space(占据网络:在函数空间内学习三维重建,简称ONet) 论文作者 ...

  6. Occupancy Networks: Learning 3D Reconstruction in Function Space论文笔记

    Contribution Occupancy networks implicitly represent the 3D surface as the continuous decision bound ...

  7. Deep Multi-view Stereo for Dense 3D Reconstruction from Monocular Endoscopic Video

    Deep Multi-view Stereo for Dense 3D Reconstruction from Monocular Endoscopic Video 用于单目内窥镜视频稠密三维重建的深 ...

  8. 自动驾驶领域大佬在CVPR2020中 关于3D Reconstruction Learning的报告

    点击上方"视学算法",选择"星标" 干货第一时间送达 作者:黄浴 https://zhuanlan.zhihu.com/p/150948693 本文仅做学术分享 ...

  9. 免费送书啦!《3D计算机视觉:原理、算法及应用》一本全搞定

    1966年,人工智能学家Minsky在给学生布置的作业中,要求学生通过编写一个程序让计算机告诉我们它通过摄像头看到了什么,这也被认为是计算机视觉(Computer Vision,CV)最早的任务描述. ...

最新文章

  1. 怎样用Python控制图片人物动起来?一文就能Get!
  2. saltstack常用命令
  3. 【数据库开发】Redis key-value内存数据库介绍
  4. java的修饰符_java默认的修饰符是什么
  5. usb2.0、usb3.0、usb3.1、type-c 接口含义与区别
  6. msu文件无法运行_安装程序遇到报错?无法验证发布者?无法使用脚本直接调用?...
  7. IT部门不应忽略的12种数据
  8. 高性能计算多集群管理平台
  9. 30多个最有用的Web开发框架
  10. 数字信号处理——频域采样定理matlab验证
  11. css的div垂直居中的方法,CSS使DIV内容垂直居中的方法
  12. win7计算机事件查看器,win7事件查看器是什么,事件查看器概述
  13. 自家主机建云服务器_是用云主机还是自己建服务器好?
  14. Java 视频转码(转为MPEG-4格式)
  15. Windows及应用学习笔记
  16. 智慧物流在大宗货运领域“落地”有多难?
  17. fast RCN论文笔记
  18. 生成 Excel + PDF 导出,用 Java 怎么实现?
  19. ios heic格式照片批量转jpg工具
  20. 中国智能建造关键领域技术发展的战略思考!

热门文章

  1. ifrmae内层和外层高度同步
  2. JavaScript Array 对象方法
  3. WindowsPhone基础琐碎总结-----数据绑定(一)
  4. Outlook Hotmail Connector
  5. 灰鸽子敢说自己不是病毒?
  6. 核弹级漏洞!我把log4j扒给你看!
  7. 终于有人把 SpringBoot 项目的Http客户端工具说清楚了!
  8. 资深程序员感叹:表妹成绩好却无奈辍学开理发店,月入6万,上大学没用!网友:那是你没用!...
  9. 今天,进程告诉我线程它它它它不想活了
  10. 基于大数据的Uber数据实时监控(Part 1:Spark机器学习)