WxGL附带了几个工具函数,其中read_pcfile用来解析.ply和.pcd格式的点云文件,该函数返回一个PointCloudData类实例,包含以下属性:

  • PointCloudData.ok - 数据是否可用,布尔型
  • PointCloudData.info - 数据可用性说明,字符串
  • PointCloudData.raw - 解读出来的原始数据,字典
  • PointCloudData.fields - 数据字段(项)名称,列表
  • PointCloudData.xyz - 点的坐标数据,None或者numpy数组(ndarray)
  • PointCloudData.rgb - 点的颜色数据,None或者numpy数组(ndarray)
  • PointCloudData.intensity - 点的强度数据,None或者numpy数组(ndarray)

以下代码在IDLE中演示了read_pcfile函数的用法,其中用到的点云文件可从这个地址下载:https://github.com/xufive/wxgl/tree/master/example/res/pointcloud

>>> import wxgl
>>> ds = wxgl.read_pcfile('/Users/xufive/MyCode/pc/bunny.ply')
>>> ds.ok
True
>>> ds.info
'正常:数据可用'
>>> ds.fields
['x', 'y', 'z', 'confidence', 'intensity']
>>> ds.raw['intensity'].shape
(35947,)
>>> ds.xyz.shape
(35947, 3)

数据解读出来之后,调用app.scatter方法即可绘制出点云模型。

>>> app = wxgl.App()
>>> app.scatter(ds.xyz)
>>> app.show()

这就是大名鼎鼎的斯坦福兔子。模型使用了WxGL自动分配的颜色,也可以使用color参数指定颜色。
在这里插入图片描述

通常点云数据不携带颜色信息,但可能包含激光反射强度。如果数据中有颜色信息,或者用强度信息映射为颜色,则需要用户自行判别并在app.scatter方法中提供color(颜色)参数,或者data(数据)和cm(调色板)参数。还有另外一种更简单的方式,那就是直接使用app.pointcloud方法,只需要一个点云文件参数即可绘制出点云模型,该方法会自动识别文件是否包含颜色信息和激光强度信息。

>>> import wxgl
>>> app = wxgl.App(haxis='z', bg='#001020')
>>> app.pointcloud('/Users/xufive/MyCode/pc/isprs/4.pcd', cm='jet')
>>> app.show()

这段代码中的.pcd文件为二进制压缩格式,采用LZF压缩算法。WxGL内置了一个Pytho版的LZF解压缩算法,省去了安装liblzf库的麻烦,但速度较慢。想要更快的速度,请安装python-lzf模块。绘制出来的点云模型使用蓝黑背景,并使用jet调色板将激光反射强度映射为颜色。
在这里插入图片描述

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