泊松曲面重建(基于PCL)

2023-11-13

Possion重建是Kazhdan等2006年提出的网格重建方法。Possion重建的输入是点云及其法向量,输出是三维网格。

表面重建流程:

1、构建八叉树:采用的是自适应的空间网格划分的方法(根据点云的密度调整网格的深度),根据采样点集的位置定义八叉树,然后细分八叉树使每个采样点都落在深度为D的叶节点;

2、设置函数空间:对八叉树的每个节点设置空间函数 F,所有节点函数 F 的线性和可以表示向量场 V,基函数F采用了盒滤波的n维卷积;

3、创建向量场:均匀采样的情况下,假设划分的块是常量,通过向量场 V 逼近指示函数的梯度。采用三次条样插值(三线插值);

4、求解泊松方程:方程的解采用拉普拉斯矩阵迭代求出;

5、提取等值面:为得到重构表面,需要选择阈值获得等值面;先估计采样点的位置,然后用其平均值进行等值面提取,然后用 Marching Cubes(移动立方体)算法得到等值面。

pcl::PolygonMesh bossion_surface(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud,PlaneParameter P,int Searchh)
{
    //-------------法线估计---------------------------
    pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;//法线估计对象
    pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);//存储估计的法线
    pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);
    tree->setInputCloud(cloud);
    n.setInputCloud(cloud);
    n.setSearchMethod(tree);
    n.setKSearch(Search);
    n.compute(*normals);
    for (int i = 0; i < normals->size(); i++) {
        if (normals->points[i].normal_x*P.A + normals->points[i].normal_y*P.B + normals->points[i].normal_z*P.C < 0) {
            normals->points[i].normal_x *= -1.0;
            normals->points[i].normal_y *= -1.0;
            normals->points[i].normal_z *= -1.0;
        }
    }
    //------------连接法线和坐标-----------------------
    pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_normals(new pcl::PointCloud<pcl::PointNormal>);
    pcl::concatenateFields(*cloud, *normals, *cloud_with_normals);
    //------------泊松重建-----------------------------
    pcl::search::KdTree<pcl::PointNormal>::Ptr tree2(new pcl::search::KdTree<pcl::PointNormal>);
    tree2->setInputCloud(cloud_with_normals);
    //pcl::io::savePCDFileASCII("C:/Users/12875/Desktop/数据/point_cloud_volume/normals.pcd", *cloud_with_normals);
    pcl::Poisson<pcl::PointNormal> pn;
    pn.setSearchMethod(tree2);
    pn.setDegree(2);//设置参数degree[1,5],值越大越精细,耗时越久。
    pn.setInputCloud(cloud_with_normals);
    pn.setDepth(6);//设置将用于表面重建的树的最大深度
    pn.setMinDepth(2);
    pn.setScale(1.0);//设置用于重建的立方体的直径与样本的边界立方体直径的比值
    
    pn.setIsoDivide(3);//设置块等表面提取器用于提取等表面的深度
    pn.setSamplesPerNode(3.0); //设置落入一个八叉树结点中的样本点的最小数量。无噪声,[1.0-5.0],有噪声[15.-20.]平滑
    //pn.setSamplesPerNode(12);//设置每个八叉树节点上最少采样点数目
    //pn.setSolverDivide(3);//设置块高斯-塞德尔求解器用于求解拉普拉斯方程的深度。
    pn.setSolverDivide(8); //设置求解线性方程组的Gauss-Seidel迭代方法的深度
    pn.setConfidence(false);//设置置信标志,为true时,使用法线向量长度作为置信度信息,false则需要对法线进行归一化处理
    pn.setManifold(false);//设置流行标志,如果设置为true,则对多边形进行细分三角话时添加重心,设置false则不添加
    pn.setOutputPolygons(false);//设置是否输出为多边形(而不是三角化行进立方体的结果)。

    //----------------保存重建结果---------------------
    pcl::PolygonMesh mesh;
    pn.performReconstruction(mesh);
//    pcl::io::savePLYFile(file_surface, mesh);
    return mesh;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

