PointNet是一种新型的不依赖于输入顺序的深网体系结构,它能够直接处理无序点云数据,因此在几何处理领域有着广阔的应用前景。 目前,PointNet最流行的实现是基于以HDF 5为标准输入格式的TensorFlow框架。对于如何将点云转化为H5文件,这可能会让很多人很迷茫,不知道怎么处理。本文将直接告诉大家怎么制作H5文件,以提供给tensorflow模型。
PTS Data
我们可以从某个3D数据存储库下载原始数据,例如ShapeNetPart数据集。 这些直接下载下来的数据格式一般是PTS类型的,是一堆无序的坐标点,没有头信息。这样我们可以很简单的将pts文件进行逐行读取,并将数据存储到数组行中。 例如,在生成HDF 5数据集之前,我们希望每个点云具有相同的长度。 因此一个简单的采样代码可以直接应用于PTS文件,下面代码就显示了一个随机采样将所有点降到2048个。
f = open(file, 'r+')
lines = [line.rstrip() for line in f]
slice = random.sample(lines, 2048)
PLY Data
ple是一种非常著名的存储3d数据的文件格式。 它的头用来指定文件的信息,多少点,日期等等。 因此,处理这些数据可能比pts数据要复杂一些。 幸运的是,我们可以找到一些现成的工具来读取层文件,例如plyfile,它能够以NumPy结构化数组的形式从PLY文件中读取数字数据。 这个工具安装起来也非常简单,直接可以通过pip进行安装。
pip install plyfile
当然,在此之前,我们还应该安装NumPy
pip install numpy
层文件数据的反序列化和序列化是通过PlyData和PlyElement实例完成的,因此我们必须首先导入它们。此外,NumPy模块也需要加载。
from plyfile import PlyData, PlyElement
import numpy as np
然后我们就可以开始读一遍文件了。具体来说,它是这样的:
plydata = PlyData.read(filename + '.ply')
for i in range(0, plydata.elements[0].count):
data[i] = [plydata['vertex']['x'][i], plydata['vertex']['y'][i], plydata['vertex']['z'][i]]
Write HDF5 File
我们使用h5py包作为HDF 5数据格式的接口。
sudo apt-get install libhdf5-dev
pip install h5py
首先我们先导入这些包
import h5py
为了创建HDF 5文件,我们使用h5py.File函数来初始化它,它使用两个参数。第一个参数提供文件名和位置,第二个参数提供模式。我们正在编辑文件,所以模式为写模式w.
f = h5py.File('data.h5', 'w')
然后,我们需要定义写入HDF 5文件的数据的形状和类型。
data = np.zeros((128, 2048, 3), dtype = np.uint8)
在用从PTS或PLY文件读取的点云信息填充数据之后,我们可以使用与其关联的CREATE_DataSet函数将其写入HDF 5文件f,其中提供数据集和NumPy数组的名称。
f.create_dataset(‘data’, data = data)
c++代码下载地址:https://www.lijl888.com/archives/103
python版本代码:https://www.lijl888.com/archives/103