前言
基于体素的三维重建方法,在重建效果,鲁棒性等都有自己的优势,也被很多热门的三维重建方法所使用,如BundleFusion、KinectFusion等。这篇于1996年发表的论文《A Volumetric Method for Building Complex Models from Range Images》,可以说是这一领域的“鼻祖论文”了,想从算法层面好好理解基于体素的三维重建,一定绕不开对这篇论文的学习。
(更多示例见BundleFusion官网)
关键词:Cumulative Weighted Signed Distance Function,Isosurface
1. Introduction
这里提到了一个range image
的概念,其实就可以理解为depth map
深度图。
我们可以通过range image
和三角测量去获取到被探测物体的range surface
,这个词我没有找到合适的中文翻译,但是看对应的图,指的就是一个物体的三角面片形式。不过这种方法的重建效果一般,参考《视觉SLAM十四讲第二版》的7.6.2节,可以得到一些解释。
一个理想的表面重建算法应该有如下特点:
- 能够表达深度的不确定性,即合理地表达噪声
- 充分利用所有深度数据
- 无序增量式,也就是说我随时可以新增一张任意位姿的深度图,也能重建进去
- 快且不吃内存
- 鲁棒
- 不限重建物体的形状
- 可以填补空洞
本文使用的方法,具有上述所有特点。
2. Previous Work
3. Volumetric Integration
3.1 基本定义
-
定义 x x x为每一个voxel的位置, x ∈ R 3 x\in R^3 x∈R3;
-
对于每一张深度图,使用sdf函数 d ( x ) d(x) d(x)和权重函数 w ( x ) w(x) w(x)表示;
-
sdf函数的定义为:
signed distance of each point x to the nearest range surface along the line of sight to the sensor.
这其中的sdf
到底是什么呢?参考这篇文章中的一张图片:
不妨把一个体素看成一个点A,光心为O,射线OA与等值面的交点为B,AB的长度就是sdf,如果A在等值面外,则sdf为正,反之为负。
- 对于整体的场景,使用累积sdf函数 D ( x ) D(x) D(x)和累积权重函数 W ( x ) W(x) W(x)表示,整体场景和所有深度图的关系是:
(公式省略)
- 基于算法增量式的特点,整体场景与新增的第i张深度图的关系是
(公式省略)
3.2 分维度的讨论
3.3 等值面
最终我们解方程 D ( x ) = 0 D(x)=0 D(x)=0,得到的解 x x x即为物体的表面。
5. Implementation
5.2.3
最终,需要使用Marching Cubes算法来生成mesh的结果,这个方法的学习见我的另一篇笔记基于体素的三维重建的最终结果——Marching Cubes算法学习笔记。