Possion重建是Kazhdan等2006年提出的网格重建方法[1]。Possion重建的输入是点云及其法向量,输出是三维网格。Poisson有公开的源代码[2]。PCL中也有Poisson的实现。

核心思想

Possion重建是一个非常直观的方法。它的核心思想是点云代表了物体表面的位置,其法向量代表了内外的方向。通过隐式地拟合一个由物体派生的指示函数,可以给出一个平滑的物体表面的估计。

给定一个区域\(M\)及其边界\(\partial M\),指示函数\(\chi_M\)定义为

这样,把重构\(S = \partial M\)的问题转换为重构\(\chi_M\)的问题。作者给出了将点云及其法向量和\(\chi_M\)联系起来的公式。作者论文中的图1非常形象地描述了这二者的联系。

基本思路

对于任意点\(p\in \partial M\),定义\(\vec{N}_{\partial M}(p)\)为向内的表面法向量,\(\tilde{F}(q)\)为一个平滑滤波器,\(\tilde{F}_p(q)=\tilde{F}(q-p)\)为\(\tilde{F}\)沿\(p\)方向的平移。因为\(\chi_M\)一般意义上是不好求导的,这里用\(\chi_M\ast\tilde{F}\)的导数来近似。

从法向量到梯度空间

梯度空间的近似

由于\(\vec{N}_{\partial M}\)的分布是未知的,需要通过观测值\(P=\left\lbrace \left( p_i,n_i\right) \right\rbrace\)来近似。考虑离散点集\(\Omega\),\(\partial M\)被分割为互不相交的区域\(\wp_s,s\in\Omega\)。\((1)\)可以转化为积分求和,并将每个小积分近似为常函数,用代表点\(s.p\)对应的函数值和\(\wp_s\)的面积的乘积代替。

这里希望平滑滤波器\(\tilde{F}\)能够尽量地窄,不过分平滑数据,同时尽量地宽,使得积分近似能够更准确。高斯滤波器是一种常见的选择。

求解Possion问题

向量空间\(\vec{V}\)和指示函数\(\tilde{\chi}\)满足
\[
\nabla\tilde{\chi}=\vec{V}
\tag{3}
\]
然而,\(\vec{V}\)通常意义上是没法积分的(为什么?)。为了得到\((3)\)式的最小二乘解,将\((3)\)式两边求导,就得到了拉普拉斯方程
\[
\Delta\tilde{\chi}=\nabla\cdot\vec{V}
\tag{4}
\]

拉普拉斯方程在数学上有很详细的研究。

实现细节

空间划分

为了解一个偏微分方程问题,首先要将其离散化。最简单的方法是将空间划分为均匀网格。这种划分非常占内存空间,而且只有边界附近的值才是我们关心的,大量的空间被浪费了。作者采用了一种自适应的网格结构octree来划分空间,并且octree上定义了一个函数空间\(F_o\)。下图给出了octree在三维空间对一个物体的划分。物体边缘的网格密度远大于远离物体的网格密度。

http://http.developer.nvidia.com/GPUGems2/elementLinks/37_octree_03.jpg

空间上的基函数选择

如何选择函数空间\(F_o\)实际上挺有学问的。因为\(F_o\)一旦给定,定义在这个octree上的向量空间\(\vec{V}\)和指示函数\(\chi\)都会通过\(F_o\)的线性组合去近似。这样,求解\(\chi\)就转化为求解\(F_o\)上的参数组合,进而转化为求解一个线性方程组。

给定octree的深度\(D\),作者根据选择了下面的基函数\(F\)。

\(*n\)代表\(n\)次卷积。当\(n\)趋向于无穷时,\(F\)趋向于高斯函数,它的定义域也越来越大。当\(n=3\)时,定义域为\([-1.5,1.5]^3\)。

octree上某个节点\(o\)对应的函数\(F_o\)定义为
\[
F_o(q)\equiv F\left(\frac{q-o.c}{o.w}\right)\frac{1}{(o.w)^3}
\]
其中\(o.c\)是的\(o\)中心,\(o.w\)是\(o\)的宽度。假设根节点(第0层)的宽度为\(W\),那么第\(d\)层节点的宽度为\(\frac{W}{2^{d}}\)。这个函数空间和小波空间很像。

Possion求解

