抓取检测数据集Cornell数据解析

时间:2024-04-12 11:33:59

从Cornell数据集网站:http://pr.cs.cornell.edu/grasping/rect_data/data.php 中,我们可以得到比较详细的数据集格式信息,但是其中关于pcd文件的说明不太详细,经过一段时间的查询,记录一下。

以pcd0100.txt为例,打开文件,第一行就是“# .PCD v.7 - Point Cloud Data file format”,说明文件采用的pcd v.7格式,关于这个格式的说明可以看pcl网站:http://pointclouds.org/documentation/tutorials/pcd_file_format.php#pcd-file-format

其中,我想强调一个地方,当FIELDS行为“x y z rgb”时,下面的数据行都是每行4个数,如-0.18716 -0.20571 0 4.808e+06,他们分别表示这个点在三维空间中的坐标为(-0.18716, -0.20571, 0),所在坐标系是写pcd文件时的参考坐标系,这一点的灰度值是4.808e+06,几乎就是白色。

但Cornell中的pcd又与官网介绍不同,不同之处是FIELDS行为“x y z rgb index”,比官网中多了index,Cornell网站上说index是对行数和列数的编码,每一个index对应png图片中的一个点,解码公式如下:

row = int(index / 640) + 1
col = (index % 640) + 1

注意,这里的row和col都是从1开始的。Cornell说他们的图片的大小是480*640,但是当我们看pcd文件时,发现数据行并没有那么多,pcd0100.txt就只有253674个,我们在python中新建一个480*640的全黑cv图像,index按上述公式解码,把每个index对应的坐标都设为白色,最终结果和数据集中的RGB图对应如下:

抓取检测数据集Cornell数据解析 抓取检测数据集Cornell数据解析

比较后发现,某些边缘处的深度值没有测到,在写入时就把没测到的点忽略了,所以txt文件中的数据会比480*640少。我们在处理时,用opencv或imageio把缺失的点全部置0就OK了。