PCL系列——三维重构之贪婪三角投影算法

2023-05-16

博客新址: http://blog.xuezhisd.top
邮箱:xuezhisd@126.com


PCL系列

  • PCL系列——读入PCD格式文件操作
  • PCL系列——将点云数据写入PCD格式文件
  • PCL系列——拼接两个点云
  • PCL系列——从深度图像(RangeImage)中提取NARF关键点
  • PCL系列——如何可视化深度图像
  • PCL系列——如何使用迭代最近点法(ICP)配准
  • PCL系列——如何逐渐地配准一对点云
  • PCL系列——三维重构之泊松重构
  • PCL系列——三维重构之贪婪三角投影算法
  • PCL系列——三维重构之移动立方体算法

说明

通过本教程,我们将会学会:

  • 如果通过贪婪三角投影算法进行三维点云重构。
  • 程序支持两种文件格式:*.pcd*.ply
  • 程序先读取点云文件;然后计算法向量,并将法向量和点云坐标放在一起;接着使用贪婪三角投影算法进行重构,最后显示结果。

操作

  • 在VS2010 中新建一个文件 recon_greedyProjection.cpp,然后将下面的代码复制到文件中。
  • 参照之前的文章,配置项目的属性。设置包含目录和库目录和附加依赖项。
/*
* GreedyProjection是根据点云进行三角化,而 poisson 则是对water-tight的模型进行重建,
* 所以形成了封闭mesh和很多冗余信息,需要对poisson的重建进行修剪才能得到相对正确的模型
*
*/

#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/features/normal_3d.h>
#include <pcl/surface/gp3.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <boost/thread/thread.hpp>
#include <fstream>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>

