Point Cloud Library(PCL开源库)学习一

这篇具有很好参考价值的文章主要介绍了Point Cloud Library(PCL开源库)学习一。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、PCL库简介(包含下载与配置方法)

        点云库(PCL)是一个开源算法库,用于点云处理任务和3D几何处理。该库包含用于点云滤波、特征点估计、表面重建、3D配准、模型拟合、对象识别、分割和可视化的算法。PCL库有自己存储点云的数据格式——PCD,但也允许以部分其它格式加载和保存数据集。PCL库是基于C++编写的,并在BSD许可下发布[1]。


        (一)C++版本PCL库下载与配置

        PCL库C++下载与配置方法详见参考资料[4]。

        (二)Python版本PCL库下载与配置

        PCL库anaconda+pycharm+windows下载与配置方法见参考资料[5][6]。其中,值得注意的是在Pycharm添加解释器时,Conda可执行文件为如下:

Point Cloud Library(PCL开源库)学习一

        在完成Python3.6版本的Anaconda虚拟环境配置与对应版本PCL库的安装后,在命令框内(Command)通过pip install laspy下载laspy外部库以配合PCL库读入和处理LAS格式点云数据,注意将对应库文件复制到虚拟环境的site-packages文件夹下(或直接在CMD.exe Prompt中激活虚拟环境直接pip install)。

        PCL库python下载与配置方法详见参考资料[5][6][7]。

        若python-pcl库配置仍存在问题,换种思路,在不影响项目工程要求的情况下换用pclpy库包。

Point Cloud Library(PCL开源库)学习一


          常用的点云数据处理工具补充:CloudCompare、Geomagic Studio、LAStools、matlab 、ENVI LiDAR等。

二、点云数据格式介绍(LAS格式文件、PCD格式文件为主)

         常见点云文件格式[12]:

LASLAZ(LiDAR数据的工业标准格式,属于二进制文件格式)

PCD(PCL库官方指定格式)

OBJ(是由Alias|Wavefront Technologies公司从几何学上定义的3D模型文件格式,属于文本文件)

PCAP(Velodyne公司出品的激光雷达默认采集数据的二进制文件格式)

PLY(斯坦福大学的Turk等人设计开发的多边形文件格式,斯坦福三角格式有文本和二进制两种)[5]

PTS(简便点云格式,属于文本格式,只包含点坐标信息,按XYZ顺序存储)

XYZTXT(文本格式)


(一)LAS格式文件

        LAS文件按每条扫描线排列方式存放数据,大致包括激光点的三维坐标、多次回波信息、强度信息、扫描角度、分类信息、飞行航带信息、飞行姿态信息、项目信息、GPS信息、数据点颜色信息等,LAS格式定义中用到的数据类型遵循1999年ANSI(美国国家标准化协会)C语言标准。LAS文件主要由Header、VLRS(变长记录,Variable Length Record)、Point Records三部分组成,LAZ是LAS格式的无损压缩版本。

        LAS文件格式详解见[12][13][19], 基于LAStools工具查看数据信息示例:

Point Cloud Library(PCL开源库)学习一                                       Point Cloud Library(PCL开源库)学习一

 图一  LAS点云原始数据(带地物标签)                                  图二 对应的光学影像

Point Cloud Library(PCL开源库)学习一                 Point Cloud Library(PCL开源库)学习一图三 LAS格式文件数据信息

(二)PCD格式文件

        PCD文件以ASCII字符编码,文件格式头(File Format Header)说明文件中存储的点云数据的格式,每个格式声明及点云数据之间用换行符(\n)隔开。PCD文件格式详解见[15]。

        基于记事本查看数据信息示例:

        通过代码格式转换的方式,我们可以控制我们想要的输出数据存储编码类型,而CloudCompare存储输出PCD格式的Data编码类型为Binary(二进制)。

Point Cloud Library(PCL开源库)学习一                  Point Cloud Library(PCL开源库)学习一

图四   代码转的PCD格式文件数据信息            图五 CloudCompare软件转的PCD格式文件数据信息

三、点云数据格式转换(LAS转PCD,基于Python)

import laspy
import numpy as np
from pclpy import pcl

