surfelwarp翻译
高效的非体积单视图动态重建
文章目录
- `高效的非体积单视图动态重建`
- 一、摘要
- 三、预备条件
- 四、总览
- 五、深度图处理
- 六、深度图融合和扭曲场更新
- A. 实时帧融合
- B. 实时面元蒙皮 Skinning
- C. 解决压缩变形场
- D. 面元的增补和扭曲字段更新
- E. 初始化
- F. 模型重新初始化
- G. 复杂性
- 七、非刚性扭曲场估计
- 八、实现细节
- 九、图文说明
- 十、总结
- 参考论文:
- 公式
表面表示方法 (Surfel:Surface element)
wiki: surfel
surfel用于模型渲染,相当于一块面片,主要参数有:
- 空间点坐标:面片位置
- 空间法向量:面片方向
- 颜色信息
- 权重/置信度:用于判断当前面片的是否稳定,以及后续的加权平均等运算。根据当前点到相机的距离进行初始化,距离越远,权重越小,越不可信
- 半径:由当前表面到相机光心的距离决定,距离越大,半径越大
- 时间戳
一、摘要
本文提供了一个密集的SLAM系统:
- 该系统将实时的深度图像流作为输入,并实时重建非刚性变形场景,而无需使用模板或先前的模型。
- 与现有方法相比,我们不保留任何容量和数据密集型的体数据结构,使用基于平点flat point(surfel)的几何图形表示,平点可以直接从商品深度传感器获取。
- 标准图形管道和通用GPU计算可用于所有中心操作:即最近邻维护,非刚性变形场估计和深度测量融合。该管道避免了等值面提取,体积融合和密集变形场更新等昂贵的体积操作。
- 基于明确且灵活的surfel的几何表示可实现高效处理拓扑更改和跟踪故障,这使得我们的重建与最新的深度观测结果一致。
- 系统允许机器人使用非刚性变形的对象维护场景描述,从而有可能与动态工作环境进行交互。
三、预备条件
-
Kinect或Xtion记录深度图像序列
-
遵循DynamicFusion 将变形场W表示为节点图g,与体积变形场相比虽然稀疏但有效
-
详细介绍公式:
j是节点索引,pj是j节点的位置, j是一个半径参数,Tj是j节点上定义的6自由度转换。Tj用二元四元数^qj表示,以便更好地插值。对于三维点x,在x处W的变形可以插值为

其中N(x)是x的最近邻居集,权值W(x)可以计算为
surfel s是一个位置元组 v 组成的,法向量n ,半径r,置信度c,初始化时间Tinit 和最近的观察时间Tobserved 2 n .大写字母S是用来表示数组surfels,S[i]是在这个数组中的第i个surfel。
在变形场W的作用下,surfel可以通过方程进行变形。

- 其中Vlive和Nlive是变形顶点位置和法线,vref和nref是变形前的顶点位置和法线。
其他属性,如半径、时间、置信度,变形后保持不变。

四、总览
如图1所示,系统以逐帧方式运行以处理输入深度流。接收到新的深度图像后,我们首先求解变形场,该变形场将参考几何形状与当前深度观测值对齐。这是通过首先初始化来自前一帧的变形场,然后进行类似于基于迭代最近点(ICP)的优化来执行的。变形场更新后,我们将执行数据融合以将当前深度观测值累积到全局几何模型中。

一个重要观察是:给定适当维护的最近邻集和权重,我们可以将反翘曲inverse warping定义为

