基于python的点云处理库总结

news2024/11/24 3:56:12

想对于PCL,python处理点云的库还是比较多的,下面对此进行简单的总结:

一、Open3D

A Modern Library for 3D Data Processing,Intel出品,MIT协议。

Open3D是一个支持3D数据处理软件快速开发的开源库。Open3D使用C++和Python公开了一组精心选择的数据结构和算法。后端经过高度优化,并设置为并行化。Open3D的依赖项较少,可在不同的平台上编译与布置。

Open3D侧重于三维数据的可视化与整体处理算法。想学习的同学可百度“Open3D学习计划”。

官网:http://www.open3d.org/

GitHub:https://github.com/intel-isl/Open3D

安装:pip install open3d 或者 pip3 install -i Simple Index open3d

import open3d as o3d
import numpy as np
fromm atplotlib import pyplot as plt
# read PC
pcd = o3d.io.read_point_cloud("F:/test.pcd")
# # write PC
# o3d.io.write_point_cloud("F:/newFile.pcd",pcd)
# DBSCAN
with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Debug) as cm:
    labels = np.array(pcd.cluster_dbscan(eps=0.1, min_points=10, print_progress=True))
    max_label = labels.max()
    print(f"point cloud has{max_label +1}clusters")
    colors = plt.get_cmap("tab20")(labels / (max_labelifmax_label >0else1))
    colors[labels <0] =0
    pcd.colors = o3d.utility.Vector3dVector(colors[:, :3])
    # 可视化
    o3d.visualization.draw_geometries([pcd],width=910,height=540)

二、PyVista

3D plotting and mesh analysis through a streamlined interface for the Visualization Toolkit (VTK),MIT协议。

PyVista具有可视化工具包(VTK)的高级API,空间数据集的网格数据结构和过滤方法,使3D绘图变得简单,可用于大型/复杂数据几何.

PyVista(以前称为vtki)是可视化工具包(VTK)的帮助程序模块,它通过NumPy和直接数组访问采用了与VTK接口不同的方法。该软件包提供了Pythonic的,文档齐全的界面,该界面公开了VTK强大的可视化后端,以促进对空间参考数据集的快速原型制作,分析和可视化集成。该模块可用于演示文稿和研究论文的科学绘图,以及其他与网格相关的Python模块的支持模块。

PyVista侧重于可视化。

官网:https://www.pyvista.org/

介绍:https://docs.pyvista.org/

GitHub:https://github.com/pyvista/pyvista

安装:pip install pyvista 或者 pip3 install -i Simple Index pyvista

import pyvista as pv 
mesh = pv.read('F:/test.vtk') 
mesh.plot(screenshot='F:/test.vtk.png')

三、PCL

PCL(Point Cloud Library)是主要用于点云(二三维图像也可)的独立、强大的开源项目,BSD协议,可免费用于商业和研究用途。

PCL是点云数据处理的王者库,近乎全能,可视化、读写、算法(!!!)。

官网:https://pointclouds.org/

GitHub:https://github.com/PointCloudLibrary

但是,python-pcl安装较为麻烦!!!建议谷歌或百度。

四、pclpy

pclpy是python-pcl的姊妹库吧,安装很方便,算法接口啥的也挺全的,而且,支持las。同时存在某些限制,比如正在开发中,API和功能测试也许会不稳定,只支持Windows和python 3.6 x64。

介绍:https://pypi.org/project/pclpy/

GitHub:https://github.com/davidcaron/pclpy

安装:pip install pclpy 或者 pip3 install -i Simple Index pclpy

import pclpy
from pclpy import pcl
# 读
pc=pclpy.pcl.PointCloud.PointXYZRGBA()
pcl.io.loadPCDFile('F:/test.pcd',pc)
# 显示
viewer=pcl.visualization.PCLVisualizer('Point Cloud viewer')
viewer.addPointCloud(pc)
while(notviewer.wasStopped()):
    viewer.spinOnce(100)

五、pyntcloud

pyntcloud是一个Python 3.x库,利用Python科学堆栈的强大功能处理3D点云。

pyntcloud侧重于点云数据处理,例如读写(支持las)、属性、滤波、数据结构组织、构建体素、抽稀、RANSAC等。与Open3D、PyVista等库衔接较好。

