为PointNet准备自己的数据

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

  • 3
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值