常见点云文件解析

常见点云文件解析

  • 1. 为什么会有这么多的点云文件
  • 2. 常见的点云文件格式解析
    • 2.1 pcd格式
    • 2.2 off格式
    • 2.3 xyz格式
    • 2.4 ply格式
    • 2.5 obj格式
    • 2.6 stl格式

1. 为什么会有这么多的点云文件

我们在做2D视觉时,处理的就是类似一系列类似的二维数组,数组以图片的形式进行保存,处理的图片也有甚多的格式,比如png,jpg,bmp等。那我们在做3D视觉的时候,处理的主要是点云,点云就是由一些点的集合。点云在组成特点上分为两种,一种是有序点云,一种是无序点云。

有序点云: 一般由深度图还原的点云,有序点云按照图方阵一行一行的,从左上角到右下角排列,当然其中有一些无效点。因为有序点云按顺序排列,可以很容易的找到它的相邻点信息。有序点云在某些处理的时候还是很便利的,但是很多情况下是无法获取有序点云的。

无序点云: 无序点云就是其中的点的集合,点排列之间没有任何顺序,点的顺序交换后没有任何影响,是比较普遍的点云形式。有序点云也可看做无序点云来处理。

在这里插入图片描述
在对点云这个格式有了初步的了解之后,我们来看看该怎么保存这些点云呢。

目前就文件格式而言 有ASCII码和二进制 两种编码形式,ASCII码可以直接阅读里面存储的内容,二进制的保存形式则不可读,但体积会更小。这两种保存都是没有进行过压缩的。

文件的内容的组成就有很多种形式了,也是本篇文章主要介绍的内容,我们来看看常见的格式:

*.pcd
*.off
*.xyz
*.ply
*.obj
*.stl
*.vtk
*.3ds

2. 常见的点云文件格式解析

2.1 pcd格式

# .PCD v0.7 - Point Cloud Data file format   //注释
VERSION 0.7 //PCD文件版本
FIELDS x y z r g b intensity timestamp //每个点包含哪些维度,xyz表示XYZ三维坐标,rgb表示颜色(可以分开表示,也可以一个浮点数表示),intensity表示激光反射强度,timestamp表示时间戳,normal_x、normal_y、normal_z表示平面法线三维坐标,j1、j2、j3表示不变矩。
SIZE 4 4 4 1 1 1 1 8 //每个维度的数据占用字节大小
TYPE F F F U U U U F //每个维度的数据类型,I表示有符号类型int8(char)、int16(short)、int32(int),U表示无符号类型uint8(unsigned char)、uint16(unsigned short)、uint32(unsigned int),F表示浮点型
COUNT 1 1 1 1 1 1 1 1 //每个维度含有多少个元素(如果未提供COUNT属性,默认值为1)
WIDTH 32 //用点的数量表示点云数据集的宽度。有两种含义:1.无序数据集的点云中点的数量 2.有序点云数据集的宽度(一行中点的数量),有序点云数据集中,点云类似图片或矩阵的结构,分为行和列,这种数据通常来自于立体摄像机(stereo camera)、时间飞行摄像机(Time Of Flight camera,使用红外线或者光脉冲来估计光线从发射到检测到的时间延迟来测量距离),知道点的相邻关系,使算法计算更高效。
HEIGHT 2172 //用点云数据集中点的数量表示点云数据集的高度。高度有如下两种含义:1.有序的点云数据集中,行的数量 2.无序点云数据集中,高度为1(可以用来判断一个数据集是有序的还是无序的)
VIEWPOINT 0 0 0 1 0 0 0 //指定数据集合中点的采集视点。可以用来后续可能的坐标转换,或者求平面法线坐标。格式是平移(tx ty tz) + 四元数(qw qx qy qz),默认是0 0 0 1 0 0 0。
POINTS 69504 //点云中点的总数(冗余字段)
DATA binary_compressed //点云数据的存储类型,0.7版本支持两种存储方式:ascii和binary。

文件格式头中的顺序不能改变,即一定是如下顺序:
VERSION、FIELDS、SIZE、TYPE、COUNT、WIDTH、HEIGHT、VIEWPOINT、POINTS、DATA

pcd作为PCL库官方指定格式,典型的为点云量身定制的格式。优点是支持n维点类型扩展机制,能够更好的发挥PCL库的点云处理性能。文件格式有文本和二进制两种格式。仅能支持点云数据,不能支持线面数据。

2.2 off格式

OFF格式文件头有两行:第一行以off关键字开头,第二行表示顶点数、面数、边数。主体分为顶点坐标(顶点列表)和面的顶点索引(面列表)两个部分,其中每个面的顶点数可以指定,用第一个数表示。

OFF
顶点数 面数 边数
x y z
x y z
…n个顶点 顶点1的索引 顶点2的索引 … 顶点n的索引
…

举个例子

OFF
8 6 0
-0.500000 -0.500000 0.500000
0.500000 -0.500000 0.500000
-0.500000 0.500000 0.500000
0.500000 0.500000 0.500000
-0.500000 0.500000 -0.500000
0.500000 0.500000 -0.500000
-0.500000 -0.500000 -0.500000
0.500000 -0.500000 -0.500000
4 0 1 3 2
4 2 3 5 4
4 4 5 7 6
4 6 7 1 0
4 1 7 5 3
4 6 0 2 4

OFF相对其他格式,更加的简单,可以存储点和面,仅有文本格式。

2.3 xyz格式

前面3个数字是坐标,后面3个数字是法向量(也有代表颜色信息),有多少行就代表有多少个点。

17.371559 -6.531680 -8.080792 0.242422 0.419118 0.874970  //一般前三个数带标xyz,后面三个数代表法向量,也有代表颜色信息的。
15.640106 -16.101347 -9.550241 -0.543610 -0.382877 0.746922  
17.750742 -6.395478 -8.307115 0.333093 0.494766 0.802655  
15.432834 -15.947010 -9.587061 -0.548083 -0.385148 0.742473  
23.626318 -7.729815 -13.608750 0.081697 0.502976 0.860431  
15.300377 -15.610346 -9.547507 -0.569658 -0.341132 0.747743  
23.975805 -7.512131 -13.775388 0.082388 0.564137 0.821561  
24.251831 -7.345085 -13.949208 0.099309 0.574142 0.812711  

2.4 ply格式

PLY,多边形文件格式,表示存储描述为多边形集合的图形对象的 3D 文件格式。这种文件格式的目的是建立一种简单易用的文件类型,该文件类型足够通用,可用于各种模型。 PLY 文件格式有 ASCII 和二进制格式,用于紧凑存储、快速保存和加载。

ply                                          //关键字
format ascii 1.0                    //文件编码格式
comment author: Greg Turk                            // 注释
comment object: another cube                      //注释
element vertex 8                                        // 定义元素为顶点 数目为8个
property float x                                          // 上述顶点元素中的属性 x,数据类型为float
property float y                                          // 上述顶点元素中的属性 y,数据类型为float
property float z                                          // 上述顶点元素中的属性 z,数据类型为float
property uchar red                                   // 上述顶点元素中的属性 red,数据类型为uchar
property uchar green                               // 上述顶点元素中的属性 green,数据类型为uchar
property uchar blue                                // 上述顶点元素中的属性 blue,数据类型为uchar
element face 7                                        // 定义面元素,数目为7个
property list uchar int vertex_index      // 定义面元素内的列表属性,列表开头以uchar的数值表示列表的项目数,后面接着型态为int的顶点索引值(vertex_indices),顶点索引值从0开始。
element edge 5                                      //定义元素为边,数目为5个
property int vertex1                  
property int vertex2                  
property uchar red                    
property uchar green
property uchar blue
end_header                                                  // 文件头部分结束
0 0 0 255 0 0                         //顶点的开始,分别为x y z r g b
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                           //面的开始,这是个三角行,分别有第0 ,1, 2 相连
3 0 2 3                           
4 7 6 5 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
0 1 255 255 255                   // 边的开始,顶点分别是第0个与第一个点,颜色是255,255,255
1 2 255 255 255
2 3 255 255 255
3 0 255 255 255

2.5 obj格式

obj是一种文本文件,通常用以“#”开头的注释行作为文件头,数据部分每一行的开头关键字代表该行数据所表示的几何和模型元素,以空格做数据分隔符。

# The units used in this file are centimeters. g default                           // 组名称v -0.500000 -0.500000 0.500000     // v 代表顶点坐标v 0.500000 -0.500000 0.500000 v -0.500000 0.500000 0.500000 v 0.500000 0.500000 0.500000 v -0.500000 0.500000 -0.500000 v 0.500000 0.500000 -0.500000 v -0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 -0.500000 vt 0.000000 0.000000                   //"vt"代表点的贴图坐标vt 1.000000 0.000000 vt 0.000000 1.000000 vt 1.000000 1.000000 vt 0.000000 2.000000 vt 1.000000 2.000000 vt 0.000000 3.000000 vt 1.000000 3.000000 vt 0.000000 4.000000 vt 1.000000 4.000000 vt 2.000000 0.000000 vt 2.000000 1.000000 vt -1.000000 0.000000 vt -1.000000 1.000000 vn 0.000000 0.000000 1.000000       //vn 代表顶点法线vn 0.000000 0.000000 1.000000 vn 0.000000 0.000000 1.000000 vn 0.000000 0.000000 1.000000 vn 0.000000 1.000000 0.000000 vn 0.000000 1.000000 0.000000 vn 0.000000 1.000000 0.000000 vn 0.000000 1.000000 0.000000 vn 0.000000 0.000000 -1.000000 vn 0.000000 0.000000 -1.000000 vn 0.000000 0.000000 -1.000000 vn 0.000000 0.000000 -1.000000 vn 0.000000 -1.000000 0.000000 vn 0.000000 -1.000000 0.000000 vn 0.000000 -1.000000 0.000000 vn 0.000000 -1.000000 0.000000 vn 1.000000 0.000000 0.000000 vn 1.000000 0.000000 0.000000 vn 1.000000 0.000000 0.000000 vn 1.000000 0.000000 0.000000 vn -1.000000 0.000000 0.000000 vn -1.000000 0.000000 0.000000 vn -1.000000 0.000000 0.000000 vn -1.000000 0.000000 0.000000 s off                                                   //表示关闭光滑组g pCube1                                         //usemtl initialShadingGroup             //表示使用的材质f 1/1/1 2/2/2 4/4/3 3/3/4                 //f 面,顶点索引/uv点索引/法线索引f 3/3/5 4/4/6 6/6/7 5/5/8 f 5/5/9 6/6/10 8/8/11 7/7/12 f 7/7/13 8/8/14 2/10/15 1/9/16 f 2/2/17 8/11/18 6/12/19 4/4/20 f 7/13/21 1/1/22 3/3/23 5/14/24 

2.6 stl格式

3D Systems公司创建的模型文件格式,用于表示三角形网格,主要应用于CAD、CAM领域。STL从功能上只能用来表示封闭面或体,有文本和二进制两种文件格式。

文本格式的STL文件的首行给出了文件路径及文件名,下面逐行给出三角面片的几何信息,每一行以1个或2个关键字开头。STL文件格式以三角面(facet)为单位组织数据,每一个三角面由7 行数据组成:facet normal 是三角面片指向实体外部的法矢量坐标,outer loop 说明随后的3行数据分别是三角面片的3个顶点坐标(vertex),3顶点沿指向实体外部的法矢量方向逆时针排列。最后一行是结束标志。

solidfilenamestl  //文件路径及文件名facet normal x yz // 三角面片法向量的3个分量值
outer loop
vertex x y z  //三角面片第一个顶点的坐标
vertex x y z // 三角面片第二个顶点的坐标
vertex x y z //三角面片第三个顶点的坐标
endloop
endfacet // 第一个三角面片定义完毕
……
……
endsolid filenamestl ∥整个文件结束

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

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

相关文章

基于STM32的智能家居控制系统设计方案

基于STM32的智能家居控制系统设计方案 一、项目概述 本项目旨在设计一个基于STM32微控制器的智能家居控制系统。该系统将通过无线通信技术连接并控制各种智能家居设备,包括但不限于灯光、窗帘以及安防监控设备。系统将注重节能环保、安全可靠等设计理念&#xff0…

从输入URL到页面发生了什么

