提取pcd格式文件中的位置、颜色、法向量信息(python+open3d)

首先了解一下什么是PCD格式的文件,PCD(Point Cloud Data) 文件是 PCL(Point Cloud Library) 引入的一种新的描述点云的格式。让我详细介绍一下 PCD 文件的结构和内容。

(1)文件头部:

  • 每个 PCD 文件都包含一个文件头,用于标识并声明存储在文件中的点云数据的一些特性。
  • PCD 文件头必须以 ASCII 编码表示。
  • 文件头的每个字段以及 ASCII 点数据都使用 新行(\n) 分隔。

(2)PCD 文件头的字段:

下面是 PCD 文件头的一些字段,按照指定的顺序精确指定:

  • VERSION:指定 PCD 文件版本,目前 PCL 支持的版本为 0.7。
  • FIELDS:指定点具有的维度或字段的名称,例如 x、y、z 坐标、法线、颜色等。
  • SIZE:指定每个维度的大小(以字节为单位)。
  • TYPE:将每个维度的类型指定为一个字符,例如 F(浮点型)、U(无符号整型)等。
  • COUNT:指定每个维度有多少个元素,通常为 1。
  • WIDTH:以点数为单位指定点云的宽度,即点的数量。
  • HEIGHT:有组织的点云数据集的高度,即扫描线数。
  • VIEWPOINT:为数据集中的点指定采集视点,用于构建不同坐标系之间的变换或处理需要一致方向的特征,如曲面法线。
  • POINTS:指定云中的点总数。
  • DATA:指定存储点云数据的数据类型,支持三种类型:ascii、binary 和 binary_compressed。

(3)优势:

  • PCD 文件格式相对于其他文件格式的优势包括:
  • 存储和处理有组织的点云数据集的能力,对于实时应用和增强现实、机器人等研究领域至关重要。
  • 二进制/数据类型是将数据加载和保存到磁盘的最快方法。
  • 存储不同的数据类型允许点云数据在存储和处理方面灵活高效。
  • 特征描述符的 n-D 直方图对于 3D 感知/计算机视觉应用非常重要。

(4)代码示例

import open3d as o3d

# 提取三维模型的信息
def extract_info_to_nparray(pcd):
    data = {}
    data["points"] = np.asarray(pcd.points) 
    data["colors"] = np.asarray(pcd.colors) 
    data["normals"] = np.asarray(pcd.normals) 
    return data 

if __name__ =="__main__":
    # demo_icp_pcds = o3d.data.DemoICPPointClouds()
    # source = o3d.t.io.read_point_cloud(demo_icp_pcds.paths[0])
    # target = o3d.t.io.read_point_cloud(demo_icp_pcds.paths[1])

    source = o3d.io.read_point_cloud("./data/output.pcd")
    target = o3d.io.read_point_cloud("./data/cloud_bin_1.pcd")

    print(extract_info_to_nparray(target))

官网关于点云类型的数据的API:https://www.open3d.org/docs/release/python_api/open3d.geometry.PointCloud.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容