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

核心思想

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

给定一个区域MM及其边界∂M∂M,指示函数χMχM定义为

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

基本思路

对于任意点p∈∂Mp∈∂M,定义N⃗ ∂M(p)N→∂M(p)为向内的表面法向量,F~(q)F~(q)为一个平滑滤波器,F~p(q)=F~(q−p)F~p(q)=F~(q−p)为F~F~沿pp方向的平移。因为χMχM一般意义上是不好求导的,这里用χM∗F~χM∗F~的导数来近似。

从法向量到梯度空间

梯度空间的近似

由于N⃗ ∂MN→∂M的分布是未知的,需要通过观测值P={(pi,ni)}P={(pi,ni)}来近似。考虑离散点集ΩΩ,∂M∂M被分割为互不相交的区域℘s,s∈Ω℘s,s∈Ω。(1)(1)可以转化为积分求和,并将每个小积分近似为常函数,用代表点s.ps.p对应的函数值和℘s℘s的面积的乘积代替。

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

求解Possion问题

向量空间V⃗ V→和指示函数χ~χ~满足

∇χ~=V⃗ (3)(3)∇χ~=V→

然而,V⃗ V→通常意义上是没法积分的(为什么?)。为了得到(3)(3)式的最小二乘解,将(3)(3)式两边求导,就得到了拉普拉斯方程

Δχ~=∇⋅V⃗ (4)(4)Δχ~=∇⋅V→

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

实现细节

空间划分

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

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

空间上的基函数选择

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

给定octree的深度DD,作者根据选择了下面的基函数FF。

∗n∗n代表nn次卷积。当nn趋向于无穷时,FF趋向于高斯函数,它的定义域也越来越大。当n=3n=3时,定义域为[−1.5,1.5]3[−1.5,1.5]3。

octree上某个节点oo对应的函数FoFo定义为

Fo(q)≡F(q−o.co.w)1(o.w)3Fo(q)≡F(q−o.co.w)1(o.w)3

其中o.co.c是的oo中心,o.wo.w是oo的宽度。假设根节点(第0层)的宽度为WW,那么第dd层节点的宽度为W2dW2d。这个函数空间和小波空间很像。

Possion求解

Possion求解方法是L2投影(L2 projection)[3]。定义octree的节点集合为OO。向量空间V⃗ V→可以近似为

V⃗ (q)≡Σs∈ΩΣo∈Ng(s)αo,sFo(q)s.n⃗ V→(q)≡Σs∈ΩΣo∈Ng(s)αo,sFo(q)s.n→

其中Ng(s)Ng(s)是ss的八个最近邻的叶节点,αo,sαo,s是三线性插值的权重。

虽然V⃗ V→和χ~χ~都可以在函数空间上表示出来,Δχ~Δχ~和∇⋅V⃗ ∇⋅V→却未必有定义。因此将(4)(4)近似为最小化其在FoFo上的投影

Σo∥〈Δχ~−∇⋅V⃗ ,Fo〉∥2=Σo∥〈Δχ~,Fo〉−〈∇⋅V⃗ ,Fo〉∥2Σo‖〈Δχ~−∇⋅V→,Fo〉‖2=Σo‖〈Δχ~,Fo〉−〈∇⋅V→,Fo〉‖2

令χ~=ΣoxoFoχ~=ΣoxoFo,那么求解χ~χ~即是求解xoxo。

〈Δχ~,Fo′〉=Σoxo〈ΔFo,Fo′〉〈Δχ~,Fo′〉=Σoxo〈ΔFo,Fo′〉

Σo∥〈Δχ~,Fo〉−〈∇⋅V⃗ ,Fo〉∥2=Σo′∥Σoxo〈ΔFo,Fo′〉−〈∇⋅V⃗ ,Fo′〉∥2Σo‖〈Δχ~,Fo〉−〈∇⋅V→,Fo〉‖2=Σo′‖Σoxo〈ΔFo,Fo′〉−〈∇⋅V→,Fo′〉‖2

上式右边对x={xo}x={xo}求偏导,转化为

minx∥Lx−v∥2minx‖Lx−v‖2

其中,设octree的节点数为NN,N×NN×N矩阵LL在(o,o′)(o,o′)位置上的值为

Lo,o′≡〈∂2Fo∂x2,Fo′〉+〈∂2Fo∂y2,Fo′〉+〈∂2Fo∂z2,Fo′〉Lo,o′≡〈∂2Fo∂x2,Fo′〉+〈∂2Fo∂y2,Fo′〉+〈∂2Fo∂z2,Fo′〉

表面提取

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

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

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

