『Open3D』安装与点云格式通识

这篇具有很好参考价值的文章主要介绍了『Open3D』安装与点云格式通识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

专栏地址:https://blog.csdn.net/qq_41366026/category_12186023.html

Open3D安装测试

        Open3D(以下简称o3d)同时支持Python和C++接口,本部分为Python篇;C++部分将在后续更新。o3d的python接口放弃了大部分重型C++中的框架包括Boost、Ceres,转而使用了pybind11代替Boost。Python和内建高斯牛顿、列温伯格-马夸尔特等最优化方法;因此所有模块的源代码均随o3d一起分发。

        o3d在python中的安装:

  1. 可以直接使用pip安装稳定版本

  2. 或自行git官方代码库进行wheel包构建(待更新)

这里直接pip安装即可,但注意最好安装在conda等虚拟环境中。

        o3d的python包当前支持python3.7-3.10,支持ubuntu18.04、macOS10.15+、Windows 10 (64-bit),如果是其他的操作系统或其他的python版本可以使用第二种方法自行构建对应的wheel包。

1、pip安装open3d (pip version>=20.3否则先pip install -U pip>=20.3 ):

pip install open3d

非虚拟环境的pip安装需要指定--user选项,以避免权限问题

pip install --user open3d

安装后可以用以下命令进行验证:

# Verify installation
python -c "import open3d as o3d; print(o3d.__version__)"

# Python API
python -c "import open3d as o3d; \
           mesh = o3d.geometry.TriangleMesh.create_sphere(); \
           mesh.compute_vertex_normals(); \
           o3d.visualization.draw(mesh, raw_mode=True)"

# Open3D CLI
open3d example visualization/draw

测试中导入Open3D如果出错的话,请打开警告来帮助Debug

python -W default -c "import open3d as o3d"

2、自行构建wheel包并安装

使用-DBUILD_CUDA_MODULE=ON,编译带有cuda支持的open3d

git clone https://github.com/isl-org/Open3D

conda activate your-env-name

cd Open3D
mkdir build
cd build
cmake -DBUILD_CUDA_MODULE=ON -DDEVELOPER_BUILD=OFF ..
cmake --build . --config Release --parallel $env:NUMBER_OF_PROCESSORS --target install-pip-package

python -c 'import open3d as o3d; print(o3d.core.cuda.is_available())

o3d在C++中的安装与使用:

                待更新


点云格式通识

常见的可以表示点云文件有如下几种

  1. .las,.laz(LiDAR数据的工业标准格式,是一种二进制文件格式)
  2. .pcd(PCL库官方指定格式)
  3. .obj(是由Alias|Wavefront Techonologies公司从几何学上定义的3D模型文件格式,是一种文本文件)
  4. .pcap(现在流行的Velodyne公司出品的激光雷达默认采集数据的二进制文件格式)
  5. .ply(一种由斯坦福大学的Turk等人设计开发的多边形文件格式,因而也被成为斯坦福三角格式。文件格式有文本和二进制两种格式)
  6. .pts(被称之为最简便的点云格式,属于文本格式。只包含点坐标信息,按X Y Z顺序存储)
  7. .xyz,.txt(一种文本格式)
  8. LAS是点云文件的一种,LAS文件是根据几种规格打包的二进制文件,LAS文件只要是俩部分:点云规格、点云点数据
  9. STL是3D Systems创建的立体光刻CAD软件的原生文件格式
  10. X3D用于表示3D计算机图形数据的基于ISO标准XML的文件格式
  11. .bin二进制化后的点云数据,提升IO速度

         open3d中的点云格式:

Format

Description

xyz

每一行包含 [x, y, z]三哪个数值, xyz 是三维坐标

xyzn

每一行包含 [x, y, z, nx, ny, nz], 其中 nxnynz 是该方向上的法向量

xyzrgb

每一行包含 [x, y, z, r, g, b], rgb代表该点颜色数值表达位[0, 1]之间的浮点数

pts

第一行是一个整数,表示点的个数,之后的每一行可以是下列格式之一:[x, y, z, i, r, g, b], [x, y, z, r, g, b], [x, y, z, i] or [x, y, z],其中x,y,z和i是double类型,r,g,b是uint8类型。

ply

 Polygon File Format, ply文件可以同时包含点云数据和mesh数据

pcd

 Point Cloud Data

