點雲格式-pcd


每一個pcd文件包含一個文件頭,它聲明文件中存儲的點雲數據的特性(元數據)。pcd文件頭必須用ASCII碼來編碼。頭文件屬性字段都以一個新行(\n)分開。從0.7版本開始,pcd文件頭包含下面的字段:

.VERSION –指定pcd文件版本

.FIELDS –指定一個點可以有的每一個維度和字段的名字。例如:

FIELDS x y z                                   # XYZ data

FIELDS x y z rgb                          # XYZ + colors

FIELDS x y z normal_xnormal_y normal_z         # XYZ + surface normals

FIELDS j1 j2 j3                                # moment invariants

...

SIZE –用字節數指定每一個維度的大小。例如:

unsigned char/char has 1 byte

unsigned short/short has 2 bytes

unsignedint/int/float has 4 bytes

double has 8 bytes

.TYPE –用一個字符指定每一個維度的類型。現在被接受的類型有:

I –表示有符號類型int8(char)、int16(short)和int32(int);

U – 表示無符號類型uint8(unsigned char)、uint16(unsigned short)和uint32(unsigned int);

F –表示浮點類型。

·COUNT –指定每一個維度包含的元素數目。例如,x這個數據通常有一個元素,但是像VFH這樣的特征描述子就有308個。實際上這是在給每一點引入n維直方圖描述符的方法,把它們當做單個的連續存儲塊。默認情況下,如果沒有COUNT,所有維度的數目被設置成1。

·WIDTH –用點的數量表示點雲數據集的寬度。根據是有序點雲還是無序點雲,WIDTH有兩層解釋:

1)它能確定無序數據集的點雲中點的個數(和下面的POINTS一樣);

2)它能確定有序點雲數據集的寬度(一行中點的數目)。

注意:有序點雲數據集,意味着點雲是類似於圖像(或者矩陣)的結構,數據分為行和列。這種點雲的實例包括立體攝像機和時間飛行攝像機生成的數據。有序數據集的優勢在於,預先了解相鄰點(和像素點類似)的關系,鄰域操作更加高效,這樣就加速了計算並降低了PCL中某些算法的成本。

例如:

WIDTH 640       # 每行有640個點

·HEIGHT –用點的數目表示點雲數據集的高度。類似於WIDTH ,HEIGHT也有兩層解釋:

1)它表示有序點雲數據集的高度(行的總數);

2)對於無序數據集它被設置成1(被用來檢查一個數據集是有序還是無序)。

有序點雲例子:

WIDTH 640       # 像圖像一樣的有序結構,有640行和480列,

HEIGHT 480      # 這樣該數據集中共有640*480=307200個點

無序點雲例子:

WIDTH 307200

HEIGHT 1        # 有307200個點的無序點雲數據集

·VIEWPOINT–指定數據集中點雲的獲取視點。VIEWPOINT有可能在不同坐標系之間轉換的時候應用,在輔助獲取其他特征時也比較有用,例如曲面法線,在判斷方向一致性時,需要知道視點的方位,

視點信息被指定為平移(txtytz)+四元數(qwqxqyqz)。默認值是:

VIEWPOINT 0 0 0 1 0 0 0

·POINTS–指定點雲中點的總數。從0.7版本開始,該字段就有點多余了,因此有可能在將來的版本中將它移除。

例子:

POINTS 307200   #點雲中點的總數為307200

·DATA –指定存儲點雲數據的數據類型。從0.7版本開始,支持兩種數據類型:ascii和二進制。查看下一節可以獲得更多細節。

注意:文件頭最后一行(DATA)的下一個字節就被看成是點雲的數據部分了,它會被解釋為點雲數據。

警告:PCD文件的文件頭部分必須以上面的順序精確指定,也就是如下順序:

VERSION、FIELDS、SIZE、TYPE、COUNT、WIDTH、HEIGHT、VIEWPOINT、POINTS、DATA

之間用換行隔開。

數據存儲類型

在0.7版本中,.pcd文件格式用兩種模式存儲數據:

ASCII形式

如果以ASCII形式,每一點占據一個新行:

p_1

p_2

...

p_n

注意:從PCL 1.0.1版本開始,用字符串“nan”表示NaN,此字符表示該點的值不存在或非法等。

二進制形式

如果以二進制形式,這里數據是數組(向量)pcl::PointCloud.points的一份完整拷貝,在Linux系統上,我們用mmap/munmap操作來盡可能快的讀寫數據,存儲點雲數據可以用簡單的ascii形式,每點占據一行,用空格鍵或Tab鍵分開,沒有其他任何字符。也可以用二進制存儲格式,它既簡單又快速,當然這依賴於用戶應用。ascii格式允許用戶打開點雲文件,使用例如gunplot這樣的標准軟件工具更改點雲文件數據,或者用sed、awk等工具來對它們進行操作。

示例:

# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z
SIZE 8 8 8
TYPE F F F
COUNT 1 1 1
WIDTH 55061
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 55061
DATA ascii
165.910849 111.848930 855.473457
232.670594 148.455302 1272.738956
232.670594 148.455302 1272.738956
411.064056 234.325784 1998.515717


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM