泊松重建算法原理介绍

2023-11-20

在这里插入图片描述

本文出自CSDN点云侠,原文链接。爬虫自重,把自己当个人。

1、泊松重建算法

  泊松重建是Kazhdan M在2006年提出的基于八叉树和泊松方程的一种网格三维重建算法。其本质是一种隐函数表面重建算法,在空间中用一个表面来区分内外,直观理解为表面外、表面内。用0、1来表示内外表面,可以简单理解为若某一元素属于这个集合则为1,即表面内,若某一元素不属于这个集合则为0,即表面外。这个关系就是Kazhdan M提出的指示函数,利用指示函数,可以对空间内部的所有有效指示函数实现梯度计算,通过求解这个函数提取等值面,得到表面的过程,即构建泊松方程并对其求解的过程。
  在论述泊松重建之前,首先对算法内用到的八叉树进行了研究。八叉树是指,若树非空,那么树中任意节点的子节点要么为0个要么为8个,是用来表示三维空间的树状数据结构。任意一个立方体可以最少被分为八个等分的小立方体,用八叉树的每个节点可以表示每个小立方体,这八个字节点合起来就是其父节点表。如图1所示:
在这里插入图片描述

图1 八叉树对空间区域的划分

  将场景点云数据利用八叉树划分空间区域,将每个点放到正方形的空间里,设定某一阈值,如果该正方形内的数据点超过这个阈值,就将该正方体再次划分,直到每个小正方体包含的点数小于或等于这个阙值,每个小正方体就是一个叶节点,记其最大深度为D,用以存储目标物体的点云数据。
  以八叉树的结构存储实验获取的点云数据,极大地方便了算法在实现过程中数据的存储及检索。

2、泊松重建核心思想及原理

(1)核心思想
  泊松重建的核心思想为:将物体区分为几何体内部和几何体外部,物体点云数据的法向量可以标示内部和外部,通过隐式地拟合该物体的指示函数,得到该物体表面的估计,即通过将物体表面的离散的点的信息转化到连续的表面函数上,从而构建出表面。
  设某一物体为 M M M,该物体的表面为 δ M \delta M δM,其指数函数 χ M \chi_M χM为:
χ M ( x ) = { 0 , x ∉ M 1 , ∈ M (1) \chi_M(x)= \begin{cases} 0,\quad x\notin M\\ 1, \in M \end{cases} \tag{1} χM(x)={0,x/M1,M(1)
其中点云法向量与 χ M \chi_M χM的关系如图2所示:
在这里插入图片描述

图2 泊松重建的基本函数关系

  指数函数 χ M \chi_M χM为分段函数,表示 q 0 q_0 q0在表面内其值为1,在表面外的点其值为0。显然,若得到每一个点 q 0 q_0 q0 χ M ( q 0 ) \chi_M(q_0) χM(q0),即可知道整个物体的表面。
  如果直接插值得到 χ M ( q 0 ) \chi_M(q_0) χM(q0)显然是不可能的,因为 χ M \chi_M χM不具有连续性,直接插值得到0到1之间的没有意义,因此不能使用该算法。可以先用平滑滤波函数平滑指数函数。
(2)法向量到梯度空间
  首先,先用平滑函数 F ˉ \bar{F} Fˉ来平滑 χ M \chi_M χM,对于任意点 p ∈ δ M p\in\delta M pδM,定义 N ⃗ δ M ( p ) \vec{N}_{\delta M}(p) N δM(p)为指向内侧的表面法向量,规定 F ( q ) F(q) F(q)为平滑滤波器, F ( q − p ) F(q-p) F(qp)表示 F F F沿 p p p方向的位移,因为指示函数 χ M \chi_M χM不好求导,可以利用 χ M ∗ F ˉ \chi_M*\bar{F} χMFˉ两个函数的卷积的倒数近似求解 χ M \chi_M χM,即:
Δ ( χ M ∗ F ˉ ) ( q 0 ) = Δ ∣ q = q 0 ∫ M F ˉ ( q − p ) d p = ∫ δ M F ˉ ( q 0 − p ) N ⃗ δ M ( p ) d p (2) \Delta(\chi_M*\bar{F})(q_0)=\Delta|_{q=q_0}\int_M\bar{F}(q-p)dp=\int_{\delta M}\bar{F}(q_0-p)\vec{N}_{\delta M}(p)dp\tag{2} Δ(χMFˉ)(q0)=Δq=q0MFˉ(qp)dp=δMFˉ(q0p)N δM(p)dp(2)
其中,*为卷积,此处为平滑滤波。这样就完成了从点云数据法向量到梯度空间的求解。
(3)梯度空间到向量场
  由于物体表面点的离散性, N ⃗ \vec{N} N 对于表面每个点 q q q未必都是已知的,即 N ⃗ δ M ( p ) \vec{N}_{\delta M}(p) N δM(p)的分布是未知的,可以利用分段近似解决这个问题,通过观察 P = ( p i , n i ) P=(p_i,n_i) P=(pi,ni)来近似。
  初始离散样本点集记为 S S S s s s S S S中的一个点 ( s ∈ S ) (s\in S) (sS) s s s包含位置信息 ( s . p ) (s.p) (s.p)和法向量信息 ( s . N ⃗ ) (s.\vec{N}) (s.N )。将 δ M \delta M δM按照空间划分成不同表面区域 δ s \delta s δs,并且 s ∈ S s\in S sS δ s ⊂ δ M \delta s\subset\delta M δsδM。式(2)可以转化为积分求和,其中每个小的积分可以近似为常函数,可以用 s . p s.p s.p对应的函数和 δ s \delta s δs的面积的积分代替,如下式:
Δ ( χ M ∗ F ˉ ) ( q 0 ) = ∑ s ∈ S ∫ δ s F ˉ N ⃗ δ M ( p ) d p ≈ ∑ s ∈ S ∣ δ s ∣ F ˉ ( q − s . p ) s . N ⃗ = V ⃗ ( q ) (3) \Delta(\chi_M*\bar{F})(q_0)=\sum_{s\in S}\int_{\delta s}\bar{F}\vec{N}_{\delta M}(p)dp\approx \sum_{s\in S}|\delta s|\bar{F}(q-s.p)s.\vec{N}=\vec{V}(q) \tag{3} Δ(χMFˉ)(q0)=sSδsFˉN δM(p)dpsSδsFˉ(qs.p)s.N =V (q)(3)
  假设样本点是均匀分布的,那么 ∣ δ s ∣ |\delta s| δs即为常数可以省略,通过离散近似,由式(3) 即可得到向量空间 V ⃗ \vec{V} V
(4)转化为泊松方程
  向量空间 V ⃗ \vec{V} V 和指数函数 χ M \chi_M χM满足下式,即为最终需要求解的问题:
Δ χ ⃗ = V ⃗ (4) \Delta \vec{\chi}=\vec{V}\tag{4} Δχ =V (4)
其中如果直接求解 χ ⃗ \vec{\chi} χ 需要求解积分,向量空间 V ⃗ \vec{V} V 不一定是无旋场,通常意义上不能积分,将式(4)两边进行求导运算,得到式(5):
Δ χ ⃗ = Δ ⋅ V ⃗ = Δ ⋅ Δ χ (5) \Delta \vec{\chi}=\Delta\cdot\vec{V}=\Delta\cdot\Delta {\chi}\tag{5} Δχ =ΔV =ΔΔχ(5)
  其中, Δ \Delta Δ为拉普拉斯算子, Δ ⋅ \Delta\cdot Δ为散度算子,上式为泊松方程, χ ⃗ \vec{\chi} χ 是要求解的函数,上式意思是梯度的散度等于向量场的散度。方程的解可以用拉普拉斯方程基本解与函数卷积求出,即可找到指示函数。

3、泊松算法流程

  泊松重建的输入是带有法向量的点云数据,在上一章节中已经完成了对点云数据法向量的求解,算法输出的是三角网格模型,其算法流程如下图所示:
在这里插入图片描述

图3 泊松重建流程

  1. 构建八叉树 g g g,存储点云数据,八叉树节点深度记为D,每一个节点 o ∈ g o∈g og;
  2. 设置函数空间 F F F为: F ( x , y , z ) = ( B ( x ) B ( y ) B ( z ) ) ∗ n F(x, y,z)=(B(x)B(y)B(z))^{*n} F(x,y,z)=(B(x)B(y)B(z))n,其中 ∗ n *n n表示 n n n次卷积,所有的节点 o o o均有对应的空间函数 F F F
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

泊松重建算法原理介绍 的相关文章

随机推荐

  • 长春地铁一号线作业

    长春一号线作业 代码如下 public class 第一次作业 public static void main String args System out println 北环城站 一匡街 胜利公园 解放大路 工农广场 卫星广场 华庆路
  • 卡尔曼及扩展卡尔曼滤波详细推导-来自DR_CAN视频

    卡尔曼及扩展卡尔曼滤波详细推导 来自DR CAN视频 见知乎https zhuanlan zhihu com p 585819291
  • Pytorch权重初始化方法——Kaiming、Xavier

    Pytorch权重初始化方法 Kaiming Xavier 结论 结论写在前 Pytorch线性层采取的默认初始化方式是Kaiming初始化 这是由我国计算机视觉领域专家何恺明提出的 我的探究主要包括 为什么采取Kaiming初始化 考察K
  • window10 设置 cmd 与 PowerShell 格式UTF-8

    win R键 输入 regedit 进入 如果进入不了就去下载 regedit cmd 接下来我们进入对应目录添加对应字符串 好了我们重启vscode运行即可 PowerShell 原CodePage数值数据 更改CodePage数值数据
  • Unity Shader入门精要第七章 基础纹理之遮罩纹理

    Unity系列文章目录 文章目录 Unity系列文章目录 前言 一 实践 参考 前言 遮罩纹理 mask texture 是本章要介绍的最后一种纹理 它非常有用 在很多商业游戏中 都可以见到它的身影 那么什么是遮罩呢 简单来讲 遮罩允许我们
  • WIN10 系统,笔记本电脑显示 “未检测到摄像头”

    笔记本电脑无缘无故不能使用摄像头了 在打开腾讯会议的时候显示 未检测到摄像头 检测设备是否连接 打开设备管理器发现没有 照相机 这个选项 并且在狠心下载360卫士进行系统修复后和驱动检测发现不是驱动的问题之后 摄像头仍然无法使用 在尝试多种
  • 如何使用Minio进行对象存储和数据管理

    Minio是一个开源的对象存储服务器 可用于存储和管理各种类型的数据 包括图像 视频 文档等等 本文将介绍如何安装和配置Minio 使用Minio进行对象存储 以及如何利用Minio的高级功能和解决常见问题 一 简介 1 1 什么是Mini
  • 【Linux 应用】网络相关开发---ip、网关、掩码、dns、mac的获取和设置,以及dhcp动态获取

    最近开始调试Linux 的测试版 需要开发网络设置相关功能 其实这一块以前也做过 但是都忘记了 可见沉淀的重要性 1 ip 掩码设置和获取 通过int ioctl int d int request 这个函数可以获取到 其中 IP设置 SI
  • C语言算法题之二叉树的路径和

    思路 二叉树顾名思义就是一个最多有两个子节点的数据结构 如下图所示 其中像数字7和8 5和6这四个节点都叫做叶子节点 其他的节点都是叫做根节点 路径有 1 2 4 7 路径和为1 2 4 7 14 1 2 4 8 路径和为1 2 4 8 1
  • 算法 - 前缀树

    目录 一 前缀树含义 二 代码实现 一 前缀树实现 方式一 方式二 二 暴力实现 一 前缀树含义 前缀树 把一个 最小 单位的数据看成一个节点到另一个节点的路径 每个节点有两个属性 一个是所有数据经过这个节点的次数pass 一个是这个节点作
  • CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below m...

    CUDA内核错误可能会在其他API调用时异步报告 因此下面的堆栈跟踪可能是不正确的 为了调试 考虑传递CUDA LAUNCH BLOCKING 1 这个错误提示告诉你 你在使用CUDA进行计算的时候可能会出现内核错误 并且这些错误可能在其他
  • CVPR ICCV ECCV 论文列表 // 研究机构 链接

    文章目录 会议 CVPR 一年一次 IEEE Conference on Computer Vision and Pattern Recognition ICCV 两年一次 奇数年 IEEE International Conference
  • 【第38篇】MixConv:混合深度卷积核

    文章目录 摘要 1 简介 2 相关工作 3 MixConv 3 2 MixConv 设计选择 3 3 MobileNets 上的 MixConv 性能 3 4 消融研究 4 MixNet 4 1 架构搜索 4 2 ImageNet 上的 M
  • Linux离线安装 RabbitMQ(RabbitMQ单机安装)

    1 下载erlang和rabbitmq安装包 1 下载Erlang路径 https github com erlang otp releases 2 下载RabbitMQ路径 https github com rabbitmq rabbit
  • SQL查询与修改数据库逻辑文件名,移动数据库存储路径示例

    Author htl258 Tony Date 2010 06 26 21 51 30 Version Microsoft SQL Server 2008 RTM 10 0 1600 22 Intel X86 Jul 9 2008 14 4
  • 万向锁,简单表述,一文看懂

    万向锁问题 看了下百度知乎 居然 很少有说清楚的 想起自己第一次接触的时候 也是一头雾水 特此解释 1 什么是万向锁问题 欧拉角顺序有很多 当中比较常用的 一种 便是用 偏航 俯仰 滚转 yaw pitch roll 三个角度来描述一个旋转
  • Flink_05_状态(个人总结)

    声明 1 本文为我的个人复习总结 并非那种从零基础开始普及知识 内容详细全面 言辞官方的文章 2 由于是个人总结 所以用最精简的话语来写文章 3 若有错误不当之处 请指出 状态 状态就是一块内存 一个变量 如果要访问历史窗口 或批次 的数据
  • 运动规划入门

    原创文章 作者 tloinny 如若转载 请注明出处 古月居 https www guyuehome com 5652 感谢古月老师 古 月给的机会 让笔者有幸成为古月居签约作者 此后笔者将在古月居发布更多Robotic相关的博文 当然我也
  • gcc搜索动态链接库的路径优先级排序

    GCC运行时 Linux动态链接库的搜索路径按优先级排序为 1 编译目标代码时 Wl rpath 指定的动态库搜索路径 当指定多个动态库搜索路径时 路径之间用冒号 分隔 2 环境变量 LD LIBRARY PATH 指定的动态库搜索路径 3
  • 泊松重建算法原理介绍

    目录 1 泊松重建算法 2 泊松重建核心思想及原理 3 泊松算法流程 本文出自CSDN点云侠 原文链接 爬虫自重 把自己当个人 1 泊松重建算法 泊松重建是Kazhdan M在2006年提出的基于八叉树和泊松方程的一种网格三维重建算法 其本