其中
可以通过查询N(Sref)和{W(Sref)}来计算。
因此,与之前在参考框架中执行几何更新的体积方法不同,我们的管道在实时框架中更新几何模型,并将它们扭曲回参考框架。
Sref[i]和Slive[i]共享半径r,置信度c,时间戳Tinit和Tobserved
,因为它们在扭曲过程中是不变的。
五、深度图处理
使用方法
-
在每个像素u处,我们将计算 Sdepth。用
公式,把深度值转换为Sdepth的位置V(u),K为使用深度相机内参矩阵。 -
用中心差从顶点图中估计每个像素的法线
-
时间戳Tinit和Tobs被初始化为当前帧的t
-
用
计算Sdepth的置信度,r为当前深度测量到相机中心的归一化径向距离,
与[1]中相同 -
用
计算Sdepth的半径r,d为深度值,f为焦距,nz是相机帧中法线的z分量 -
为了防止从斜视角看到任意大的surfel面,使用[1]方法对超过75’ 的放牧观测grazing observations进行钳位半径clamp radii。
六、深度图融合和扭曲场更新
假设已经解决了变形场(解决方法将在第七节中介绍),我们的深度图融合和扭曲场更新管道首先在实时帧中执行数据融合,然后将实时surfel扭曲回到参考帧,然后 如图3所示,基于新观察到的参考曲面更新了扭曲字段。
A. 实时帧融合
先对参考面元阵列Sref执行前向扭曲,以获得与深度观测对齐的实时surfel阵列Slive。类似于[1]的方法,用于将深度图与实时面元融合。
我们将live surfel阵列Slive渲染为索引映射I:
- 给定摄像机内在K和估计的摄像机姿态Tcamera,每个live surfel Slive[K]被投影到当前摄像机视图的图像平面,其中存储各自的点索引K。
- 在索引地图I中,surfel被渲染为未调整大小的点,也就是说,每个surfel最多只能被投影到一个像素。
- 索引地图是重叠的深度地图,以避免附近的面元投影到相同的像素。
在实验中使用4x4的 超采样指数映射。
对于深度图D中的每个像素u,我们最多识别一个实时的surfel slive,它与通过在索引图I上以u为中心的4x4窗口搜索在u处进行的深度观察相对应(假设从D到I的坐标转换合适)。 查找相应冲浪的标准是:
- 丢弃到深度顶点的距离大于
的面元。 - 丢弃法线与深度法线不对齐的冲浪,即点(ndepth; nsurfel)<
。 - 对于其余面元,选择置信度最高的面元。
- 如果存在多个此类面元,选择一个最接近 Sdepth的面元。
找到对应的实时面元后,通过以下公式把该像素u的深度面元融合到实时面元

其中v,n,c,t和r是顶点,法线,置信度,最近观察到的时间戳和与面元相关的半径; 深度面元Sdepth的计算方法见第五节
B. 实时面元蒙皮 Skinning
对于任何深度像素u,如果未找到对应的实时surfel slive,则有可能将此深度surfel sdepth附加到实时surfel数组Slive上,以完成几何图形(附加管道将在本节中介绍。 VI-D)需要计算最接近的邻居集N(深度)和权重,以便此冲浪将深度扭曲回到参考帧。但是,节点图是在参考帧中定义的,因此在不知道深度的回弹位置之前计算参考帧中最近的邻居集N(深度)是不可行的。
解决像素深度面元未找到所对应的实时面元方法:首先将节点图g扭曲到实时帧gˆ,然后在实时帧上进行蒙皮。但是,在从开到关的拓扑结构更改时,深度面元可能会被换成不一致的节点:在图6中,手的面元可能会被换到面部接近的节点时的皮肤。为了解决这个问题,我们提出以下管道:
- 使用实时帧上的节点图gˆ计算深度面元的初始最近邻居集N(深度)。 设
表示在实时帧处最接近sdepth的节点。 - 对满足此式的实时帧节点保留到N(sdepth),其他的移除。
阈值E测量了固有变形的程度。 上面的标准确保深度面元变形由一组一致的节点控制,即N(sdepth)中的节点在参考系中接近并且具有平滑的公式3变形值。
C. 解决压缩变形场
解决方案是在实时帧范围内限制反翘曲的敏感性。 使用图2中的一维图示,我们丢弃了
的实时面元,阈值E在等式6中定义。 在3D情况下,等式中的梯度变为3x3应变张量strain tensor,并通过有限差分计算。参考帧位置是通过Sec IV中定义的反翘曲计算的和VI-B的换肤方法。

