无需依赖libE57读取.e57点云及格式转换可行性问询
关于E57点云文件解析的问题解答
嘿,我来帮你逐一拆解这些关于E57文件的疑问:
1. 能否不依赖任何库读取.e57格式?
理论上完全可行!E57格式有公开的ISO 15008-2标准规范,它的结构分为两大核心部分:
- 基于XML的元数据段:这部分是明文可读的,定义了点云的属性(比如X/Y/Z坐标、强度、颜色)、二进制数据块的位置、编码方式等关键信息。
- 二进制数据块:其中点云的核心数据是遵循规范编码的,并非全是“不透明”内容。
你可以手动实现解析逻辑:先读取并解析XML元数据,找到点云数据对应的二进制块位置,再按照规范里的编码规则(比如整数/浮点数的存储格式、压缩方式等)解码出点云数据。当然这需要你仔细研读E57的规范文档,工作量不小,但绝对是可行的。
2. “不透明编码”是否意味着必须依赖libE57?
并不是!“不透明编码”是针对E57文件里的图像、用户自定义数据块这类内容的——这些部分的编码规则由生成文件的自定义逻辑决定,没有统一规范,没有对应解码逻辑确实很难解析。但点云的核心数据块是有明确标准编码的,和“不透明编码”无关,你完全可以不依赖libE57来解析点云部分。
只有当你需要处理那些用户自定义的不透明块时,才可能需要libE57或者了解生成该文件的自定义规则,但这不是解析点云的必要条件。
3. 有没有其他解析方法?
除了依赖libE57,主要的替代方法就是基于官方规范手动实现解析:
- 第一步:读取文件开头的XML元数据,解析出点云数据集的节点信息,包括每个属性的数据类型、二进制块的偏移量和长度。
- 第二步:定位到对应的二进制块,按照规范里的编码方式(比如小端/大端存储、LZMA压缩算法等)解码出每个点的属性值。
- 如果需要处理压缩的点云数据,可能需要自己实现对应的解压逻辑(比如LZMA的基础解压),这部分规范里也有明确说明。
另外,你也可以参考一些轻量的开源E57解析实现(但要注意是否符合你“不依赖任何库”的要求,有些可能依赖基础的XML解析库,比如libxml2,如果连这个都不想用,就得自己写XML解析逻辑)。
4. 能否将.e57转换为.pcd/.pts/.ptx格式?
当然可以!既然你已经有这些格式的解析器,说明你熟悉它们的文件结构。只需要两步:
- 从E57文件中解析出所有点云属性(X/Y/Z坐标、强度、RGB颜色等)。
- 按照目标格式(比如PCD的ASCII或二进制格式、PTS的每行一个点的格式),将解析出的点数据组织成对应格式的内容,写入新文件即可。
举个简单例子:对于PTS格式,你只需要每行输出一个点的X、Y、Z、强度(如果有的话),直接写入文件就完成了转换。
内容的提问来源于stack exchange,提问作者v.slobodzian