从输入URL到页面加载完成,涉及了许多步骤和技术。这是一个简化的过程: 解析URL(Uniform Resource Locator): 浏览器解析用户输入的URL,将其分解为不同的部分,如协议(例如HTTP&#x…

第1章 计算机网络体系结构

王道学习 【考纲内容】 (一)计算机网络概述 计算机网络的概念、组成与功能;计算机网络的分类; 计算机网络的性能指标 (二)计算机网络体系结构与参考模型 计算机网络分层结…

数据结构排序篇上

排序的概念及其运用 排序的概念 排序 :所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序的记录序列中,存在多个具有相同的关键字的记录&…

面向电力行业定制安全云工作站解决方案,麒麟信安出席2024年电力企业信创替代技术研讨会

日前,由中国电子企业协会主办的“2024年电力企业信创替代技术研讨会”在江苏南京正式召开。会议以国家推进实现自主可控、加快建设“数字中国”为大背景,聚焦电力企业紧抓“信创替代”机遇,通过安全可靠的软硬件迭代升级,实现企业…

android studio 网络请求okhttp3、okgo

一、在build.gradle文件里添加 implementation com.squareup.okhttp3:okhttp:4.9.0 implementation com.squareup.okhttp3:okhttp:3.12.0 implementation com.squareup.okio:okio:1.17.4 implementation com.lzy.net:okgo:3.0.4 implementation com.alibaba:fastjson:1.2.57 i…

ssm046人事管理信息系统+jsp

人事管理信息系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本人事管理信息系统就是在这样的大环境下诞生,其可以帮助管理者在短…

【ZZULIOJ】1062: 最大公约数(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 code 题目描述 输入两个不大于10的9次方的正整数,输出其最大公约数。 输入 输入两个正整数m和n,数据之间用空格隔开。 输出 输出一个整数,表示m和n的最大公约数。 样…

软考高级架构师:存储管理-页式存储真题解析

背景知识 题目 进程P有8个页面,页号分别为0~7,页面大小为4K ,假设系统给进程P分配了4个存储块,进程P的页面变换表如下所示。表中状态位等于1和0分别表示页面在内存和不在内存。若进程P要访问的逻辑地址为十六进制 514…

QThread的学习

锁住该线程直到下面的情况之一出现: (1)和该线程连接的对象已经执行完成(例如:当它从run()中返回时) 如果该线程已经结束,该函数将返回true。 如果该线程还没有开始,它也返回true。 (2)time毫秒已经过去。如…

嵌入式面试的中的一些潜规则

潜规则1:面试的本质不是考试,而是告诉面试官你会做什么 经验不够的小伙伴特别容易犯的一个错误,不清楚面试官到底想问什么,其实整个面试中面试官并没有想难倒你的意思,只是想通过提问的方式来知道你会什么。 比如stm32单片机的启动过程是怎样的? 没入门的说从main函数…

Qt实现comboBox的初试化

在C中&#xff0c;初始化一个comboBox通常是在图形用户界面(GUI)库如Qt或MFC中进行的。这些库提供了用于创建和管理用户界面的类和函数。下面我将展示如何在Qt库中初始化一个comboBox。 #include <QApplication> #include <QWidget> #include <QComboBox&g…

Windows系统LibRadtran安装

Windows系统LibRadtran安装 1.简介1.1官网下载1.2依赖环境1.3 Cygwin64 介绍及安装 2.安装2.1安装依赖的环境2.2编译 3.可能遇到的错误3.1 错误13.2 错误2 4.使用教程 1.简介 LibRadtran&#xff08;Library for Radiative Transfer&#xff09;是一个用于计算太阳和热辐射在大…

单列模式1.0

单列模式 单例模式能保证某个类在程序中只存在唯⼀⼀份实例, ⽽不会创建出多个实例 1.饿汉模式 只要程序一启动就会立即创建出一个对象 class Signleton{private static Signleton instancenew Signleton();//防止在以后的代码中再创建对象&#xff0c;我们将构造方法private,…

【MIT6.S081】Lab3: page tables(详细解答版)

实验内容网址&#xff1a;https://xv6.dgs.zone/labs/requirements/lab3.html 本实验的代码分支&#xff1a;https://gitee.com/dragonlalala/xv6-labs-2020/tree/pgtbl2/ Print a page table 关键点&#xff1a;递归、三级页表 思路&#xff1a; 用上图来解释三级页表的原理最…

C语言-翁恺-PTA-121-160课后练习题-04

title: C语言-翁恺-PTA-121-160课后练习题-04 tags: CPTA description: ’ ’ mathjax: true date: 2024-04-09 23:16:22 categories:CPTA 7-137 Average You are going to read a serial of none-negative integers, which ends with a negative number that does not count…

如何将Paddle(Lite)模型转换为TensorFlow(Lite)模型

模型间的相互转换在深度学习应用中很常见&#xff0c;paddlelite和TensorFlowLite是移动端常用的推理框架&#xff0c;有时候需要将模型在两者之间做转换&#xff0c;本文将对转换方法做说明。 环境准备 建议使用TensorFlow2.14&#xff0c;PaddlePaddle 2.6 docker pull te…

【windows 】taskkill命令

在Windows操作系统中&#xff0c;并没有直接称为“kill”的命令来终止进程&#xff0c;但是你可以使用“taskkill”命令或者通过任务管理器来实现类似的功能。 “taskkill”是一个强大的命令行工具&#xff0c;可以用来终止一个或多个任务或进程。以下是一些常用的“taskkill”…

智能电网将科技拓展至工厂之外的领域

【摘要/前言】 物联网已然颠覆我们日常生活的许多层面。在家居方面&#xff0c;家电变成连网设备&#xff0c;不仅让我们能控制灯光与上网购物&#xff0c;甚至在出门时提供安全功能。在工业领域&#xff0c;智能工厂改变产品制造的方式。工业物联网(IIoT)不仅让制造商更加敏捷…

python常用知识总结

文章目录 1. 常用内置函数1. ASCII码与字符相互转换 1. 常用内置函数 1. ASCII码与字符相互转换 # 用户输入字符 c input("请输入一个字符: ")# 用户输入ASCII码&#xff0c;并将输入的数字转为整型 a int(input("请输入一个ASCII码: "))print( c &qu…