int main (int argc, char** argv)
{
	// 确定文件格式
	char tmpStr[100];
	strcpy(tmpStr,argv[1]);
	char* pext = strrchr(tmpStr, '.');
	std::string extply("ply");
	std::string extpcd("pcd");
	if(pext){
		*pext='\0';
		pext++;
	}
	std::string ext(pext);
	//如果不支持文件格式,退出程序
	if (!((ext == extply)||(ext == extpcd))){
		std::cout << "文件格式不支持!" << std::endl;
		std::cout << "支持文件格式:*.pcd和*.ply!" << std::endl;
		return(-1);
	}

	//根据文件格式选择输入方式
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>) ; //创建点云对象指针,用于存储输入
	if (ext == extply){
		if (pcl::io::loadPLYFile(argv[1] , *cloud) == -1){
			PCL_ERROR("Could not read ply file!\n") ;
			return -1;
		}
	}
	else{
		if (pcl::io::loadPCDFile(argv[1] , *cloud) == -1){
			PCL_ERROR("Could not read pcd file!\n") ;
			return -1;
		}
	}

  // 估计法向量
  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 (20);
  n.compute (*normals); //计算法线,结果存储在normals中
  //* normals 不能同时包含点的法向量和表面的曲率

  //将点云和法线放到一起
  pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_normals (new pcl::PointCloud<pcl::PointNormal>);
  pcl::concatenateFields (*cloud, *normals, *cloud_with_normals);
  //* cloud_with_normals = cloud + normals
	
  //创建搜索树
  pcl::search::KdTree<pcl::PointNormal>::Ptr tree2 (new pcl::search::KdTree<pcl::PointNormal>);
  tree2->setInputCloud (cloud_with_normals);

  //初始化GreedyProjectionTriangulation对象,并设置参数
  pcl::GreedyProjectionTriangulation<pcl::PointNormal> gp3;
	//创建多变形网格,用于存储结果
  pcl::PolygonMesh triangles;

  //设置GreedyProjectionTriangulation对象的参数
	//第一个参数影响很大
  gp3.setSearchRadius (1.5f); //设置连接点之间的最大距离(最大边长)用于确定k近邻的球半径【默认值 0】
  gp3.setMu (2.5f); //设置最近邻距离的乘子,以得到每个点的最终搜索半径【默认值 0】
  gp3.setMaximumNearestNeighbors (100); //设置搜索的最近邻点的最大数量
  gp3.setMaximumSurfaceAngle(M_PI/4); // 45 degrees(pi)最大平面角
  gp3.setMinimumAngle(M_PI/18); // 10 degrees 每个三角的最小角度
  gp3.setMaximumAngle(2*M_PI/3); // 120 degrees 每个三角的最大角度
  gp3.setNormalConsistency(false); //如果法向量一致,设置为true

  //设置搜索方法和输入点云
  gp3.setInputCloud(cloud_with_normals);
  gp3.setSearchMethod(tree2);

	//执行重构,结果保存在triangles中
  gp3.reconstruct (triangles);
	
	//保存网格图
	pcl::io::savePLYFile("result.ply", triangles);

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

	// 显示结果图
  boost::shared_ptr<pcl::visualization::PCLVisualizer> viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));
  viewer->setBackgroundColor (0, 0, 0); //设置背景
  viewer->addPolygonMesh(triangles,"my"); //设置显示的网格
  viewer->addCoordinateSystem (1.0); //设置坐标系
  viewer->initCameraParameters ();
  while (!viewer->wasStopped ()){
    viewer->spinOnce (100);
    boost::this_thread::sleep (boost::posix_time::microseconds (100000));
  }
	
  return (0);
}

  • 重新生成项目。
  • 到改项目的Debug目录下,按住Shift,同时点击鼠标右键,在当前窗口打开CMD窗口。
  • 在命令行中输入recon_greedyProjection.exe bunny.points.ply,执行程序。得到如下图所示的结果。
    这里写图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PCL系列——三维重构之贪婪三角投影算法 的相关文章

  • 【2020-8-8】ROS软件包自动安装依赖,安装ros_pcl

    最近要把T265部署到无人机平台 xff0c 编译一个软件的时候一直报ros pcl的错误 原因是树莓派安装的ros并不是完整版 xff0c 因为也不需要再树莓派上部署gazebo之类的仿真平台 网上关于安装ros pcl的文章基本上都已经
  • Can‘t Compile project with PCL

    报错 xff1a In file included from usr include vtk vtkAtomicTypes h 18 0 from usr include vtk vtkObjectBase h 46 from usr in
  • PCL- Las文件处理

    前言 在对点云数据处理的时候 xff0c 很多时候激光雷达扫描的文件不一定是 pcd文件 xff0c 这个时候需要进行相关文件处理 xff0c 如Las xff0c laz e57等文件格式 xff0c 本文将介绍las文件的读写 1 引入
  • LINUX下查看点云图————point cloud(.ply .vtk .pcd)

    首先 你要确定点云的格式 pcd vtk 还是 ply 如果是 pcd vtk 那么可以用pcl工具查看 1 安装pcl 官网链接点击打开链接 sudo add apt repository ppa v launchpad jochen s
  • PCL点云库学习笔记(搜索方法)

    PCL点云库学习笔记 搜索方法 一 k d tree 二 八叉树 一 k d tree 我们所有的k d树都是三维空间的 k d树的每个级都使用特定维度拆分所有子级 在树的根部 所有子项都将根据第一维进行拆分 即 如果第一维坐标小于根 则它
  • ubuntu20.04下安装pcl

    pcl点云数据库 用来进行3D信息的获取与处理 和opencv相比较 opencv是用来处理二维信息 他是学术界与工业界针对点云最全的库 且网络上相关的资料很多 以下是pcl的安装步骤以及遇到的问题 提前说明 本人用的是ubuntu20 0
  • 自定义速腾激光雷达点云XYZIRT格式并调用PCL库进行滤波

    目录 一 试验程序源代码 1 1需要包含的头文件 1 2定义点云结构 1 3主函数 1 4 CMake文件 二 学习pcl PCLPointCloud2 Ptr 2 1区别 2 2转换 2 3心得 Windows 10 Ubuntu 20
  • pointCloudsLibrary视频资料

    pointCloudsLibrary视频资料 版权 边缘疯狂试探 https www bilibili com video BV1JV411C7f3 前言 目前pointCloudsLibrary的资料很少 只有官网的文档 下面介绍一个点云
  • VS2019安装Qt插件(附安装失败解决方案)

    方法1 1 进入官网下载 qt vsaddin msvc2019 2 4 3 vsix 然后点击运行 2 点击install安装插件 3 等待安装完成Close 打开VS2019 4 在扩展下面就会出现Qt VS Tools 然后进入Qt
  • 第七周PCL学习--点云配准(七)

    目录 引言 一 点云配准 1 1 定义 1 2 含义 1 3 配准过程 1 4 算法原理 1 5 实验 二 总结 三 参考 引言 随着计算机辅助设计技术的发展 通过实物模型产生数字模型的逆向工程技术 由于它的独特魅力获得了越来越广泛的应用
  • pcl::getTranslationAndEulerAngles精度缺失问题

    pcl getTranslationAndEulerAngles的功能是根据仿射矩阵计算x y z roll pitch yaw 但发现这种计算的rpy有一定的精度问题 于是进行了实验 一个是从一个四元数 根据eulerAngles计算rp
  • 在ubuntu上安装pcl库并配置vscode使用cmake生成可执行文件

    文章目录 在ubuntu上安装pcl库并配置vscode使用cmake生成可执行文件 先列举一下我踩的坑 一 安装vtk7 1 QT5 12 6 VTK7 1 1 二 安装pcl1 9 1 安装依赖库 安装PCL库 三 使用vscode c
  • 将PCD文件转化为PLY格式输出(QT+PCL)

    环境 ubuntu 14 04 Qt 5 2 1 PCL 1 7 剩下的话不多说 直接放代码 pcd2ply pro QT core QT gui TARGET pcd2ply CONFIG console CONFIG app bundl
  • 【PCL】基于法线的差异来分割点云

    基于法线差异来分割点云 1 法向量的计算及可视化 法线又称法向量 因为在三维的点云中 根据一个点的K近邻点或者一个点的radius半径范围内的点拟合一个平面 而垂直这个平面且经过改点的线称之为法向量 法向量是点云点到另一个点的有方向的线段
  • 点云地图PCL转换成为八叉树地图octomap

    TODO 完成离线点云地图到八叉树地图的转换 进一步在线实时完成点云地图到八叉树地图的转换 转载自高翔的博客 SLAM拾萃 1 octomap 我是萌萌哒的分割线 大家好 时隔多年之后 我又开始了博客旅程 经历了很多事情之后呢 我发现自己的
  • PCL中的区域生长分割(region growing segmentation)

    在本博文中 我主要介绍如何在pcl RegionGrowing类中调用区域增长算法 首先注意一点 这里是region growing segmentation 不是color based region growing segmentatio
  • PCL求取三维点云模型每点曲率

    最近在做有关实验需要计算模型曲率 但是网上找了一圈也没找到满意的资料 最后发现PCL库可以很方便的求取模型中每一个点的曲率 但是我们要想将PCL库求得的曲率数据应用到自己的项目中需要将PCL库与我们的项目进行结合 并且在PCL求出曲率后存放
  • PCL1.8.0+VS2013环境配置

    一 PCL环境配置 1 下载PCL 1 8 0 AllInOne msvc2013 win32exe和PCL 1 8 0 AllInOne msvc2013 win32exe pdb然后解压 配置环境变量PATH 下载链接 https pa
  • PCL点云库学习笔记(可视化2)

    PCL点云库学习笔记 可视化 可视化 四 PCLPlotter 五 MFC 开发实例 可视化 四 PCLPlotter 4 1 绘制多项式 PCLPlotter提供了一个非常简单明了的图形绘制界面 可以在库中可视化各种重要的图 从多项式函数
  • PCL调错:(3)error C2589“(“:“::“右边的非法标记

    错误提示 造成该错误的原因是 pcl库中的函数模板max与Visual C 中的全局的宏max冲突 百度了以下看了一共有两种解决方案 第一种不用修改库里边的源代码 设置项目属性 在预定义处理器中添加定义NOMINMAX来禁止使用Visual

随机推荐

  • caffe安装系列——综述

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 说明 网上关于caffe的安装教程非常多 xff0c 但是关于每一步是否操作成功 xff0c 出现了什么样的错误又该如何处理没
  • ls改头换面

    在linux中 xff0c ls命令可以使用颜色来区别不同的文件 路径 权限等等 但是有时候 xff0c ls的颜色配置不是非常合适 例如在黑色的背景下显示蓝色的文字 xff0c 看起来真是费劲啊 要修改颜色配置非常简单 xff0c 可以修
  • caffe安装系列——安装GCC4.7和G++4.7并降级

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 说明 网上关于caffe的安装教程非常多 xff0c 但是关于每一步是否操作成功 xff0c 出现了什么样的错误又该如何处理没
  • caffe安装系列——安装NVIDIA显卡驱动

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 说明 网上关于caffe的安装教程非常多 xff0c 但是关于每一步是否操作成功 xff0c 出现了什么样的错误又该如何处理没
  • caffe安装系列——安装cuda和cudnn

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 说明 网上关于caffe的安装教程非常多 xff0c 但是关于每一步是否操作成功 xff0c 出现了什么样的错误又该如何处理没
  • caffe安装系列——安装Matlab

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 说明 网上关于caffe的安装教程非常多 xff0c 但是关于每一步是否操作成功 xff0c 出现了什么样的错误又该如何处理没
  • caffe安装系列——安装OpenCV

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 说明 网上关于caffe的安装教程非常多 xff0c 但是关于每一步是否操作成功 xff0c 出现了什么样的错误又该如何处理没
  • caffe安装系列——安装python依赖包

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 说明 网上关于caffe的安装教程非常多 xff0c 但是关于每一步是否操作成功 xff0c 出现了什么样的错误又该如何处理没
  • caffe安装系列——安装caffe

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 说明 网上关于caffe的安装教程非常多 xff0c 但是关于每一步是否操作成功 xff0c 出现了什么样的错误又该如何处理没
  • 服务器维护系列——VNC没有反应了怎么办?

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 服务器维护系列 服务器维护系列 VNC没有反应了怎么办 xff1f 问题描述 服务器上存在多个用户 xff0c 大家通过VNC
  • PCL系列——读入PCD格式文件

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • PCL系列——将点云数据写入PCD格式文件

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • awk one lines

    From http www student northpark edu pemente awk awk1line txt HANDY ONE LINERS FOR AWK 22 July 2003 compiled by Eric Peme
  • PCL系列——拼接两个点云

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • PCL系列——从深度图像(RangeImage)中提取NARF关键点

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • PCL系列——如何可视化深度图像

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • PCL系列——如何使用迭代最近点法(ICP)配准

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • PCL系列——如何逐渐地配准一对点云

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • PCL系列——三维重构之泊松重构

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • PCL系列——三维重构之贪婪三角投影算法

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深