介绍:https://readthedocs.org/projects/pyntcloud/

GitHub:https://github.com/daavoo/pyntcloud

安装:pip install pyntcloud 或者 pip3 install -i Simple Index pyntcloud

from pyntcloud import PyntCloud
import open3d as o3d
# io
cloud = PyntCloud.from_file("F:/test.ply")
# structures
kdtree_id = cloud.add_structure("kdtree")
# neighbors
k_neighbors = cloud.get_neighbors(k=5, kdtree=kdtree_id)
# scalar_fields
ev = cloud.add_scalar_field("eigen_values", k_neighbors=k_neighbors)
# filters
f = cloud.get_filter("BBOX", min_x=0.1, max_x=0.8)
# FROM Open3D
original_triangle_mesh = o3d.io.read_triangle_mesh("F:/test.ply")
cloud = PyntCloud.from_instance("open3d", original_triangle_mesh)
# TO Open3D
cloud = PyntCloud.from_file("F:/test.ply")
converted_triangle_mesh = cloud.to_instance("open3d", mesh=True)# mesh=True by default

六、libLAS

libLAS是一个C/C++/Python库(接触的第一个点云处理库),用于读写LAS格式的点云。libLAS支持ASPRS LAS格式规范版本:1.0、1.1、1.2和1.3(基本支持)。虽然libLAS已经被 PDAL / Laspy 取代,但不可否认,它是一个很nice的库。

libLAS库侧重于点云的读写、修改编辑处理。

介绍:https://liblas.org/

API:https://liblas.org/python.html

GitHub:https://github.com/libLAS

安装:pip install liblas  或者  pip install -i Simple Index liblas

import liblas
from liblas import file
from liblas import header
# 读
f=file.File('F:/test.las',mode='r')
# 头文件
lasHeader = f.header
print('主版本号:'+ str(lasHeader.major_version))
print('副版本号:'+ str(lasHeader.minor_version))
print('最小值:%f,%f,%f'% (lasHeader.min[0],lasHeader.min[1],lasHeader.min[2]))
print('最大值:%f,%f,%f'% (lasHeader.max[0],lasHeader.max[1],lasHeader.max[2]))
print('比例:%f,%f,%f'% (lasHeader.scale[0],lasHeader.scale[1],lasHeader.scale[2]))
print('偏移量:%f,%f,%f'% (lasHeader.offset[0],lasHeader.offset[1],lasHeader.offset[2]))
print('点云数量:%d'% (lasHeader.point_records_count))
# 遍历点
for point in f:
    # point = f[0]
    print('x=%f, y=%f, z=%f, intensity=%d, PointsourceID=%d, GPStime=%f,
                Red=%d, Green=%d, Blue=%d, Classification=%d, UserData=%d'
              % (point.x, point.y, point.z,
                 point.intensity, point.point_source_id, point.raw_time,
                 point.color.red, point.color.green, point.color.blue,
                 point.classification, point.user_data))
# 写
las_header = header.Header()
las_header.dataformat_id =1
las_header.minor_version =2
fw = file.File('F:/new.las', mode='w', header=las_header)
pt = liblas.point.Point()
for i in range(10):
    pt.x =118.0+i
    pt.y =532.0+i
    pt.z =112.0+i
    fw.write(pt)
    fw.close()
print('ok666')

七、PDAL

libLAS的升级版。PDAL(Point Data Abstraction Library)是一个C/C ++开源库,用于转换和处理点云数据。尽管库中许多重点工具源于LiDAR,但它不限于LiDAR数据。

介绍:https://pdal.io/

API:https://liblas.org/python.html

GitHub:https://github.com/PDAL

安装:pip install PDAL(没成功,郁闷)

八、Laspy

兼容 libLAS 的点云处理python库,与 libLAS算是一家吧。Laspy是一个用于读取、修改和创建LAS LiDAR文件的python库。对LAZ的支持仅限于1.0-1.3版本。Laspy与Python 2.6+和3.5+兼容。Laspy包含一组命令行工具,可用于执行基本文件操作,例如格式转换和验证以及比较LAS文件。

API:https://pythonhosted.org/laspy/

GitHub:https://github.com/grantbrown/laspy

安装:pip install laspy 或者 pip3 install -i Simple Index laspy

