首先了解一下什么是PCD格式的文件,PCD(Point Cloud Data) 文件是 PCL(Point Cloud Library) 引入的一種新的描述點(diǎn)云的格式。讓我詳細(xì)介紹一下 PCD 文件的結(jié)構(gòu)和內(nèi)容。
(1)文件頭部:
- 每個 PCD 文件都包含一個文件頭,用于標(biāo)識并聲明存儲在文件中的點(diǎn)云數(shù)據(jù)的一些特性。
- PCD 文件頭必須以 ASCII 編碼表示。
- 文件頭的每個字段以及 ASCII 點(diǎn)數(shù)據(jù)都使用 新行(\n) 分隔。
(2)PCD 文件頭的字段:
下面是 PCD 文件頭的一些字段,按照指定的順序精確指定:
- VERSION:指定 PCD 文件版本,目前 PCL 支持的版本為 0.7。
- FIELDS:指定點(diǎn)具有的維度或字段的名稱,例如 x、y、z 坐標(biāo)、法線、顏色等。
- SIZE:指定每個維度的大小(以字節(jié)為單位)。
- TYPE:將每個維度的類型指定為一個字符,例如 F(浮點(diǎn)型)、U(無符號整型)等。
- COUNT:指定每個維度有多少個元素,通常為 1。
- WIDTH:以點(diǎn)數(shù)為單位指定點(diǎn)云的寬度,即點(diǎn)的數(shù)量。
- HEIGHT:有組織的點(diǎn)云數(shù)據(jù)集的高度,即掃描線數(shù)。
- VIEWPOINT:為數(shù)據(jù)集中的點(diǎn)指定采集視點(diǎn),用于構(gòu)建不同坐標(biāo)系之間的變換或處理需要一致方向的特征,如曲面法線。
- POINTS:指定云中的點(diǎn)總數(shù)。
- DATA:指定存儲點(diǎn)云數(shù)據(jù)的數(shù)據(jù)類型,支持三種類型:ascii、binary 和 binary_compressed。
(3)優(yōu)勢:
- PCD 文件格式相對于其他文件格式的優(yōu)勢包括:
- 存儲和處理有組織的點(diǎn)云數(shù)據(jù)集的能力,對于實(shí)時(shí)應(yīng)用和增強(qiáng)現(xiàn)實(shí)、機(jī)器人等研究領(lǐng)域至關(guān)重要。
- 二進(jìn)制/數(shù)據(jù)類型是將數(shù)據(jù)加載和保存到磁盤的最快方法。
- 存儲不同的數(shù)據(jù)類型允許點(diǎn)云數(shù)據(jù)在存儲和處理方面靈活高效。
- 特征描述符的 n-D 直方圖對于 3D 感知/計(jì)算機(jī)視覺應(yīng)用非常重要。
(4)代碼示例
import open3d as o3d
# 提取三維模型的信息
def extract_info_to_nparray(pcd):
data = {}
data["points"] = np.asarray(pcd.points)
data["colors"] = np.asarray(pcd.colors)
data["normals"] = np.asarray(pcd.normals)
return data
if __name__ =="__main__":
# demo_icp_pcds = o3d.data.DemoICPPointClouds()
# source = o3d.t.io.read_point_cloud(demo_icp_pcds.paths[0])
# target = o3d.t.io.read_point_cloud(demo_icp_pcds.paths[1])
source = o3d.io.read_point_cloud("./data/output.pcd")
target = o3d.io.read_point_cloud("./data/cloud_bin_1.pcd")
print(extract_info_to_nparray(target))
官網(wǎng)關(guān)于點(diǎn)云類型的數(shù)據(jù)的API:https://www.open3d.org/docs/release/python_api/open3d.geometry.PointCloud.html