filePath = r"G:\LiDAR\DATA\copy.las"
las = laspy.read(filePath)
point_format = las.point_format
# 查看点云数据类型信息
print("点云数据信息维名称")
print(list(point_format.dimension_names))
# intensity = las.intensity
# print(max(las.intensity))
# 通过max(las.intensity)==0,已知该las数据未存储有效的回波强度信息
x, y, z = np.float32(las.X), np.float32(las.Y), np.float32(las.Z)
# 构造二维矩阵(行代表各点,列代表点的X、Y、Z),若数据回波强度有效修改点云构造类即可,例如PointXYZI
Pmatrix = np.vstack((x,y,z)).transpose()
cloud = pcl.PointCloud.PointXYZ.from_array(Pmatrix)
pcl.io.savePCDFileASCII(r"G:\LiDAR\DATA\las2pcd.pcd",cloud)

       :利用CloudCompare软件也可以进行多种点云数据文件格式之间的转换,将数据导入后以所需格式保存即可。

四、点云数据的C++显示与python显示

(一)基于pcl.visualization模块点云显示

from pclpy import pcl

filePath = r"G:\LiDAR\DATA\las2pcd.pcd"
# 加载点云数据
cloud = pcl.PointCloud.PointXYZ()
reader = pcl.io.PCDReader()
reader.read(filePath,cloud)
# 可视化点云数据
viewer = pcl.visualization.CloudViewer("viewer")
viewer.showCloud(cloud,"sample cloud")
while not viewer.wasStopped(10):
    pass

Point Cloud Library(PCL开源库)学习一

(二)基于C++的PCL库点云显示

       ① 在调试运行项目时,dll文件缺失解决方法可查看参考资料[22]。

        ②对于生成解决方案时产生Error:4996,可以选择通过如下方法解决:

        解决方案资源管理器 ->右击项目文件名 ->属性->C/C++ ->高级->禁用特定警告->确定。

Point Cloud Library(PCL开源库)学习一


         在具体调试测试时,我发现利用pclpy来显示上述代码转换格式数据CloudCompare转换数据均可以成功显示运行;但是在VS 2019上基于PCL库来显示代码转换格式数据就无法成功,会跳到PCL.exe面板卡住(此问题并未解决,还需要进一步学习)。


# include<iostream>
# include<pcl/visualization/cloud_viewer.h>
# include<pcl/io/io.h>
# include<pcl/io/pcd_io.h>
# include<pcl/io/ply_io.h>
# include<pcl/point_types.h>
# include<cstdlib>
# include <vtkAutoInit.h>


using namespace std;
using namespace pcl;
using namespace pcl::io;

int user_data;

void viewerOneOff(pcl::visualization::PCLVisualizer& viewer)
{
	//设置背景颜色
	viewer.setBackgroundColor(1.0, 0.5, 1.0);
	//添加圆球几何对象
	pcl::PointXYZ o;
	o.x = 1.0;
	o.y = 0;
	o.z = 0;
	viewer.addSphere(o, 0.25, "sphere", 0);
}

void viewerPsycho(pcl::visualization::PCLVisualizer& viewer)
{
	static unsigned count = 0;
	std::stringstream ss;
	ss << "Once per viewer loop:" << count++;
	viewer.removeShape("text", 0);
	viewer.addText(ss.str(), 200, 300, "text", 0);
	user_data++;
}

int main()
{
	// 创建点云渲染对象,导入待渲染文件
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::io::loadPCDFile("G:\\LiDAR\\DATA\\copy - Cloud.pcd",*cloud);
	// 创建点云渲染句柄
	pcl::visualization::CloudViewer viewer("Cloud Viewer");
	viewer.showCloud(cloud);
	//以下代码均为高级复杂操作代码,此处仅依据参考尝试调试查看(若需具体尝试可向其中添加相应代码)
	//该注册函数在可视化的时候只执行一次
	viewer.runOnVisualizationThreadOnce(viewerOneOff);
	//该注册函数在渲染输出时每次都调用
	viewer.runOnVisualizationThread(viewerPsycho);
	while (!viewer.wasStopped())
	{
		user_data++;
	}
	return 0;
}

Point Cloud Library(PCL开源库)学习一