pcd文件格式介绍:

        在PCL库1.0版本到来之前,PCD文件已经经历过多个版本的发展,比如(PCD_V5, PCD_V6, PCD_V7,等等)(应用在PCL中,当前Open3D与pcd格式数据存在兼容问题,但可以进行修改使其配对):

当前PCL官方主要以PCD_V7(0.7)版本为标准。

例:一个标准的PCD_V7文件格式片段如下

# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 213
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 213
DATA ascii
0.93773 0.33763 0 4.2108e+06
0.90805 0.35641 0 4.2108e+06
0.81915 0.32 0 4.2108e+06
0.97192 0.278 0 4.2108e+06
0.944 0.29474 0 4.2108e+06
...
...
...
0.98111 0.24247 0 4.2108e+06
0.93655 0.26143 0 4.2108e+06
0.91631 0.27442 0 4.2108e+06
0.81921 0.29315 0 4.2108e+06
0.90701 0.24109 0 4.2108e+06
0.83239 0.23398 0 4.2108e+06

文件格式解析:

        PCD文件头部包含了这份存储点云的格式信息,且pcd的头部信息必须以ASCII进行编码,但数据内容可以是二进制编码或ASCII编码

        在 PCD 文件中指定的每个标题条目以及 ascii 点数据(见下文)都使用新行 (\n) 分隔。

从 0.7 版开始,PCD 标头包含以下条目:

  • VERSION -指定 当前文件使用的PCD 版本
  • FIELDS - 指定点可以具有的每个维度/字段的名称。 例子:

                FIELDS x y z                                # XYZ 数据
                FIELDS x y z rgb                            # XYZ + 颜色数据
                FIELDS x y z normal_x normal_y normal_z     # XYZ + 表面法线数据
                FIELDS j1 j2 j3                             # XYZ + 不变矩(moment invariants)
                ...

  • SIZE -以字节为单位指定每个维度的大小。 例子:
    • unsigned char/char 大小为 1 byte
    • unsigned short/short 大小为 2 bytes
    • unsigned int/int/float 大小为 4 bytes
    • double 大小为 8 bytes
  • TYPE -将每个维度的类型指定为 char。 当前接受的类型是:
    • I - 表示有符号类型 int8 (char)、int16 (short) 和 int32 (int)
    • U -代表无符号类型 uint8 (unsigned char), uint16 (unsigned short), uint32 (unsigned int)
    • F - 表示浮点类型
  • COUNT - 指定每个维度有多少个元素。 例如,x 数据通常有 1 个元素,但像 VFH 这样的特征描述符有 308 个元素。基本上这是一种在每个点引入 n-D 直方图描述符并将它们视为单个连续内存块的方法。 默认情况下,如果 COUNT 不存在,则所有维度的计数都设置为 1。
  • PCL中的WIDTH和HEIGHT
    • WIDTH - 以点数指定点云数据集的宽度。 WIDTH 有两个含义:
      • 它可以为无序的数据集指定云中的总点数(当Height为1的时候)
      • 它可以指定有序的点云数据集的宽度(一行中的总点数)
    • HEIGHT - 以点数指定点云数据集的高度。 高度有两个含义:
      • 它可以指定有组织的点云数据集的高度(行总数)
      • 对于无序的数据集,它设置为1(因此用于检查点云数据是否有序)

        注:有序的点云数据的组织类是与图像的矩阵结构,有固定的宽高,数据的索引可以根据行列来进行,这种数据主要来自于立体相机或RGBD相机;有序的点云数据因为直接直接获取相邻点之间的关系,所以最近邻操作可以更加的高效,加速PCL某些特定算法的运算速度,降低计算开销。

Example:

1、设定点云的宽为640,高位480,因此该份点云数据最大有640*480=307200这么多个点(最大的原因是,RGBD得到的某些位置数据不可靠为空,所以有效点数少于最大点数)
WIDTH 640       
HEIGHT 480      

2、设定点云的高为1,宽度为307200,从高度信息可知该份点云文件为无序点云,高度*宽度得到这份点云中一共有307200个点
WIDTH 307200
HEIGHT 1        
  • VIEWPOINT - 指定数据集中点的采集视点。 这可能会在以后用于构建不同坐标系之间的转换,或用于辅助表面法线等需要一致方向的特征。

    视点信息被指定为平移(tx ty tz)+ 四元数(qw qx qy qz)。 默认值为:

    VIEWPOINT 0 0 0 1 0 0 0
  • POINTS -指定云中的总点数。 从 0.7 版开始,它的用途有点多余,因此我们希望在未来的版本中将其删除。

    Example:

    POINTS 213   # the total number of points in the cloud
  • DATA - 指定存储点云数据的数据类型。从 0.7 版开始,支持三种数据类型:ascii、binary 和 binary_compressed。 有关详细信息,请参阅下一节。

pcd格式规定,上述的条目必须以给出的顺序进行指定。

在DATA之后的下一字节就属于正式的点云数据,并会被解释为点云数据的一部分

点云数据存储类型:

在pcd v0.7的版本使用了三种不同的模式存储数据

1、 ASCII形式,每一个点的数据都会在新的一行

point_1
point_2
point_3
point_4
...
point_n

注意:从 PCL 版本 1.0.1 开始,NaN 的字符串表示为“nan”。

2、二进制形式(binary form),其中数据是 pcl::PointCloud.points array/vector的完整内存副本。 在 Linux 系统上,我们使用 mmap/munmap 操作以尽可能快地读取/写入数据。

3、以二进制压缩形式(binary_compressed form)。 正文(标头信息之后的所有内容)以 32 位无符号二进制数开头,指定压缩形式数据的大小(以字节为单位)。 接下来是另一个 32 位无符号二进制数,它指定未压缩形式的数据的大小(以字节为单位)。 然后是压缩数据。 压缩和解压缩是使用 Marc Lehmann 的 LZF 算法完成的。 在压缩率方面一般,但压缩速度非常快。 对于典型的点云,压缩数据具有原始大小的 30% 到 60%。 在压缩之前,数据被重新排序以改进压缩,从标准的结构数组布局(array-of-structures layout)到数组结构布局(structure-of-arrays layout)。 因此,例如具有三个点和其对应的三项数据 x、y、z 的云将从 xyzxyzxyz 重新排序为 xxxyyyzzz。

        以简单的 ascii 格式存储点云数据,每个点在一行上,使用空格或制表符进行分隔,上面没有任何其他字符,但同时以二进制格式进行转储,可是根据地层的应用程序得到便捷性和速度的提升。 ascii 格式的pcd文件允许用户打开点云文件并使用 gnuplot 等标准软件工具绘制它们,或使用 sed、awk 等工具对其进行操作。
 

PCD与其他文件格式相比的优势:

        PCD相对于上诉的其他文件格式都有更好的灵活性和速度。 其优点包括:

  • 存储和处理有组织的点云数据集的能力——这对于实时应用和增强现实、机器人等研究领域极为重要;
  • 二进制 mmap/munmap 数据类型是将数据加载和保存到磁盘的最快方式。
  • 存储不同的数据类型(支持的所有原语:char、short、int、float、double)允许点云数据在存储和处理方面灵活高效。 无效的点尺寸通常存储为 NAN 类型。
  • 特征描述符的 n-D 直方图——对于 3D 感知/计算机视觉应用非常重要

注意:

        虽然 PCD(点云数据)是 PCL 中的原生文件格式,但 pcl_io 库同时也提供上述部分其他文件格式的数据保存和读取。
 


ply文件格式介绍:

        PLY全称Polygon File Forma(多边形文件格式),是斯坦福大学开发的一套三维mesh模型数据格式。PLY文件有两种形式,ASCII:用于轻松启动,(binary format)二进制格式:用于紧凑存储和快速保存和加载。

        ply文件格式描述的是vertices(顶点), faces(面片) and other elements(其他元素包括但不限于颜色、曲面法线、纹理坐标、透明度、range data cofidence以及多边形前后的不同属性信息)的集合,同时还可以包含每个元素对应的法向量方向和颜色信息,一个ply文件包含一个物体的描述信息。

例:一个标准的ply文件格式的头部定义规则如下

  Header
  Vertex List
  Face List
  (lists of other elements)

例:一个标准的ply文件格式片段如下