import numpy as np
import laspy
from laspy.file import File
# 读
f = File('F:/test.las', mode='r')
# 头
lasHeader = f.header
print('主版本号:'+ str(lasHeader.major_version))
print('副版本号:'+ str(lasHeader.minor_version))
print('最小值:%f,%f,%f'% (lasHeader.min[0],lasHeader.min[1],lasHeader.min[2]))
print('最大值:%f,%f,%f'% (lasHeader.max[0],lasHeader.max[1],lasHeader.max[2]))
print('比例:%f,%f,%f'% (lasHeader.scale[0],lasHeader.scale[1],lasHeader.scale[2]))
print('偏移量:%f,%f,%f'% (lasHeader.offset[0],lasHeader.offset[1],lasHeader.offset[2]))
print('点云数量:%d'% (lasHeader.point_records_count))
# 遍历点
points = f.points
def scaled_x_dimension(las_file):
    x_dimension = las_file.X
    scale = las_file.header.scale[0]
    offset = las_file.header.offset[0]
    return(x_dimension*scale + offset)
    for i in range(66,666):
        print('x=%f, y=%f, z=%f, intensity=%d, GPStime=%f, Classification=%d, UserData=%d,
        Red=%d, Green=%d, Blue=%d'
        % (scaled_x_dimension(f)[i], f.y[i],f.z[i],
        f.intensity[i], f.gps_time[i],f.classification[i],f.user_data[i],
        f.red[i],f.green[i], f.blue[i]))
# 筛选路面点
c11 = f.Classification ==11
# 保存路面点为新文件
outFile = File('F:/output.las', mode='w', header=f.header)
outFile.points = f.points[c11]
outFile.close()
print("ok")

九、plyfile

plyfile用于读写ply文件。

GitHub:https://github.com/dranjan/python-plyfile

安装:pip install plyfile 或者 pip3 install -i Simple Index plyfile

十、point_cloud_utils

Point Cloud Utils (pcu) - A Python library for common tasks on 3D point clouds

挺实用。

GitHub:https://github.com/fwilliams/point-cloud-utils

安装:pip install git+git://github.com/fwilliams/point-cloud-utils

十一、pptk

pptk(Point Processing Toolkit)是用于可视化和处理二三维点云的python包。目前,其具有以下功能:

(1)点云查看,可接受任何3列numpy数组作为输入;

(2)基于Octree的LOD点云渲染可视化;

(3)支持点选,用于检查和注释点数据;

(4)并行化的点KD-tree;

(5)基于点云邻域PCA的法线估计。

介绍:https://heremaps.github.io/pptk/index.html

GitHub:https://github.com/heremaps/pptk

安装:pip install pptk 或者 pip3 install -i Simple Index pptk

分享给有需要的人,代码质量勿喷。

# Create 100 random points xyz = pptk.rand(200,3) # Visualize points shaded by height v = pptk.viewer(xyz, xyz[:,2]) v.set(point_size=0.005)

十二、PyLidar

PyLidar用于从LiDAR设备中获取数据。其分为PyLidar2和PyLidar3,分别对应python2和python3版本。

介绍:http://www.pylidar.org/en/latest/index.html

GitHub:https://github.com/lakshmanmallidi/PyLidar3

安装:pip install PyLidar3

/* ************************************** 以下的已经不维护或者很久没更新了 ********************************************** */

十三、pylas

This code is no longer maintained.

Originally designed as a proof-of-concept for reading Light Detection and Ranging (LIDAR) data in binary LAS format and converting to GIS point data formats (xyz or shapefile). Today, there are much better tools for using LIDAR in python code - this repo is for archival purposes only.

GitHub:https://github.com/perrygeo/pylas

十四、las