Possion求解方法是L2投影(L2 projection)[3]。定义octree的节点集合为\(O\)。向量空间\(\vec{V}\)可以近似为
\[
\vec{V}(q)\equiv \Sigma_{s\in \Omega}\Sigma_{o\in Ng(s)}\alpha_{o,s}F_o(q)s.\vec{n}
\]
其中\(Ng(s)\)是\(s\)的八个最近邻的叶节点,\(\alpha_{o,s}\)是三线性插值的权重。

虽然\(\vec{V}\)和\(\tilde{\chi}\)都可以在函数空间上表示出来,\(\Delta\tilde{\chi}\)和\(\nabla\cdot\vec{V}\)却未必有定义。因此将\((4)\)近似为最小化其在\(F_o\)上的投影
\[
\Sigma_{o} \lVert\langle \Delta \tilde{\chi}-\nabla\cdot\vec{V},F_o\rangle\lVert^2=\Sigma_{o} \lVert\langle \Delta \tilde{\chi},F_o\rangle-\langle\nabla\cdot\vec{V},F_o\rangle\lVert^2
\]
令\(\tilde{\chi}=\Sigma_ox_oF_o\),那么求解\(\tilde{\chi}\)即是求解\(x_o\)。
\[
\langle \Delta \tilde{\chi},F_{o'}\rangle=\Sigma_{o}x_{o}\langle \Delta F_o,F_{o'}\rangle
\]
\[
\Sigma_{o} \lVert\langle \Delta \tilde{\chi},F_o\rangle-\langle\nabla\cdot\vec{V},F_o\rangle\lVert^2
=\Sigma_{o'}\lVert\Sigma_ox_o\langle \Delta F_o,F_{o'}\rangle-\langle\nabla\cdot\vec{V},F_{o'}\rangle\lVert^2
\]
上式右边对\(x=\lbrace x_o\rbrace\)求偏导,转化为
\[
\min \limits_{x}\left\lVert Lx-v \right\lVert ^2
\]
其中,设octree的节点数为\(N\),\(N\times N\)矩阵\(L\)在\((o,o')\)位置上的值为
\[
L_{o,o'}\equiv \langle\frac{\partial^2 F_o}{\partial x^2},F_{o'}\rangle+\langle\frac{\partial^2 F_o}{\partial y^2},F_{o'}\rangle+\langle\frac{\partial^2 F_o}{\partial z^2},F_{o'}\rangle
\]

表面提取

用Marching Cubes类似的方法。注意iso的值取自\(S\)个划分的平均。

作者还讨论了非均匀采样下的算法,在此就不赘述。

Poisson分析

简单列几点

  • Poisson在边缘处的锐度比VRIP要好。这是因为VRIP在大的边缘处TSDF的累加会有平滑效应,而Poisson依据的是法向量,不会引入额外的平滑。
  • VRIP是局部方法,每次只更新当前深度图对应的TSDF。Poisson是全局方法。
  • 从个人使用经验上看,Poisson对于噪声更加鲁棒一些。点云法向量估计的精度不能太差。
  • 如果重建出奇怪的形状(分层、分块),请查看原始点云是否平滑,是否有噪声,调整生成网格的分辨率以适应点云。

小结

Poisson是个好方法。

参考文献

[1]. Kazhdan, Michael, Matthew Bolitho, and Hugues Hoppe. "Poisson surface reconstruction." Proceedings of the fourth Eurographics symposium on Geometry processing. Vol. 7. 2006.
[2]. http://www.cs.jhu.edu/~misha/Code/PoissonRecon/Version8.0/
[3]. http://www.featflow.de/en/software/featflow2/tutorial/tutorial_l2proj.html

从点云到网格(三)Poisson重建的更多相关文章

  1. pcl曲面重建模块-poisson重建算法示例

    poisson曲面重建算法 pcl-1.8测试通过 #include <iostream> #include <pcl/common/common.h> #include &l ...

  2. 从零开始一起学习SLAM | 点云到网格的进化

    点击公众号"计算机视觉life"关注,置顶星标更快接收消息! 本文编程练习框架及数据获取方法见文末获取方式 菜单栏点击"知识星球"查看「从零开始学习SLAM」一 ...

  3. [转]新型智慧城市总体架构 华为 新ICT 一云二网三平台

    本文转自:http://www.jpsycn.com/hangyexinwen/20160801142354.html “十三五”规划提出,充分运用现代信息技术和大数据,建设一批新型示范性智慧城市.日 ...

  4. 从点云到网格(二)VRIP介绍

    VRIP(Volumetric Range Image Processing),顾名思义,是从深度图重建网格的一种方法.VRIP是Brian Curless和Marc Levoy在1996年提出来的方 ...

  5. 阿里云产品介绍(三):云数据库RDS

    写完云服务器ECS,本来想先写负载均衡的. 因为发现很多客户,都是直接将单台云服务器应用对外提供访问,如果云服务器宕机,应用就会停止服务.云服务器标称有99.95%的可用率,一年下来宕机四个多小时也是 ...

  6. EF6 在原有数据库中使用 CodeFirst 总复习(三、重建迁移)

    本来原来学的时候,挺顺利的,没想到再次使用,还是遇到很多问题,导致更新失败,所以,只能重建迁移,免得看着乱乱的. 一.删除迁移,将数据恢复到(一)结束状态 1.删除文件夹 2.删除表 3.删除列 4. ...

  7. Python word_cloud 样例 标签云系列(三)

    转载地址:https://zhuanlan.zhihu.com/p/20436642word_cloud/examples at master · amueller/word_cloud · GitH ...

  8. 重磅 | 腾讯云服务网格开源项目 Aeraki Mesh 加入 CNCF 云原生全景图

    作者 赵化冰,腾讯云工程师,Aeraki Mesh 创始人,Istio member,Envoy contributor,目前负责 Tencent Cloud Mesh 研发工作. 摘要 近日,腾讯云 ...

  9. 阿里云CentOS7系列三 -- 配置防火墙

    前面讲到了安装JDK以及Tomcat.但是大家会发现,当我们访问 http:// XXX.XXX.XXX.XXX:8080/80 时候,tomcat 猫并没有出现.原因就是没有设置防火墙. 再次介绍下 ...

随机推荐

  1. 监视EntityFramework中的sql流转你需要知道的三种方式Log,SqlServerProfile, EFProfile

    大家在学习entityframework的时候,都知道那linq写的叫一个爽,再也不用区分不同RDMS的sql版本差异了,但是呢,高效率带来了差灵活性,我们 无法控制sql的生成策略,所以必须不要让自 ...

  2. 使用h5的history改善ajax列表请求体验

    信息比较丰富的网站通常会以分页显示,在点“下一页”时,很多网站都采用了动态请求的方式,避免页面刷新.虽然大家都是ajax,但是从一些小的细节还是 可以区分优劣.一个小的细节是能否支持浏览器“后退”和“ ...

  3. scikit-learn一般实例之八:多标签分类

    本例模拟一个多标签文档分类问题.数据集基于下面的处理随机生成: 选取标签的数目:泊松(n~Poisson,n_labels) n次,选取类别C:多项式(c~Multinomial,theta) 选取文 ...

  4. IIS服务器多域名证书绑定443端口解决方案

    一个服务器IIS要绑定多个HTTPS站点(该方法在此之前,有进行测试其他网站域名的ssl证书,测试没有问题) 默认情况一个服务器的IIS只能绑定一个HTTPS也就是443端口 要实现多个站点对应HTT ...

  5. MySql Access denied for user 'root'@'localhost' (using password:YES) 解决方案

    关于昨天下午说的MySQL服务无法启动的问题,解决之后没有进入数据库,就直接关闭了电脑. 今早打开电脑,开始-运行 输入"mysql -uroot -pmyadmin"后出现以下错 ...

  6. 理解ThreadLocal —— 一个map的key

    作用: 当工作于多线程中的对象使用ThreadLocal维护变量时,threadLocal为每个使用该变量的线程分配一个独立的变量副本. 接口方法: protected T initialValue( ...

  7. 企业IT架构介绍

    企业信息化之路 问题   互联互通   统一访问 统一身份管理 数据管理模型 企业数据集成业务架构 业务流程框架 业务流程模型 个性流程支持 跨业务的业务流程组合 EBS总线 ] SOA架构上视图 B ...

  8. 设计模式-代理模式(Proxy Model)

    文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/5988145.html 目录 1.写在前面 2.概述 3.目的 4.结构组成 5.实现 5 ...

  9. 解决mysql卸载后无法从新安装,卡在最后一步的问题

    mysql服务出现问题往往是最麻烦的,往往需要重装,而重装很多人卸不干净残留文件,更加装不上.在下就遇到这个问题.重装mysql到最后一步时卡在了最后一步的第二条上 解决办法就是卸载后删注册表+删数据 ...

  10. YYStock开源----iOS股票K线绘制第二版

    新的股票绘制粗来啦,欢迎围观star的说(*^__^*) 嘻嘻-- 捏合功能也准备完善了 Github:https://github.com/yate1996/YYStock 长按分时图+五档图 分时 ...