ply
format ascii 1.0           { ascii/binary, format version number }
comment made by Greg Turk  { comments keyword specified, like all lines }
comment this file is a cube
element vertex 8           { define "vertex" element, 8 of them in file }
property float x           { vertex contains float "x" coordinate }
property float y           { y coordinate is also a vertex property }
property float z           { z coordinate, too }
element face 6             { there are 6 "face" elements in the file }
property list uchar int vertex_index { "vertex_indices" is a list of ints }
end_header                 { delimits the end of the header }
0 0 0                      { start of vertex list }
0 0 1
0 1 1
0 1 0
1 0 0
1 0 1
1 1 1
1 1 0
4 0 1 2 3                  { start of face list }
4 7 6 5 4
4 0 4 5 1
4 1 5 6 2
4 2 6 7 3
4 3 7 4 0

        其中对于顶点的定义坐标是x,y,z,对于faces(面片)的描述由顶点列表中的索引描述;其中vertex和faces都属于ply定义中的elements(元素),因此对应上面的那句红字组成的话。因此在使用中可以轻松的根据这个性质来添加自己的属性到文件中,且不会影响原来的文件信息。同时,在被程序读取或使用中,只有程序可以解释的元素会被加载,无法被程序解释的元素信息则会被丢弃,因此各位在自己的应用程序中可以高效的使用ply文件的这个特性。

文件结构解析: 

 『Open3D』安装与点云格式通识

         文件头部信息定义了点云文件的内容,每一行以回车结尾;头部信息中包含了对每个元素类型的描述,包括元素的名称(比如:边、面、点)、该元素在的数量、和关联到该元素上的属性或结构信息。同时头文件定义了点云数据是以ASCII格式还是二进制格式进行的数据存储。定义完元素信息后,使用property定义该元素对应的属性。

         以上面的片段信息为例,该片段是一个以ASCII定义的立方体模型,其中{}号内为注释信息,可以将所有{}删除后保存在txt文件后,将该文件改名为.ply文件,使用meshlab打开可以查看到该模型。

注:ubuntu中可以直接使用以下命令安装meshlab

sudo apt install meshlab

『Open3D』安装与点云格式通识

 注:#号后为注释信息

#所有的ply文件都必须以ply开头
ply
#format 定义了该份ply文件的编码方式,ascii使用binary_little_endian编码,
binary使用binary_big_endian编码,1.0为版本号
format ascii 1.0
#comment 定义了ply格式中的注释信息
comment made by Greg Turk
comment this file is a cube
#element 创建了一个名为vertex的元素信息,数量为8个
element vertex 8
#property 定义了vertex中的一个属性,float类型,名称分别为x,y,z
property float x
property float y
property float z
#使用element创建了一个新的元素信息,名称为face,数量为6个
element face 6
#property list 定义一个名为vertex_index的列表,其数据类型为int
#uchar表示每一行列表中包含多少个数据
property list uchar int vertex_index
# 所有的ply头文件定义以end_header结尾,之后的数据为正式的模型数据
end_header
0 0 0   #一个顶点数据
0 0 1
0 1 1
0 1 0
1 0 0
1 0 1
1 1 1
1 1 0
4 0 1 2 3   # face数据,4为后面列表数据的长度;列表中的每个数代表的是顶点的索引构成一个面
4 7 6 5 4
4 0 4 5 1
4 1 5 6 2
4 2 6 7 3
4 3 7 4 0

NOTE:face列表中的三角面生成按照TRIANGLE FAN的方式进行生成,不是以TRIANGLE STRIP生成。所以上面的4 0 1 2 3有点0,1,2和点0,2,3两个三角形面组成一个正方形的面

TRIANGLE FAN与TRIANGLE STRIP图解可以查看以下的博客

triangle fan 和 triangle strip_tomorrow_opal的博客-CSDN博客_三角形 fan

ply规定的数据类型与大小:

『Open3D』安装与点云格式通识

另一个ply文件片段,这次加上了颜色和边信息:

ply
format ascii 1.0
comment author: Greg Turk
comment object: another cube
element vertex 8
property float x
property float y
property float z
property uchar red                   { start of vertex color }
property uchar green
property uchar blue
element face 7
property list uchar int vertex_index  { number of vertices for each face }
element edge 5                        { five edges in object }
property int vertex1                  { index to first vertex of edge }
property int vertex2                  { index to second vertex }
property uchar red                    { start of edge color }
property uchar green
property uchar blue
end_header
0 0 0 255 0 0                         { start of vertex list }
0 0 1 255 0 0
0 1 1 255 0 0
0 1 0 255 0 0
1 0 0 0 0 255
1 0 1 0 0 255
1 1 1 0 0 255
1 1 0 0 0 255
3 0 1 2                           { start of face list, begin with a triangle }
3 0 2 3                           { another triangle }
4 7 6 5 4                         { now some quadrilaterals }
4 0 4 5 1
4 1 5 6 2
4 2 6 7 3
4 3 7 4 0
0 1 255 255 255                   { start of edge list, begin with white edge }
1 2 255 255 255
2 3 255 255 255
3 0 255 255 255
2 0 0 0 0                         { end with a single black line }