The las module implements a reader for LAS (Log ASCII Standard) well log files (LAS 2.0). For more information about this format, see the Canadian Well Logging Society web page (http://www.cwls.org/las/).

GitHub:https://github.com/WarrenWeckesser/las

十五、pypcd

安装(直接安装如果出现“No module named 'cStringIO'”错误,推荐使用如下方式安装)

pip3 install --upgrade git+https://github.com/klintan/pypcd.git

具体使用示例

from pypcd import pypcd

cloud = pypcd.PointCloud.from_path(pcd_path)
new_cloud_data_xyz = cloud.pc_data.view(np.float32).reshape(cloud.pc_data.shape + (-1,))  ##需要注意的是这里np.float32和np.int32数据类型不同,结果会有很大差异
new_cloud_data_x=cloud.pc_data["x"]  ##这样取单个维度数据

参考链接:https://www.jianshu.com/p/c4e065a33da5

        以上就是基于python常见库对于点云的操作,对于常见的pointxyz等数据结构,都基本满足使用,但是对于自定义的一些数据结构open3d就不一定满足了,这里就推荐使用pypcd了.

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

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

相关文章

CSS - 垂直菜单(鼠标移入时显示右侧容器)

效果图 示例源码 <body><section class="content"><ul class=

OpenVINO 2022.3之四:OpenVINO模型转换

OpenVINO 2022.3之四&#xff1a;OpenVINO模型转换 OpenVINO 2022.3 支持的模型格式: OpenVINO IR&#xff08;中间表示&#xff09; - OpenVINO™的专有格式&#xff0c;可以完全利用其全部功能。 ONNX和PaddlePaddle - 直接支持的格式&#xff0c;这意味着它们可以在OpenVI…

DT7遥控DBUS协议解析

文章目录 运行环境&#xff1a;1.1 DBUS协议解析1)DT7遥控2)配置串口引脚3)配置串口接收DMA 2.1例程代码移植1)例程移动到 Inc 和 Src2)makefile添加.c文件 3.1核心代码解释4.1代码修改1)bsp_rc.c 和 remote_control.c2)调用代码 5.1调试1)硬件接线2)串口工具监视拨杆数据 运行…

【C进阶】-- 字符串函数(1)

目录 0. 前言 1. 函数介绍 1.1 strlen 1.1.1主动改变\0的位置 ✅"strlen函数的返回类型是size_t - 无符号整型"✅ 当使用strlen函数但不引用头文件时&#xff0c;执行结果超出预料: 求字符串长度的方法&#x1f4a5; 1.计数器 2.递归 3.指针 - 指针 1.2 st…

HBase安装下载与集群(高可用)

一、准备 1.1 安装zookeeper zookeeper 安装下载与集群 1.2 安装HADOOP hadoop搭建集群搭建 1.3下载HBase https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/ 二、正常部署 2.1 检查是否正常启动 2.2解压 tar -zvxf hbase-2.4.11-bin.tar.gz2.3配置环境变量 vim /…

高效的工作团队都在使用什么工具?

、 移动互联网时代&#xff0c;企业需要开源节流&#xff0c;需要提高员工整体工作效率。尤其对于互联网公司来说&#xff0c;要快速发展业务&#xff0c;更需要让团队工作简单、方便、高效。然而大多公司都面临以下低效阻碍&#xff1a;跨公司、跨部门沟通合作困难。不同部门和…

2、Flutter布局和状态管理

一、Flutter布局之Row&Column 1.1 Container的center属性: 让子控件在父控件的中间显示 Container(color: Colors.yellow,//1.Center让子部件在父控件中间child: Center(child: Text(Layout Center)),); 1.2 alignment让子控件相对父控件位置,取值范围在-1&#xff5e;1…

Mysql索引(1):索引概述

1 介绍 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&#xff0c; 这样就可以在这些数据结构上…

【半监督学习】Match系列.1

半监督学习(SSL) 半监督学习(SSL). 让学习器不依赖外界交互、自动地利用未标记样本来提升学习性能. 即在少量样本标签的引导下, 能够充分利用大量无标签样本提高学习性能, 避免了数据资源的浪费, 同时解决了有标签样本较少时监督学习方法泛化能力不强和缺少样本标签引导时无监…

YoloV8涨点神器:CFPNet-ECVBlock的小目标检测,即插即用,助力检测涨点

1.Centralized Feature Pyramid for Object Detection 论文地址: https://arxiv.org/abs/2210.02093 1.摘要: CFPNet简介 CFPNet即插即用,助力检测涨点,YOLOX/YOLOv5/YOLOV7均有效 1.3 Centralized Feature Pyramid (CFP) 如图2所示,CFP主要由以下部分组成:输入图像、…

<IBM AIX><ERRPT><No.001>《出现E86653C3、49183216、8003764C告警的处理 20230506》

《出现E86653C3、49183216、8003764C告警的处理 20230506》 1 现象2 分析3 结论4 引申 1 现象 服务器出现errpt告警&#xff0c;告警为E86653C3、49183216、8003764C。 2 分析 1、hdisk1对应的VG&#xff0c;为rootvg。 lspv |grep hdisk12、查看VG状态 lsvg rootvg说明…

聊聊压电材料高温介电温谱仪所知道的那些事(GWJDN-600A)

GWJDN-600A型压电材料高温介电温谱仪 关键词&#xff1a;单通道&#xff0c;双通道&#xff0c;四通道&#xff0c;高低温 GWJDN-600A压电材料高温介电温谱仪本高频介电温谱系统主要用于绝缘材料在不同温度不同频率下的电学性能测试&#xff0c;系统包含高温炉膛&#xff0c;阻…

【云原生】k8s集群部署Rook+Ceph云原生存储

文章目录 一、Rook介绍二、Ceph介绍三、部署Rook和Ceph3.1 前置准备3.2 部署Rook3.3 部署Ceph集群3.4 部署ceph dashboard 四、部署Rook工具箱五、部署RBD StorageClass 一、Rook介绍 Rook 官网地址&#xff1a;https://rook.io 是一个自管理的分布式存储编排系统&#xff0c;…

c++基础学习Num04

目录 基于for循环 一维数组 二维数组理解 c语言的null和c的null 基于for循环 for(ELEMTYPE val:array){}ELEMTYPE:是范围变量的类型。通常使用auto自动转换范围变量类型 val:范围变量的名称。通过迭代依次接收数组中的元素值 array:容器&#xff0c;注意这里的array必须是…

ctfshow 每周大挑战 RCE极限挑战 2

目录 题目解题步骤1.跑一下正则2.变量自增3.最终解题payload 一点多余的思考 题目 解题步骤 1.跑一下正则 本着能懒就懒的原则&#xff0c;就不写Python了&#xff08;提一下这个主要是我一开始想的是写Python呜呜呜&#xff09;&#xff0c;直接写php&#xff0c;还能复制粘…

C生万物 | 指针入门到进阶就看这篇了【十万字吐血整理,收藏学习】

文章篇幅较长&#xff0c;可前往电脑端进行学习&#x1f4bb; 之前很多粉丝私信我说C语言指针怎么这么难&#xff0c;看了很多视频都学不懂&#xff0c;于是我写了一篇有关指针从入门到进阶的教学&#xff0c;帮助那些对指针很困扰的同学有一个好的学习途径&#xff0c;下面是本…

基于JavaWeb实现的学生宿舍管理系统

【简介】 本系统是基于Java实现的学生宿舍管理系统&#xff0c;前端&#xff1a;Vue&#xff1b;后端&#xff1a;SpringBoot Mybatis Redis Mysql&#xff1b;系统环境&#xff1a;jdk1.8 | mysql | redis | nodejs14。有包含登录在内的十大功能模块&#xff0c;三个访问角…

详解事务模式和 Lua 脚本,带你吃透 Redis 事务

先说结论&#xff1a; Redis 的事务模式具备如下特点&#xff1a; 保证隔离性&#xff1b;无法保证持久性&#xff1b;具备了一定的原子性&#xff0c;但不支持回滚&#xff1b;一致性的概念有分歧&#xff0c;假设在一致性的核心是约束的语意下&#xff0c;Redis 的事务可以…

Vuex从了解到实际运用(一)彻底搞懂什么是Vuex

vuex从了解到实际运用——彻底搞懂什么是vuex 知识回调&#xff08;不懂就看这儿&#xff01;&#xff09;场景复现核心干货什么是vuex全局状态管理使用状态管理工具后的好处vuex的实现原理vuex的组件通信1.多级组件通信2.同级组件通信使用vuex进行组件通信 关于vuex的小结 知识…

总结842

学习目标&#xff1a; 5月&#xff08;张宇强化18讲&#xff0c;背诵25篇短文&#xff0c;熟词僻义300词基础词&#xff09; 每日必复习&#xff08;5分钟&#xff09; 学习内容&#xff1a; 暴力英语:背200个基础词阅读理解前两段语法 高等数学&#xff1a;强化课第一讲 小…