点云格式介绍(二)

点云格式介绍(二),第1张

 常见点云存储方式有pcd、ply、txt、bin文件。本节主要介绍ply点云格式。

一、点云的基本组成

点云组成可以是以下几种形式数据的排列组合。

        (1)x、y、z:点云的空间坐标。

        (2)i:强度值,强度反应了点的密集成度。

        (3)r、g、b:rgb色彩信息。

        (4)a:a代表alpha(透明度)。

        (5)nx、ny、nz:n代表Normal,点云的法向量。

 二、ply文件

        一个ply文件中通常由两部分组成:分别是文件说明和点云数据。这与pcd文件很像。

        2.1 文件说明

        文件说明如下组成,如下所示。除了前三行与最后一行是描述性的语句之外,中间主要说明每一行存储的是什么样的数据、数据的数量、属性等。我们将后面每一行存储的有效数据称为element元素。定义元素的组成需要用到element和property两部分,第一部分定义元素名称和数量,第二部分逐一列举元素组成和类型。下面的示例中定义了点的存储名称为vertex,共35947个。后面存储每一个点含5个属性,即每一行由5个数组成。

ply#声明是ply文件

format ascii 1.0 #存储方式

comment zipper output#备注说明,解释性描述

element vertex 35947 #表示第一种元素构成是顶点,共35947个,下面的property对应点的组成。

property float x #点的第一个元素,x,浮点型

property float y #点的第二个元素,y,浮点型

property float z #点的第三个元素,z,浮点型

property float confidence #点的第四个元素,置信度,浮点型

property float intensity #点的第五个元素,强度,浮点型

element face 69451 #表示第二种元素构成是面,共69451个,下面的property对应面的组成

property list uchar int vertex_indices #list uchar 表示面类型,int vertex_indices面中对应上述点的索引

end_header #描述结束,下面开始逐一按行列举上述两种元素,第一种元素是35947个点,每行有5个属性,共35947行。同样地,然后开始按行列举上述第二种元素。

-0.0378297 0.12794 0.00447467 0.850855 0.5 

-0.0447794 0.128887 0.00190497 0.900159 0.5 

-0.0680095 0.151244 0.0371953 0.398443 0.5 

-0.00228741 0.13015 0.0232201 0.85268 0.5 
        2.2 点云数据

        从end_header结束后为点云数据,每一行存储的数据与element对应。描述结束,下面开始逐一按行列举上述两种元素,第一种元素是35947个点,每行有5个属性,共35947行。同样地,然后开始按行列举上述第二种元素。

        2.3 python读取ply文件

        ply示例文件下载地址:ply格式点云样例文件-深度学习文档类资源-CSDN下载。

def ply_read(file_path):
    lines = []
    with open(file_path, 'r') as f:
        lines = f.readlines()
    return lines

file_path = 'bun_zipper.ply'
points = ply_read(file_path)
for p in points[:15]:
    print(p)
        2.4 点云可视化源码与效果
# -*- coding: utf-8 -*-
"""
Created on Sat Apr 16 08:51:41 2022

@author: suiyingy
"""
from mayavi import mlab
import numpy as np

def pcd_read(file_path):
    lines = []
    with open(file_path, 'r') as f:
        lines = f.readlines()
    return lines


#将每一行数据分割后转为数字
def ls2n(line):
    line = line.strip().split(' ')
    return list(map(float, line))

def viz_mayavi(points):
    x = points[:, 0]  # x position of point
    y = points[:, 1]  # y position of point
    z = points[:, 2]  # z position of point
    fig = mlab.figure(bgcolor=(0, 0, 0), size=(640, 360))
    mlab.points3d(x, y, z,
                          y,          # Values used for Color
                          mode="point",
                          colormap='spectral', # 'bone', 'copper', 'gnuplot'
                          # color=(0, 1, 0),   # Used a fixed (r,g,b) instead
                          figure=fig,
                          )
    mlab.show()

if __name__ == '__main__':
    file_path = 'bun_zipper.ply'
    points = pcd_read(file_path)[12:(12+35947)]
    points = list(map(lambda x: ls2n(x), points))
    viz_mayavi(np.array(points))

python三维点云研究计划_Coding的叶子的博客-CSDN博客_python 三维点云将按照以下目录持续进行更新……点云格式介绍、点云可视化、点云投影、生成鸟瞰图、生成前视图、点云配准、点云分割、三维目标检测、点云重建、深度学习点云算法……https://blog.csdn.net/suiyingy/article/details/124017716点云格式介绍(一)_Coding的叶子的博客-CSDN博客常见点云存储方式有pcd、ply、txt、bin文件。本节主要介绍pcd点云格式。https://blog.csdn.net/suiyingy/article/details/124170147更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/715774.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存