SurfelMeshing 解析
Surfel-Based Mesh Reconstruction
该算法是输入是RGB-D图像流,和通过SLAM系统求出的相机位姿(ElasticFusion),该算法由四大部分组成
surfel reconstruction,采用ElasticFusion的方式进行面元重建;
surfel denoising,创新点;
meshing,采用A fast and efficient projection-based approach for surface reconstruction类似方法;
remeshing,创新点。
前两部分主要是对点云进行处理,后两部分主要是对点云进行网格三角化。
原文
一、Surfel Reconstruction
我们的算法是对一个surfel cloud进行三角划分。为重建出这些cloud,我们采用ElasticFusion,以下阐述这种算法以及我们的修改。
从RGB-D图像输入流中,新来一帧图像时,数据关联步骤会决定深度测量值是创建一个新的surfel还是用来修正已有的surfel。对于回环检测部分,surfel cloud会变形对齐到匹配的表面。
Surfel s表示
{ P s 坐 标 c s 颜 色 n s 法 向 量 σ s 置 信 度 r s 半 径 t s , 0 创 建 时 间 t s 最 后 更 新 时 间 \left\{\begin{matrix} P_s && 坐标 \\c_s && 颜色 \\n_s && 法向量 \\\sigma_s && 置信度 \\r_s && 半径 \\t_{s,0} && 创建时间 \\t_s && 最后更新时间 \end{matrix}\right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧Pscsnsσsrsts,0ts坐标颜色法向量置信度半径创建时间最后更新时间
数据关联。
类似于[24],我们投影surfels到当前帧图像,决定哪个深度测量值关联已存在的surfels。为了决定哪个surfel投影到哪个pixel,[24]创建了一种super-sampled 索引图来渲染所有surfels, 但仍然受限于分辨率。我们通过始终直接从投影操作的结果中获取面元索引来改进这一点。 对于获取数据关联, 每个surfel针对投影到像素,以及这个像素相邻像素进行评估,使用一个简单模型,测量深度为 z z z,对于离这个像素距离在 [ ( 1 − γ ) z , ( 1 + γ ) z ] [(1-\gamma)z,(1+\gamma)z] [(1−γ)z,(1+γ)z]内的surfel,称为支持sufel,在小于区间的最小值,称为冲突surfel,大于区间的最大值,则称为占用surfel。
测量融合
我们为没有关联到冲突surfel或者支持surfel的像素点创建一个新的surfel。初始化surfel的值,半径r由下式计算,p(x,y)是像素点(x,y)对应的3D坐标。
在图像空间中半径内的像素作为直接邻居,进而推算出3D空间中surfel的邻居以及与邻居的距离。
像[24]那样融合当前surfel,不同的是我们将其融合到支持surfels中,将当前的surfel与每个支持的surfel使用下式进行加权平均。权重 ω \omega ω由所有支持surfels个数的倒数。
回环检测
该部分和ElasticFusion中的回环检测相似。
二、Surfel Denosing
尽管在融合surfel时用的加权平均,但在surfel还是存在很多噪声,在融合深度图的边界可能出现不连续的点,我们使用混合的方式处理这个问题。
Regularization
正则化的目的是保持一个平滑的surfel,减少与邻近的surfel之间的噪声。对surfel的结构进行扩展, p s p_s ps,四个邻居surfel的下标索引 N s N_s Ns,用来加速计算梯度临时存储。每个面元的降噪后的位置取决于邻居的降噪后的位置,邻居又取决于邻居的邻居,以此类推。
通过优化两个误差项,来更新surfel的位置和法向量。
Observation Boundary Blending
使用算法1,来避免,在优化之后,出现观察和没观察的边界之间不连续的情况。
按照算法1流程,将灰色的点的深度线性靠近到黑色表面。
最后使用icp将之前重建好的点(黑色)对齐到当前的点(灰色)。
三、Meshing
我们需要一个非常快的尺度无关的网格算法,来对数百万surfel进行三角网格化。对于meshing网格化使用[22]、[23],并作小的修改。
Spatial access
网格划分算法需要快速准确地找到一个surfel半径内所有其他surfel。因此需要一个空间访问结构。使用八叉树进行存储。
Triangulation
网格划分算法贪婪地遍历所有surfels,并对每个surfel与它邻近的surfels进行局部三角化,以增加网格。每一个surfel有三种状态,
- free 没有附带三角形。
- front 在三角网格的边界上。
- completed 在三角网格里。
所有新的surfel都为free状态。算法遍历所有的新的surfel…
对于遍历到某surfel,使用surfel的半径来进行搜索srufel,如果当前surfel在网格边界上,且边界邻居在半径外,我们就扩展搜索半径为2倍,以包含这些邻居。将所有的邻居surfel投影到当前surfel的切平面上,对于投影后的surfel不可见,或者法向量相差太多,就丢弃该投影。如下图。
如果当前surfel三free状态,则首先尝试创建一个初始三角形,如下图。
将当前surfel的所有邻居按角度进行排序,相邻两个邻居之间成为空隙,如果相邻两个邻居之间的夹角过大,则会形成狭窄的三角形,则会丢弃该三角形。
最后通过三角形填充完所有相邻邻居之间的空隙。
四、Remeshing
当surfels移动或创建新的surfels时,网格的现有部分可能会过时,需要有效地更新。对此,我们提出的方法工作在现有网格算法遍历每个网格之前,首先定义一种网格状态,存在一个洞,上图的e,红色部分的三角形,这里不可能生成一个表面,所以最后的渲染结果会存在一个洞,我们首先要识别所有的洞,然后使用网格算法重建那里的表面。
识别步骤
对于一个有效的三角形,它至少有一个顶点s,s是包含了s所有搜索半径内的邻居,且法向量相似。
三角形的法向量必须与这个顶点s的在90度内。
在s的切平面,没有其他邻居再投影到这个三角形中,并且这个三角形不会与另一个三角形相交。
如上红色部分是一个洞,导致周围几个三角形都不是有效的三角形。接下来将这些三角形,以及对应的顶点的三角形都删除,最后再进行上一节中的meshing,就可以重建出有效的比较好的表面。
SurfelMeshing 解析相关推荐
- golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用
RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...
- List元素互换,List元素转换下标,Java Collections.swap()方法实例解析
Java Collections.swap()方法解析 jdk源码: public static void swap(List<?> list, int i, int j) {// ins ...
- 条形码?二维码?生成、解析都在这里!
二维码生成与解析 一.生成二维码 二.解析二维码 三.生成一维码 四.全部的代码 五.pom依赖 直接上代码: 一.生成二维码 public class demo {private static fi ...
- Go 学习笔记(82)— Go 第三方库之 viper(解析配置文件、热更新配置文件)
1. viper 特点 viper 是一个完整的 Go应用程序的配置解决方案,它被设计为在应用程序中工作,并能处理所有类型的配置需求和格式.支持特性功能如下: 设置默认值 读取 JSON.TOML.Y ...
- Go 学习笔记(77)— Go 第三方库之 cronexpr(解析 crontab 表达式,定时任务)
cronexpr 支持的比 Linux 自身的 crontab 更详细,可以精确到秒级别. 1. 实现方式 cronexpr 表达式从前到后的顺序如下所示: 字段类型 是否为必须字段 允许的值 允 ...
- mybatis配置文件解析
mybatis配置文件解析 mybatis核心配置文件`mybatis-config.xml文件. mybatis的配置文件包含了会深深影响mybatis行为的设置和属性信息. 能配置的内容: con ...
- 谷歌BERT预训练源码解析(二):模型构建
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_39470744/arti ...
- Python 标准库之 xml.etree.ElementTree xml解析
Python 标准库之 xml.etree.ElementTree Python中有多种xml处理API,常用的有xml.dom.*模块.xml.sax.*模块.xml.parser.expat模块和 ...
- 谷歌BERT预训练源码解析(三):训练过程
目录 前言 源码解析 主函数 自定义模型 遮蔽词预测 下一句预测 规范化数据集 前言 本部分介绍BERT训练过程,BERT模型训练过程是在自己的TPU上进行的,这部分我没做过研究所以不做深入探讨.BE ...
最新文章
- 中科点击矩阵式推进大数据落地与应用
- msql安装(zip)
- /usr/share/virtualenvwrapper/virtualenvwrapper_lazy.sh: No such file or directory解决方案
- js粘贴板为什么获取不到图片信息_【第1829期】复制黏贴上传图片和跨浏览器自动化测试...
- ASP.NET MVC3 系列教程 - 部署你的WEB应用到IIS 6.0
- [转载] 【python魔术方法】迭代器(__iter__和__next__)
- php怎么跟小程序链接,小程序的链接怎么提取?
- 小程序学习笔记三:页面文件详解之视图层WXML、WXS、WXSS文件
- 自学python入门训练营 李笑来_如何看待李笑来发布的Python教程《自学是门手艺》?...
- HTML前端数据管理,前端数据管理
- plsql 备份还原 教程_PLSQL导出还原数据库
- OI国家集训队论文集1999~2018
- 怎么查看html隐藏代码,隐藏HTML源代码 怎样查看网页中隐藏的html源码
- linux驱动:二、LED灯驱动编写
- golang数据结构初探之管道chan
- Codeforces Round #703 (Div. 2)C1C2	 Guessing the Greatest(二分)
- 微信引流常用几大技巧
- 轻量级的肝脏与肝肿瘤 2.5D 分割网络阅读笔记
- 格与布尔代数(笔记)
- 1 php方式实现购物车原理,PHP购物车实现的原理