对应的模型

『Open3D』安装与点云格式通识文章来源地址https://www.toymoban.com/news/detail-468133.html

到了这里,关于『Open3D』安装与点云格式通识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Open3D——批量将KITTI数据集的.bin文件转换成.pcd点云格式

    Open3D——批量将KITTI数据集的.bin文件转换成.pcd点云格式 随着自动驾驶、智能制造等应用的逐渐推广,在处理三维点云数据方面的需求越来越大。而KITTI数据集是一个包含激光雷达、相机、GPS等多种传感器数据的三维视觉数据集,广泛用于计算机视觉领域的研究。 然而KITTI数据

    2024年01月16日
    浏览(17)
  • Open3D点云库(0.16.0)安装配置(Python版本)

    Open3D是一个开源的点云和网格处理库,它支持快速开发处理3D数据的软件。Open3D前端在c++和Python中公开了一组精心挑选的数据结构和算法;后端则是经过高度优化,并设置为并行化。它只需要很少的工作就可以在不同的平台上进行布置,并从源代码编译。它的优秀毋庸置疑,

    2024年02月14日
    浏览(10)
  • 第二章 python-pcl、open3d读取、显示pcd、bin等格式点云数据

    点云数据实际上就是许多组点的集合,每个点由{x,y,z}组成。当然理论上的只包含有3D坐标。 实际激光雷达获取的点云数据还会包含强度、反射率等等。但我们一般只用提取{x,y,z}来处理即可。 点云数据相比于其他传感器数据的核心优势就是在于 精准的深度信息。可惜获取具体

    2024年01月16日
    浏览(32)
  • 基于Open3D的点云处理17-Open3d的C++版本

    http://www.open3d.org/docs/latest/cpp_api.html http://www.open3d.org/docs/latest/getting_started.html#c http://www.open3d.org/docs/release/cpp_project.html#cplusplus-example-project https://github.com/isl-org/open3d-cmake-find-package https://github.com/isl-org/open3d-cmake-external-project https://github.com/isl-org/Open3D/releases Note: -DBUILD_SHARED_LIBS

    2024年02月09日
    浏览(17)
  • open3d点云平移

    功能简介 open3d中点云的平移函数为:pcd.translate((tx, ty, tz), relative=True)。当relative为True时,(tx, ty, tz)表示点云平移的相对尺度,也就是平移了多少距离。当relative为False时,(tx, ty, tz)表示点云中心(质心)平移到的指定位置。质心可以坐标可以通过pcd.get_center()得到。 代码

    2024年01月22日
    浏览(50)
  • Open3D点云处理

    Open3D is an open-source library that supports rapid development of software that deals with 3D data. The Open3D frontend exposes a set of carefully selected data structures and algorithms in both C++ and Python. The backend is highly optimized and is set up for parallelization. Open3D是一个支持3D数据处理软件快速开发的开源库,在前端提供

    2023年04月17日
    浏览(16)
  • Open3d点云对象详解

    PointCloud 是open3d中用于点云处理的类,封装了包括几何变换、数据滤波、聚类分割等一系列实用算法。如无特别说明,本例中所有例程均基于斯坦福兔子的点云模型,下载地址:斯坦福标准模型 读取和清除点云 一般点云数据的读取方法属于 open3d.io 的内容,但点云类也提供了

    2023年04月19日
    浏览(54)
  • Open3D常用点云滤波

    在点云处理中,过密的点云需要下采样,离群点和噪声点需要去除,通过滤波的方法,可以抽稀点云,把离群点去除,以便进行下一步处理 open3d中,很多滤波器已经被封装成了对应的方法(源码是C++) 直通滤波过滤指定维度(x,y,z)内,指定值域外的点 下采样 首先根据输入

    2024年02月06日
    浏览(14)
  • 点云可视化 open3D

    禁止转载 Python点云数据处理(六)Open3d补充:点云基本处理 - 知乎 https://zhuanlan.zhihu.com/p/353971365?utm_id=0 open3d绘制点云1–单帧点云 - 知乎 https://zhuanlan.zhihu.com/p/591249741 (168条消息) open3D 的使用,pcd可视化,3D bbox可视化,web_visualizer使用等。_CV矿工的博客-CSDN博客 https://blog.csdn.ne

    2024年02月09日
    浏览(14)
  • open3d操作.ply文件(点云)

    读取.ply文件

    2024年02月14日
    浏览(9)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包