泊松曲面重建(基于PCL) 的相关文章

  • C++ 维护子类对象的混合集合

    如果我在这里错过了一个相当基本的概念 我很抱歉 但我正在尝试弄清楚如何维护多个类类型的集合 所有类类型都派生自同一个父类 并且在检索它们时仍然可以访问它们的特定于子类的方法从集合中 作为上下文 我有一个基类 BaseClass 和许多类 例
  • 适合初学者的良好调试器教程[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道一个好的初学者教程 在 C 中使用调试器 我感觉自己好像错过了很多 我知道怎么做 单步执行代码并查看局部变量 虽然这常常给我带来问
  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • 代码 GetAsyncKeyState(VK_SHIFT) & 0x8000 中的这些数字是什么?它们是必不可少的吗?

    我试图在按下按键的简单动作中找到这些数字及其含义的任何逻辑解释 GetAsyncKeyState VK SHIFT 0x8000 可以使用哪些其他值来代替0x8000它们与按键有什么关系 GetAsyncKeyState 根据文档返回 如果
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 使用 LINQ to SQL 时避免连接超时的最佳实践

    我需要知道在 net 应用程序中使用 LINQ to SQL 时避免连接超时的最佳实践 特别是在返回时IQueryable
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • 堆栈是向上增长还是向下增长?

    我在 C 中有这段代码 int q 10 int s 5 int a 3 printf Address of a d n int a printf Address of a 1 d n int a 1 printf Address of a
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp
  • 如何将十六进制字符串转换为无符号长整型?

    我有以下十六进制值 CString str str T FFF000 如何将其转换为unsigned long 您可以使用strtol作用于常规 C 字符串的函数 它使用指定的基数将字符串转换为 long long l strtol str
  • OpenCV SIFT 描述符关键点半径

    我正在深入研究OpenCV的SIFT描述符提取的实现 https github com Itseez opencv blob master modules nonfree src sift cpp 我发现了一些令人费解的代码来获取兴趣点邻域

随机推荐

  • Java连接超时

    java net SocketTimeoutException connect timed out 通常表示无法建立到远程服务器的连接 可能是由于网络问题或目标服务器不可用导致的 这种情况下 可以尝试以下几种解决方法 检查网络连接 可以检查
  • Express基本使用(Node.js)(1)

    Express基本使用 Node js Express是基于node js内置http模块二次开发的中间件 可以提高程序员的开发效率 01 使用express发送get和post请求 导入express模块 const express re
  • 自定义控件玩套路以及canvas StaticLayout的使用

    遇到自定义控件的时候很苦恼 不知道从哪里下手 鄙人也是新手 记录下开发的思路 我们有时候需要把某一个功能封装成控件 很简单 写好布局 将其inflate出来 必要的属性 就跟普通的activity一样定义即可 context直接调用getC
  • ShuffleNet V1、V2 & EfficientNet & 迁移学习

    一 ShuffleNet V1 ShuffleNet Unit中全是GConv和DWConv 在左侧的网络结构中 对于输入特征矩阵 有串行的GConv1和GConv2 对于普通的组卷积的计算 只针对该组内的channel的信息进行计算 组卷
  • HDU - 1827 Summer Holiday(强连通分量+贪心)

    题目大意 To see a World in a Grain of Sand And a Heaven in a Wild Flower Hold Infinity in the palm of your hand And Eternity
  • 分布式限流之 - Nginx层限流

    写在前面的话 高并发的三驾马车 缓存 降级 限流 这里仅仅说限流 常用的限流算法有 计数器算法 固定窗口算法 滑动窗口算法 漏桶算法 令牌桶算法 每种算法的特点和优缺点这里不展开 比较适用的限流算法基本都会选择令牌桶 并且这里基于Sprin
  • 《Perl语言入门》读书笔记(五)输入与输出

    1 读取标准输入 使用
  • Android Data Binding

    请注明链接 https blog csdn net feather wch article details 79789597 Data Binding 1 DataBinding引入 android compileSdkVersion 23
  • 自动备份脚本linux下,Linux七牛云自动备份脚本

    1 下载七牛云自动备份脚本 目录如下 image png 进入此目录 执行命令 python setup py install 需要python2 7以上 安装完毕 目录如下 image png 2 编写配置文件 备份名称 用于标记 BAC
  • 基于Qt实现分块下载网络文件

    实际开发经常遇到下载网络文件的需求 对于一些比较大的网络文件 如果通过网络接口一次性读取数据后再写入文件 会占用较大的内存 比较好的做法是 先通过QNetworkRequest ContentLengthHeader获取文件的大小 然后设定
  • LED摩托车灯升降压恒流芯片OC4000电路原理图

    LED摩托车灯升降压恒流芯片OC4000是一种可以将不稳定的直流电压转化为稳定的直流电压的电子元件 特别适合用于需要大电流 高电压的LED灯具中 它是一种高精度 高效率的降压型LED恒流驱动控制芯片 可以将电压降至适合LED灯珠的安全范围
  • 综合交易平台API技术开发指南

    综合交易平台API技术开发指南 草稿 第一章 CTP 产品特性 2 第二章 CTP API 技术基础 4 第三章 CTP API 证券交易
  • APP自动化-- 03 adb简介

    文章目录 1 ADB简介 2 adb命令 3 参考资料 4 monkey 1 ADB简介 adb组成 adb adb exe 运行于PC端 包括Linux Windows Mac OS等系统之中 通常是x86架构上 下文中 ADB指整个模块
  • js之匿名函数详解

    1 函数的声明与函数表达式区别 1 1 函数的声明 如下方法 add 就是函数声明的代码结构 function add x y alert x y add 1 2 弹窗显示 3 关于函数声明 它最重要的一个特征就是函数声明提升 意思是执行代
  • 【项目总结】基于SSM+SpringBoot+Redis的个人博客系统项目总结

    文章目录 项目介绍 开发背景 数据库设计 主要使用到的技术点 前端 后端 自定义统一返回对象 自定义拦截器 加盐加密操作 分页功能 session持久化 自定义头像的存储和获取 项目编写过程中遇到的困难点 困难点一 小 困难点二 小 困难点
  • javascript取Date时间的前一天和后一天

    在页面里直接用js Date curDate new Date var preDate new Date curDate getTime 24 60 60 1000 前一天var nextDate new Date curDate getT
  • Python 入门

    python输出 python输出hello world print hello world 变量 print 12 34 print 12 34 2 print 12 34 2 3 a 12 34 b a 2 c b 3 print a
  • 网络安全期末整理

    什么网络安全 网络安全是指网络系统的硬件 软件及其系统中的数据受到保护 不因偶然的或者恶意的原因而遭到破坏 更改或泄露 系统连续 可靠 正常地运行 网络服务不中断 网络安全的特征 保密性 完整性 可用性 可控性 面对威胁网络安全的安全措施
  • 关于深度图像

    深度图像 深度图像 depth image 也被称为距离影像 range image 是指将从图像采集器到场景中各点的距离 深度 作为像素值的图像 它直接反映了景物可见表面的几何形状 深度图像经过坐标转换可以计算为点云数据 有规则及必要信息
  • 泊松曲面重建(基于PCL)

    Possion重建是Kazhdan等2006年提出的网格重建方法 Possion重建的输入是点云及其法向量 输出是三维网格 表面重建流程 1 构建八叉树 采用的是自适应的空间网格划分的方法 根据点云的密度调整网格的深度 根据采样点集的位置定