【点云surface】无序点云快速三角化

news2024/10/6 8:33:59

1 介绍

GreedyProjectionTriangulation 是一种基于局部二维投影的三维点贪婪三角剖分算法的实现。它假定局部表面光滑,不同点密度区域之间的过渡相对平滑。

GreedyProjectionTriangulation算法的基本思想是通过逐步投影点云数据到一个三角化网格上来进行重建。它首先根据给定的搜索半径找到每个点的最近邻点,然后根据这些最近邻点构建局部三角化表面。接下来,通过迭代地添加新的点并更新三角化表面,最终生成完整的三角化网格模型。

GreedyProjectionTriangulation类提供了一系列参数和方法,用于控制和定制三角化过程。一些重要的参数包括搜索半径、最小和最大角度、法向量平滑度等。此外,它还提供了一些方法来设置输入点云数据、执行重建过程并获取生成的三角化网格。

  1. setSearchRadius(double radius):设置搜索半径。该参数定义了在找到最近邻点时所使用的搜索半径。较大的搜索半径可以包含更多的邻近点,但可能导致模型失真。

  2. setMu(double mu):设置最大边长因子。该参数定义了最大边长与搜索半径之间的比例关系。较小的mu值会导致生成更多的小三角形,而较大的mu值会生成较大的三角形。

  3. setMaximumNearestNeighbors(int num):设置最大最近邻点数目。该参数定义了在搜索半径内要考虑的最大最近邻点数目。增大该值可以提高算法的稳定性,但也会增加计算时间。

  4. setMaximumSurfaceAngle(double angle):设置最大表面角度。该参数定义了三角化表面的最大允许角度。较小的角度值会生成更平滑的表面,而较大的角度值会生成更粗糙的表面。

  5. setMinimumAngle(double angle):设置最小角度。该参数定义了三角形的最小允许角度。较小的角度值可以生成更细致的细节,但也可能导致不稳定的三角形。

  6. setMaximumAngle(double angle):设置最大角度。该参数定义了三角形的最大允许角度。较大的角度值可以生成更平坦的表面,但也可能导致模型的失真。

  7. setNormalConsistency(bool consistent):设置法向量一致性。该参数定义了是否要在计算法向量时考虑法向量的一致性。启用法向量一致性可以提高三角化的质量。

2 处理过程可视化

算法参数仔细调整才有这样的好结果

3 代码

#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/search/kdtree.h>
#include <pcl/features/normal_3d.h>
#include <pcl/surface/gp3.h>

#include <pcl/visualization/pcl_visualizer.h>


int main()
{
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::PCLPointCloud2 cloud_blob;
    pcl::io::loadPCDFile("/home/lrj/work/pointCloudData/bun0.pcd", cloud_blob);
    pcl::fromPCLPointCloud2(cloud_blob, *cloud);


    // Normal estimation*
    pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> ne;
    pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);
    tree->setInputCloud(cloud);
    ne.setInputCloud(cloud);
    ne.setSearchMethod(tree);
    ne.setKSearch(20);
    pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);
    ne.compute(*normals);
    //* normals  contain the point normals + surface curvatures

    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::GreedyProjectionTriangulation<pcl::PointNormal> gp3;
    pcl::PolygonMesh triangles;
    gp3.setSearchRadius(0.1);
    gp3.setMu(2.5);
    gp3.setMaximumNearestNeighbors(100);
    gp3.setMaximumSurfaceAngle(M_PI*1.5);
    gp3.setMinimumAngle(M_PI/180);
    gp3.setMaximumAngle(2*M_PI/3);
    gp3.setNormalConsistency(false);
    gp3.setInputCloud(cloud_with_normals);
    gp3.setSearchMethod(tree2);
    gp3.reconstruct(triangles);

    std::vector<int> parts = gp3.getPartIDs();
    std::vector<int> states = gp3.getPointStates();

    pcl::visualization::PCLVisualizer vis("cloud visualization");
    vis.addCoordinateSystem(0.1);
    vis.addPolygonMesh(triangles);

    while(!vis.wasStopped())
    {
        vis.spinOnce();
    }

}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1247898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pycharm创建项目新环境,安装Pytorch

在python项目中&#xff0c;很多项目使用的各类包的版本是不一致的。所以我们可以对每个项目有专属于它的环境。所以这个文章就是教你如何创建新环境。 一、创建新环境 二、下载安装包 在下载安装包时&#xff0c;可以加入清华源&#xff0c;这样下载更快&#xff01;不然有时…

消息推送到微信,快速实现WxPusher

文章目录 前言一、平台二、代码总结 前言 我的博客里也有其他方法&#xff0c;测试了下感觉这个方法还是比较实用。 一、平台 先仔细阅读下平台的使用方法。 平台地址请点击 二、代码 import requests text 孪生网络模型已经训练完成&#xff0c;请注意查阅相关信息。 req…

学习Pandas 二(Pandas缺失值处理、数据离散化、合并、交叉表与透视表、分组与聚合)

文章目录 六、高级处理-缺失值处理6.1 检查是否有缺失值6.2 缺失值处理6.3 不是缺失值NaN&#xff0c;有默认标记的 七、高级处理-数据离散化7.1 什么是数据的离散化7.2 为什么要离散化7.3 如何实现数据的离散化 八、高级处理-合并8.1 pc.concat实现合并&#xff0c;按方向进行…

Linux文件基础(文件查看及vim)