图2.压缩翘曲场的一维示意图。 段AD上的压缩变形字段将参考帧中的点A,B,C和D映射到相同位置。 根据实时帧中D’处的观察,不可能推断参考帧处的位置。
D. 面元的增补和扭曲字段更新
***面元的增补***使用与[1]中相同方法,将不与任何模型面元相对应的深度面元sdepth附加到Slive,并带有两个附加条件:
- 舍弃最近邻居权重之和小于δnn的冲浪。这些surfel远离节点,并且可能是异常值。
- 丢弃被认为是压缩映射的面元。 VI-C。
如果存在以下情况,现有的实时面元也将被丢弃:
-
surfel长时间保持不稳定,即,在初始化时间Tinit结束后的一段时间Tlow:_confid,其置信度c小于置信度阈值δstable。
-
它与索引图I上的邻居非常相似。
正式的标准和详细的方法可以在 [1]中找到。完全更新Slive之后,执行SecIV中定义的反向扭曲,以从Slive更新Sref。
扭曲字段扩展管线 warp field extending pipeline:
- 计算当前节点图覆盖新几何Sref附加的程度。
- 将一组未覆盖的顶点进行二次采样并将其附加到节点图。
- 重新计算节点图中的边。
正式的描述和详细的方法可以在 DynamicFusion [2]3.4 中找到。。
在新的节点图的基础上,还更新了最近的邻居和冲浪者的权重。对于Sref中的每个surfel sref,将其最近的邻居集N(sref)与附加节点进行比较,并在需要时进行更新。附加节点的数量通常不超过10,因此对附加节点进行蛮力搜索brute-force search就足够了。
E. 初始化
- 接受收到第一张深度图像D0后,我们首先根据SecV 计算深度面元。.
- 使用GPU选择将对应于有效深度像素的surfel收集到Sref和Slive中。
- 扭曲字段W中的节点通过二次采样Sref来初始化。
- 节点图G中的边缘是根据[2]计算的。节点的公式(3)变形值被初始化为恒等。
- 在扭曲字段W初始化之后,执行surfel的skinning:根据w中的参考帧位置和节点,计算每个surfel的最近邻域和权重。
F. 模型重新初始化
如 [3],不可能从单个参考解释所有运动,并且错误地假设非刚性跟踪器永远不会失败。因此 [3]使用两个TSDF卷,一个用于参考帧,另一个用于实时帧,并通过实时卷重置参考卷,以处理较大的运动,跟踪故障和拓扑更改。但是,如[3]中所述,保持额外的TSDF量和关联的最近邻居字段不可避免地会增加计算成本和内存使用量。
我们的管道自然以更紧凑,更有效的方式支持类似的想法:
- 与不正确的TSDF值相比,从深度观察中推断出错误的面元更明确,更容易。
- 我们将丢弃所有从当前摄像机视图中可见但没有相应深度观察的实时面元。
- 通过将实时surfel slive投影到深度图像中并执行窗口搜索来识别对应关系。
- 清除Slive之后,我们将Sref重置为Slive并在其上初始化扭曲场。
在我们的实验中,模型重新初始化由公式8中定义的失准能量和附加的surfels的数量来调用。 当在几个连续的帧中观察到较大的未对准能量值和大量增补的surfel时,非刚性跟踪器可能会在输入深度观测值方面苦苦挣扎。
G. 复杂性
在本小节中,我们将分析本小节中介绍的所有操作的复杂性。
- 设|V|表示数组V的大小,|W|表示翘曲域的节点数,Sappend表示附加的surfel候选数组。数据融合(第六- a节)、反向扭曲和最近邻居数组更新(第六- d节)的复杂度为O(Slive)。实时面元蒙皮 (Sec. VI-B)和压缩处理 (Sec. VI-C)的复杂度为O(Sappend)。通过O(|Slive| + |Sappend|) GPU选择来压缩surfel阵列。所有这些操作都可以被GPU并行化。
- 在初始化(VI-E节)和模型重新初始化(VI-F节)中, 面元蒙皮的节点数| W |足够大,可以从结构化搜索算法(如Muja和Lowe [4])中受益
- 我们选择在CPU上建立搜索索引,在GPU上执行近似最近邻查询,复杂度约为O(|Sref|log(|W|))。虽然GPU并行查询的不同执行可能会削弱性能,但(重新)初始化通常是有效的(即 3-5毫秒),因为Sref尺寸小。
- 根据我们的观察,Slive包含了大约3105个面元。Sappend通常不超过5000个surfels,也就是说,不到1个有效深度像素。因此,像实时surfel蒙皮和压缩解析这样的复杂操作只在一小部分像素上执行,这进一步确保了我们的管道的效率。
七、非刚性扭曲场估计
-
根据新的深度观测数据D、先前的变形场Wprev、几何模型Sref和Slive(Slive根据Wprev由Sref变形而来),由公式3估算出变形量Tj。为了实现这一估计,我们首先预测实时surfels的可见性,然后使用DynamicFusion[3]将变形估计转化为一个优化问题。
-
可见性预测与Keller等人的方法类似[1]:我们将实时面元 Slive呈现为重叠的、由实时面元的位置Vlive、法向量Nlive和半径Rlive跨越的圆盘形表面板。尽管先进的渲染技术,如Zwicker等[24]是可用的,我们只是渲染不透明的splats以获得最佳性能。
-
与刚性SLAM管道(如[10,22])不同的是,我们还渲染了深度图像相同分辨率的索引图,以便有效地查询最近的邻居和权重。此外,为了提高在Slive中对异常值的warp field估计的鲁棒性,我们只渲染稳定的surf,即置信c大于第VI-D秒定义的δstable的surf。
在模型重新初始化后的前几帧或帧,我们也渲染最近观察到的surf,例如
,其中tnow是当前时间,tobserved是该surfel的最后观察时间。 -
根据动态融合[4]方法,我们求解以下优化问题来估计SE(3)变形T,EW:

其中Edepth是约束变形与深度输入D一致的数据项,Eregululation使运动规则化,使其尽可能的刚性,,λ是一个常数值,以平衡两个能量项。
Edepth是点到平面能量项[14]:
其中P是对应的模型和深度面元对的集合,n和V是法线和与面元相关的顶点。在给定深度观测值D和渲染的实时几何图形Slive下,求P的方法可以在Guo等人的[6]中找到。Ereculation是一个尽可能严格的正规化器:

其中Nj是节点图中第j个节点的相邻节点集。这一术语确保了几何模型的不可见部分将尽可能与可见区域一起移动。此外,这个术语避免了任意变形的几何形状来适应噪声深度输入。
优化问题公式[8]是一个非线性最小二乘问题,由GPU上实现的高斯-牛顿算法求解。在进行非刚性估计之前,我们首先使用KinectFusion的方法进行刚性对准[13]。
八、实现细节
我们的管道由三个主要组件组成:深度图像处理器、非刚性解算器和几何更新模块。
- 第五节中描述深度图像处理器获取深度图像和计算深度surfels。
- 我们遵循窦等[4]来实现非刚性的解决:首先构造矩阵JT J,然后解决线性系统
J和e是雅可比矩阵和公式8中最小二乘项的残差。 - 我们限制高斯牛顿迭代的最大数量是10,而解决者通常在3或4迭代收敛。
- 对于几何更新模块,管道在第VI节中对深度图像处理器的 Slive数组或depth surfels进行并行操作。
在单个Titan Xp GPU上,处理一张深度图像的时间通常是2毫秒,而几何图形更新通常每帧需要2-3毫秒。因此,总体性能主要由非刚性求解器决定,而非刚性求解器随动态场景的不同而变化很大。目前,我们的实现是单线程的,可以通过Guo等人61中使用的线程级并行或Dou等人中使用的流机制来进一步提高性能
九、图文说明

在深度框架上绘制的冲浪体数量,以进行不同的重建。 注意,每个深度框架观察到约105个有效冲浪。 我们的技术保持场景几何的紧凑表示。

在“上部”数据集上,我们的方法与DynamicFusion [14](我们的实现)之间的性能比较,两种方法共享相同的非刚性跟踪器。 受益于非体积流水线,我们的方法更紧凑地表示了几何形状和运动,并实现了显着的加速。

图6.我们的方法与DynamicFusion [14]和VolumeDeform [7]的比较。 此序列包含一个打开到关闭的拓扑更改。 我们的方法正确地解决了压缩变形场并产生了忠实的重建。 DynamicFusion [14]无法解决压缩变形并产生错误的表面; VolumeDeform的解决方案[7]几乎禁用了几何模型的更新,并导致表面不完整。

演示使用模型重新初始化机制来处理接近开放的拓扑更改和快速运动。上面一行:通过我们的方法进行重建。 下:DynamicFusion [14]的重构(我们的实现)。

演示使用模型重新初始化机制清洁不正确的表面。 此序列包含只能通过深度跟踪才能正确解决的顺序运动。 但是,模型重新初始化会根据深度观察结果删除不正确的曲面,并使我们的方法能够正确捕获几何图形。

我们方法的局限性:(a)拓扑下的不完整几何变化; (b)跟踪切向运动和快速运动的故障。
十、总结
本文提出了一种密集的SLAM系统,该系统可以从单个深度相机重建运动和几何形状。 与以前的方法不同,我们的方法是完全基于点的,即无需求助于TSDF或最近邻域等体积数据结构,这使我们的系统高效。 我们演示了所有中央操作,例如最近邻居维护,翘曲场估计和数据融合,都可以通过利用标准图形流水线和GPGPU计算而并行化。 几何图形的显式,灵活的surfel数组表示还可以从拓扑更改和跟踪故障中高效恢复,从而进一步提高了管道的健壮性。 与现有方法的实验比较证明了我们方法的有效性。
参考论文:
[1] Real-time 3d reconstruction in dynamic scenes using point-based fusion
[2] Richard A Newcombe, Dieter Fox, and Steven M Seitz. Dynamicfusion: Reconstruction and tracking of nonrigid scenes in real-time. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 343–352, 2015
[3] Mingsong Dou, Sameh Khamis, Yury Degtyarev, Philip Davidson, Sean Ryan Fanello, Adarsh Kowdle, Sergio Orts Escolano, Christoph Rhemann, David Kim, Jonathan Taylor, et al. Fusion4d: Real-time performance capture of challenging scenes. ACM Transactions on Graphics (TOG), 35(4):114, 2016.
[4] Marius Muja and David G Lowe. Scalable nearest neighbor algorithms for high dimensional data. IEEE transactions on pattern analysis and machine intelligence, 36(11):2227–2240, 2014.
公式










本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