五、Anaconda虚拟环境管理配置小Tips

        在面对实际项目时,我们通常会遇到需要在不同项目使用不同的python编程环境,如果同时安装多个python环境就可能造成许多混乱和错误。这时利用Anaconda的虚拟环境机制就可以方便安装不同的python版本,在不同的项目中使用不同的运行环境(因为某些项目涉及不同包版本的匹配等问题,如python-PCL库包需要对应支持的版本等),从而方便来回切换运行环境。

        若在具体实践项目时,我们的库包及模块出现报错“未能被找到”,可以利用Denpendency Walker工具检查模块及库包的依赖关系,查找缺少的动态链接库(DLL,Dynamic Link Library),从而具体分析具体解决。

        若下载库包时由于网络问题造成下载速度较慢或下载超时,我们可以采用基于镜像网页的下载方式去下载库包,格式:pip install 安装包名 -i 镜像网页。

        具体操作见参考资料[17][19]。

参考资料:

[1] https://en.wikipedia.org/wiki/Point_Cloud_Library(wiki)

[2]Introduction — Point Cloud Library 0.0 documentation(PCL库使用指南)

[3]Point Cloud Library | The Point Cloud Library (PCL) is a standalone, large scale, open project for 2D/3D image and point cloud processing.(PCL官网)

[4]win10系统下 VS2019点云库PCL1.12.0的安装与配置_苦瓜王子的博客-CSDN博客_pcl库下载

[5]【python3.6】python安装PCL(适用命令行或pycham中)_米码收割机的博客-CSDN博客_python pcl

[6](详细安装python_pcl) python_pcl+windows+anaconda_没李不邢的博客-CSDN博客_python3.7 pcl

[7](详细PCL安装)PCL+python+windows+anaconda环境_没李不邢的博客-CSDN博客_anaconda配置pcl

[8]Large Geometric Models Archive(几何模型文件库)

[9]Point Cloud Library (PCL): Modules(PCL模块函数库)

[10]PCL(Point Cloud Library)学习记录(2022) · 语雀(PCL大佬的自建网站)

[11]PCL(Point Cloud Library)学习入门指南&代码实践(最新版)_哔哩哔哩_bilibili

[12]点云Las文件是什么?_程序媛一枚~的博客-CSDN博客_las文件

[13]点云数据格式说明_scott198510的博客-CSDN博客_点云数据格式

[14]Python,C++中点云 .las转.pcd_程序媛一枚~的博客-CSDN博客

[15]PCD文件格式(记录) - 哔哩哔哩

PCL——(3)PCD(点云数据)文件格式简介 - 一抹烟霞 - 博客园

[16]数据来源:美国休斯顿大学高光谱实验室(采集时间:2017年)

[17][转]使用Dependency Walker工具查看DLL文件_mahui85的博客-CSDN博客_查看dll(查找库包之间的依赖关系,用于针对module报错)

[18]ImportError:DLL load failed:找不到指定的模块 - CodeAntenna

[19]pyCharm下配置Anaconda虚拟环境_IT大佬啊的博客-CSDN博客_pycharm anaconda虚拟环境

[20]API Documentation — laspy 2.3.0 documentation

[21]https://github.com/maguangyan/pclpy_tutorial(pclpy大佬教程)

[22]vs2017+vtk由于找不到**.dll,无法执行代码。重新安装程序可能会解决此问题。_CHENxiaoni_的博客-CSDN博客

国内的优质镜像网页

[1](清华镜像) https://pypi.tuna.tsinghua.edu.cn/simple/

[2](豆瓣镜像)http://pypi.doubanio.com/simple/    (http)使用时需加入网页信任:--trusted-host pypi.doubanio.com

[3](阿里镜像)http://mirrors.aliyun.com/pypi/simple/

[4](中国科学技术大学镜像)https://pypi.mirrors.ustc.edu.cn/simple/文章来源地址https://www.toymoban.com/news/detail-415632.html