转载请注明作者和出处(http://www.cnblogs.com/luyb),未经允许请勿用于商业用途。 COPYRIGHT@CNBLOGS.COM/LUYB 联系方式:luyanbin7 at gmail.com

从点云到网格(三)Poisson重建(转)相关推荐

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

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白:师兄,师兄,你在<从零开始一起学习SLAM | 给点云 ...

  2. 【直播预告】阿里云服务网格 ASM 产品易用性改善实践与思考

    简介:为了最终共建全球事实标准,阿里云服务网格 ASM 产品选择了以开源的 Istio 为基础进行能力增强和产品化.Istio 面向微服务治理的未来做了很好的概念抽象而功能强大,也因为功能强大带来了易 ...

  3. 阿里云服务网格ASM集成SLS告警

    简介:随着微服务的流行,微服务的架构也在不断的发展演进,Spring Cloud 与 Dubbo为代表的微服务开发框架也得到了普及和落地:在云原生时代,无侵入的服务网格(Service Mesh)开始 ...

  4. 华为云应用服务网格最佳实践之从Spring Cloud 到 Istio

    摘要:在全球首届社区峰会IstioCon 2021中,华为云应用服务网格首席架构师张超盟发表了<Best practice:from Spring Cloud to Istio>主题演讲, ...

  5. 实现全托管,腾讯云服务网格的架构演进

    导语 | 腾讯云服务网格(TCM)作为一个兼容 isito 的服务网格平台,已经在腾讯内外部有诸多落地案例.本文是对腾讯云高级工程师钟华.苗艳强在云+社区沙龙online的分享整理,深度解析服务网格架 ...

  6. CloudCompare:三维点云(网格)编辑和处理工具

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文来源:公众号@点云PCL,原文:CloudCompare的介绍 CloudCompare是一个三维 ...

  7. PCL——从点云到网格(一)利用OpenNI2和深度相机生成点云

    最近做毕设,学习了一下PCL的使用(C++).这几篇博客就记录一下自己做毕设的时候利用深度相机得到点云,最后生成Mesh的过程.效果应该不是最好的,但是先把流程记录下来,自己下次看的时候就知道大体流程 ...

  8. CloudComparePCL 点云按网格划分(点云分幅)

    文章目录 结果预览 一.简介 二.代码实现 三.并行版本 三.实现效果 参考资料 结果预览 一.简介 对点云进行网格划分,是很多论文都会进行的一种预处理过程,这样做有什么好处呢?主要有两点:(1)可以 ...

  9. 视觉三位重建:计算机视觉的核心任务

    一.前言 视觉三位重建一直是计算机视觉和摄影测量领域讨论的话题,且在近几年更是大家关注的热点.如数字孪生.AR.自动驾驶的高精度地图等.视觉三维重建相比激光三维重建,虽然精度上处于劣势,但是视觉具备更 ...

  10. 终端服务器有多种运行模式,云终端的三种工作模式你都知道的吗

    原标题:云终端的三种工作模式你都知道的吗 不知道大家有没有发现这几年来我们办公的电脑不知不觉中有笨重的台式机逐渐变成了小巧的云终端在使用的,我们去医院看病时也发现他们的办公的台式机也变成了云终端,甚至 ...

最新文章

  1. 我室友拿到了字节50万年薪,太牛逼了
  2. oracle rman imp exp,Oracle-client支持exp|imp|rman
  3. oracle 日期加3个月,三个日期函数(十分有用)!!!!!!!!
  4. mysql配置两个猪数据库_Linux下安装启动多个Mysql
  5. 我如何判断漏洞奖励计划是否值得参加?如何获得最大收益?
  6. Java多线程——带你看AQS框架源码
  7. Masterlab 1.1 发布,基于敏捷开发的项目管理工具
  8. 读Pyqt4教程,带你入门Pyqt4 _007
  9. 大吉大利,今晚如何用R语言解锁“吃鸡”正确姿势
  10. 20款最优秀的JavaScript编辑器
  11. windows程序设计简介
  12. 不用百度网盘客户端下载文件
  13. 守夜人誓言+考研誓言
  14. 爬虫第九式:豆瓣电影排行榜数据抓取
  15. IP地址-子网掩码-默认网关之间的关系
  16. java面试死神之蛇形遍历
  17. 1024程序员节?我们整点AI绘图玩玩吧,一文教你配置stable-diffusion
  18. php面试题3---php面试题系列
  19. js map基本操作和循环取值
  20. 管理科学与工程和计算机哪个难考,考研管理科学与工程 管理学和工学哪个好考?...

热门文章

  1. sql字段拼接成新字段
  2. 疲劳驾驶监测方案_疲劳驾驶检测方法
  3. 移动web开发之移动端真机测试
  4. CentOS 7部署达梦数据库
  5. DOSBox下玩DOS经典GameZ或ZED游戏
  6. 构造嵌入式Linux(一):Kernel编译
  7. 谷歌广告联盟Adsense收不到Pin验证码怎么办?
  8. Rockland一抗丨视紫红质抗体解决方案
  9. which函数--R语言
  10. PSINS工具箱text_SINS_GPS_153.m