文件查看命令: (1)cat 1)查看文件内容(内容较少时使用):cat 文件名 2)合并文件:cat 文件名1 文件名2> 文件名3 3)往文件中写入数据,(Ctrld结束输入); (2)more more 文件名 文件内容较多时用more(空格,回车往下翻,b回滚) (3)less less 文件名 看完内容之后不会显示…

最重要的BI测试-适用于任何BI和分析平台

为什么 BI 测试是答案 相信你的数据可视化是成功执行商业智能 (BI) 和分析项目的关键因素。我敢肯定&#xff0c;你遇到过以下情况&#xff1a;业务主管或业务用户反馈说他们的分析看起来不对&#xff0c;他们的 KPI 看起来有问题&#xff0c;或者速度太慢而无法使用。要问自己…

【Spring篇】JDK动态代理

目录 什么是代理&#xff1f; 代理模式 动态代理 Java中常用的代理模式 问题来了&#xff0c;如何动态生成代理类&#xff1f; 动态代理底层实现 什么是代理&#xff1f; 顾名思义&#xff0c;代替某个对象去处理一些问题&#xff0c;谓之代理&#xff0c;那么何为动态&a…

项目环境配置 本地/测试/预发/生产

在本地目录下新建文件 dev测试环境 development 本地开发环境 production 生产环境 uat预发布环境 .env.dev VUE_APP_API_PATH /api # 测试 VUE_APP_API_PATH http:// # 生成dist名称 VUE_APP_DIST dist_dev .env.development # 本地开发环境 VUE_APP_API_PATH…

pat实现基于邻接矩阵表示的深度优先遍历

void DFS(Graph G, int v) {visited[v] 1;printf("%c ", G.vexs[v]);for (int i 0; i < G.vexnum; i) {if (!visited[i] && G.arcs[v][i]) DFS(G, i);} }

qPCR(荧光定量PCR)的Ct值

今天我们要说的问题&#xff0c;也是对qPCR的更高阶的认识。 1、Ct值到底是不是YYDS&#xff1f; 2、Ct值跟哪些因素有关&#xff1f; 3、同样的模板&#xff0c;Ct值大试剂盒就差吗&#xff1f;要不要换试剂盒&#xff1f; 还是从这个盗版来的图说起。你必须明白以下几个概…

政务大数据与资源平台建设解决方案:PPT全文75页,附下载

关键词&#xff1a;智慧政务解决方案&#xff0c;大数据解决方案&#xff0c;数据中心解决方案&#xff0c;数据治理解决方案 一、政务大数据与资源平台建设背景 1、政务大数据已成为智慧城市建设的必要基础 为响应国家不断加快5G基建、大数据、人工智能等新型基础设施建设布…

HTML CSS登录网页设计

一、效果图: 二、HTML代码: <!DOCTYPE html> <!-- 定义HTML5文档 --> <html lang="en"> …

开源语音大语言模型来了!阿里基于Qwen-Chat提出Qwen-Audio!

论文链接&#xff1a;https://arxiv.org/pdf/2311.07919.pdf 开源代码&#xff1a;https://github.com/QwenLM/Qwen-Audio 引言 大型语言模型&#xff08;LLMs&#xff09;由于其良好的知识保留能力、复杂的推理和解决问题能力&#xff0c;在通用人工智能&#xff08;AGI&am…

MySQL与Redis如何保证数据的一致性

文章目录 MySQL与Redis如何保证数据的一致性&#xff1f;不好的方案1. 先写 MySQL&#xff0c;再写 Redis2. 先写 Redis&#xff0c;再写 MySQL3. 先删除 Redis&#xff0c;再写 MySQL 好的方案4. 先删除 Redis&#xff0c;再写 MySQL&#xff0c;再删除 Redis5. 先写 MySQL&am…

生产环境出现问题,测试人如何做工作复盘?

很多时候我们能把大部分的Bug或一些部署等问题在业务上线之前就解决了&#xff0c;但由于某些因素&#xff0c;线上问题还是时而出现&#xff0c;影响业务生产甚至是公司效益。 避免线上问题的发生以及线上问题及时处理是测试人员的一项重要职责&#xff0c;如何快速地处理&am…

0001Java程序设计-springboot基于微信小程序批发零售业商品管理系统

文章目录 **摘 要****目录**系统实现开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅&#x1f427;裙&#xff1a;776871563 摘 要 本毕业设计的内容是设计并且实现一个基于微信小程序批发零售业商品管理系统。它是在Windows下&#xff0c;以MYSQL为数据库开发平台…

Postman接口测试 —— Jenkins实现持续集成构建流程!

一、从Postman导出集合和环境变量等Json文件 将设计好的接口测试用例集合&#xff0c;局部变量&#xff0c;环境变量&#xff0c;参数文件等都放在PostmanTest目录下 二、打开Jenkins&#xff0c;创建测试项目Postman 已安装Jenkins&#xff0c;安装方法自行百度&#xff0c;Je…

PyQt6第一个程序HelloWorld实现

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计12条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

unittest指南——不拼花哨,只拼实用

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

BGP联邦及路由反射器配置

需求 1 AS1存在两个环回&#xff0c;一个地址为192.168.1.0/24&#xff0c;该地址不能再任何协议中宣告 AS3存在两个环回&#xff0c;一个地址为192.168.2.0/24&#xff0c;该地址不能再任何协议中宣告 AS1还有一个环回地址为10.1.1.0/24&#xff0c;AS3另一个环回地址是11.1.1…

树形 DP:树的直径

leetCode 104.二叉树的最大深度104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int maxDepth(TreeNode* root) {if(root nullptr) return 0;int lDepth maxDepth(root->left);int rDepth maxDepth(root->right);return max(l…