到了这里,关于Point Cloud Library(PCL开源库)学习一的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 3D点云(3D point cloud)及PointNet、PointNet++

    https://www.youtube.com/watch?v=Ew24Rac8eYE 传统图像数据是2维的 3D点云是3维的,可以表达更多信息 比如对化工厂进行违章识别、安全隐患的识别 城市管理 点云分割 点云补全 点云生成 点云物体检测(3D物体检测) 点云配准(后续任务的基础) 一般点云数据都是基于激光雷达扫描生

    2024年02月02日
    浏览(38)
  • Spring Cloud学习笔记:Eureka简介,Eureka简单样例

    这是本人学习的总结,主要学习资料如下 - 马士兵教育 Eureka 是 SpringCloud Nexflix 的核心子模块,其中包含 Server 和 Client 。 Server 提供服务注册,存储所有可用服务节点。 Client 用于简化和 Server 的通讯复杂度。 下面是 Eureka 的简单架构图 每一个服务节点需要在 Eureka Server 中注册

    2024年04月16日
    浏览(50)
  • Divide and Conquer: 3D Point Cloud Instance Segmentation With Point-Wise Binarization

    点云上的实例分割对于三维场景理解至关重要。大多数最先进的方法采用距离聚类,这通常是有效的,但在对具有相同语义标签的相邻对象进行分割时表现不佳(特别是当它们共享相邻点时)。由于偏移点分布不均匀,这些现有方法几乎无法聚类所有实例点。为此,我们设计

    2024年02月20日
    浏览(38)
  • 论文阅读:PointCLIP: Point Cloud Understanding by CLIP

     CVPR2022 链接:https://arxiv.org/pdf/2112.02413.pdf         最近,通过对比视觉语言预训练(CLIP)的零镜头学习和少镜头学习在2D视觉识别方面表现出了鼓舞人心的表现,即学习在开放词汇设置下将图像与相应的文本匹配。然而,在二维大规模图像文本对的预训练下,CLIP识别能否推

    2024年02月04日
    浏览(64)
  • 【大数据】Hadoop-3.3.4完全分布式安装(包含VMware16和Ubuntu22的下载安装及配置)、搭建、配置教程,以及Hadoop基础简介

    注:本篇文章主要涉及到: HDFS (分布式文件系统)、 YARN (资源管理和调度框架)、以及 MapReduce (离线计算)。 以下就是本篇文章所采用的的架构 。 (1)HDFS架构简述 HDFS架构图 注:上述的master、slave1、slave2均是主机名(结点名),可以和本篇文章不一致,但下面所有涉

    2023年04月17日
    浏览(98)
  • PointMixer: MLP-Mixer for Point Cloud Understanding

    MLP-Mixer 最近崭露头角,成为对抗CNNs和Transformer领域的新挑战者。尽管相比Transformer更为简单,但通道混合MLPs和令牌混合MLPs的概念在图像识别任务中取得了显著的性能。与图像不同,点云本质上是稀疏、无序和不规则的,这限制了直接将MLP-Mixer用于点云理解。为了克服这些限

    2024年01月17日
    浏览(34)
  • 论文阅读:Offboard 3D Object Detection from Point Cloud Sequences

    目录 概要 Motivation 整体架构流程 技术细节 3D Auto Labeling Pipeline The static object auto labeling model The dynamic object auto labeling model 小结 论文地址: [2103.05073] Offboard 3D Object Detection from Point Cloud Sequences (arxiv.org)     该论文提出了一种利用点云序列数据进行离线三维物体检测的方法,称

    2024年02月06日
    浏览(45)
  • 【PCL自学:目录】PCL简介及主要功能模块介绍 (持续更新)

    当你知道一切都不重要时,世界就是你的了。 ——《瑞克和莫蒂》S3E8   对于从事计算机视觉、机器视觉领域的从业者来说,OpenCV库并不陌生,甚至是我们入门这个领域时的学习的第一个开源库,如果说OpenCV是二维信息处理方面的工兵铲,那PCL(Point Cloud Library)就是在三维

    2024年02月06日
    浏览(47)
  • 60 个深度学习教程:包含论文、实现和注释 | 开源日报 No.202

    Stars: 44.0k License: MIT annotated_deep_learning_paper_implementations 是一个包含深度学习论文的 60 个实现/教程,附带并排注释;包括 transformers(原始、xl、switch、feedback、vit 等)、优化器(adam, adabelief, sophia 等)、gans(cyclegan, stylegan2 等) ,强化学习 (ppo, dqn), capsnet 和 distillation 等。 包含

    2024年04月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包