本博客內(nèi)容來源于網(wǎng)絡(luò)以及其他書籍,結(jié)合自己學習的心得進行重編輯,因為看了很多文章不便一一標注引用,如圖片文字等侵權(quán),請告知刪除。
傳統(tǒng)2D計算機視覺學習筆記目錄------->傳送門
傳統(tǒng)3D計算機視覺學習筆記目錄------->傳送門
為什么會有這么多的點云文件
我們在做2D視覺時,處理的就是類似一系列類似的二維數(shù)組,數(shù)組以圖片的形式進行保存,處理的圖片也有甚多的格式,比如png,jpg,bmp等。那我們在做3D視覺的時候,處理的主要是點云,點云就是由一些點的集合。點云在組成特點上分為兩種,一種是有序點云,一種是無序點云。
- 有序點云:一般由深度圖還原的點云,有序點云按照圖方陣一行一行的,從左上角到右下角排列,當然其中有一些無效點因為。有序點云按順序排列,可以很容易的找到它的相鄰點信息。有序點云在某些處理的時候還是很便利的,但是很多情況下是無法獲取有序點云的。
- 無序點云:無序點云就是其中的點的集合,點排列之間沒有任何順序,點的順序交換后沒有任何影響。是比較普遍的點云形式,有序點云也可看做無序點云來處理。

在對點云這個格式有了初步的了解之后,我們來看看該怎么保存這些點云呢。
目前就文件格式而言有ASCII碼和二進制兩種編碼形式,ASCII碼可以直接閱讀里面存儲的內(nèi)容,二進制的保存形式則不可讀,但體積會更小。這兩種保存都是沒有進行過壓縮的。
文件的內(nèi)容的組成就有很多種形式了,也是本篇文章主要介紹的內(nèi)容,我們來看看常見的格式:
- *.pcd
- *.off
- *.xyz
- *.ply
- *.las
- *.laz
- *.obj
- *.stl
- *.vtk
- *.3ds
等……

怎么這么多啊 w(?Д?)w
點云文件格式詳細解析
下面我對上面描述的一些常見的格式,進行詳細的描述。
-
*.pcd
# .PCD v.7 - Point Cloud Data file format
VERSION .7 //指定PCD文件版本
FIELDS x y z rgb //指定一個點可以有的每一個維度和字段的名字
SIZE 4 4 4 4 //用字節(jié)數(shù)指定每一個維度的大小
TYPE F F F F //用一個字符指定每一個維度的類型
COUNT 1 1 1 1 //指定每一個維度包含的元素數(shù)目
WIDTH 213 //用點的數(shù)量表示點云數(shù)據(jù)集的寬度
HEIGHT 1 //用點的數(shù)量表示點云數(shù)據(jù)集的高度,無序點云會是1
VIEWPOINT 0 0 0 1 0 0 0 //指定數(shù)據(jù)集中點云的獲取視點。
POINTS 213 //點云中點的數(shù)目
DATA ascii //數(shù)據(jù)保存的編碼方式
0.93773 0.33763 0 4.2108e+06 //每個點的數(shù)據(jù),根據(jù)FIELDS,可知按順序分別是x,y,z rgb
0.90805 0.35641 0 4.2108e+06
pcd作為PCL庫官方指定格式,典型的為點云量身定制的格式。優(yōu)點是支持n維點類型擴展機制,能夠更好的發(fā)揮PCL庫的點云處理性能。文件格式有文本和二進制兩種格式。僅能支持點云數(shù)據(jù),不能支持線面數(shù)據(jù)。
-
*.off
OFF格式文件頭有兩行:第一行以off關(guān)鍵字開頭,第二行表示頂點數(shù)、面數(shù)、邊數(shù)。主體分為頂點坐標(頂點列表)和面的頂點索引(面列表)兩個部分,其中每個面的頂點數(shù)可以指定,用第一個數(shù)表示。
OFF
頂點數(shù) 面數(shù) 邊數(shù)
x y z
x y z
…
n個頂點 頂點1的索引 頂點2的索引 … 頂點n的索引
…
OFF
8 6 0
-0.500000 -0.500000 0.500000
0.500000 -0.500000 0.500000
-0.500000 0.500000 0.500000
0.500000 0.500000 0.500000
-0.500000 0.500000 -0.500000
0.500000 0.500000 -0.500000
-0.500000 -0.500000 -0.500000
0.500000 -0.500000 -0.500000
4 0 1 3 2
4 2 3 5 4
4 4 5 7 6
4 6 7 1 0
4 1 7 5 3
4 6 0 2 4
OFF相對其他格式,更加的簡單,可以存儲點和面,僅有文本格式。
-
*.xyz
xyz以行數(shù)來表明點數(shù),沒有頭進行解釋(此外還有一種xyz 格式,是一種原子構(gòu)型文件)
17.371559 -6.531680 -8.080792 0.242422 0.419118 0.874970 //一般前三個數(shù)帶標xyz,后面三個數(shù)代表法向量,也有代表顏色信息的。
15.640106 -16.101347 -9.550241 -0.543610 -0.382877 0.746922
17.750742 -6.395478 -8.307115 0.333093 0.494766 0.802655
15.432834 -15.947010 -9.587061 -0.548083 -0.385148 0.742473
23.626318 -7.729815 -13.608750 0.081697 0.502976 0.860431
15.300377 -15.610346 -9.547507 -0.569658 -0.341132 0.747743
23.975805 -7.512131 -13.775388 0.082388 0.564137 0.821561
24.251831 -7.345085 -13.949208 0.099309 0.574142 0.812711
這個文件的優(yōu)點是很簡單,直接重新造輪子也沒有問題,缺點是表意不明。
-
*.ply
文件主要組成部分
Header (頭部)
Vertex List (頂點列表)
Face List (面列表)
(lists of other elements) (其它元素列表)
ply //關(guān)鍵字
format ascii 1.0 //文件編碼格式
comment author: Greg Turk // 注釋
comment object: another cube //注釋
element vertex 8 // 定義元素為頂點 數(shù)目為8個
property float x // 上述頂點元素中的屬性 x,數(shù)據(jù)類型為float
property float y // 上述頂點元素中的屬性 y,數(shù)據(jù)類型為float
property float z // 上述頂點元素中的屬性 z,數(shù)據(jù)類型為float
property uchar red // 上述頂點元素中的屬性 red,數(shù)據(jù)類型為uchar
property uchar green // 上述頂點元素中的屬性 green,數(shù)據(jù)類型為uchar
property uchar blue // 上述頂點元素中的屬性 blue,數(shù)據(jù)類型為uchar
element face 7 // 定義面元素,數(shù)目為7個
property list uchar int vertex_index // 定義面元素內(nèi)的列表屬性,列表開頭以uchar的數(shù)值表示列表的項目數(shù),后面接著型態(tài)為int的頂點索引值(vertex_indices),頂點索引值從0開始。
element edge 5 //定義元素為邊,數(shù)目為5個
property int vertex1
property int vertex2
property uchar red
property uchar green
property uchar blue
end_header // 文件頭部分結(jié)束
0 0 0 255 0 0 //頂點的開始,分別為x y z r g b
0 0 1 255 0 0
0 1 1 255 0 0
0 1 0 255 0 0
1 0 0 0 0 255
1 0 1 0 0 255
1 1 1 0 0 255
1 1 0 0 0 255
3 0 1 2 //面的開始,這是個三角行,分別有第0 ,1, 2 相連
3 0 2 3
4 7 6 5 4 // 這是個四邊形,頂點分別是第 7 6 5 4個點
4 0 4 5 1
4 1 5 6 2
4 2 6 7 3
4 3 7 4 0
0 1 255 255 255 // 邊的開始,頂點分別是第0個與第一個點,顏色是255,255,255
1 2 255 255 255
2 3 255 255 255
3 0 255 255 255
PLY多邊形文件格式,用于存儲被描述為多邊形集合的圖形對象的格式,有用于輕松啟動的ASCII表示形式,以及用于緊湊存儲和快速保存和加載的二進制版本。它可以儲存的資訊包含顏色、透明度、表面法向量、材質(zhì)座標與資料可信度,并能對多邊形的正反兩面設(shè)定不同的屬性,是一個比較通用和普遍的格式。
-
*.las
LiDAR數(shù)據(jù)的工業(yè)標準格式,旨在提供一種開放的格式標準,允許不同的硬件和軟件提供商輸出可互操作的統(tǒng)一格式。是一種二進制文件格式。las文件格式除了基本的三維坐標之外,保留了原始掃描的數(shù)據(jù)采集信息。
一個符合LAS標準的LIDAR文件分為三個部分:公用文件頭塊、變量長度記錄和點數(shù)據(jù)記錄。
LAS文件包含以下信息:
C--class(所屬類)
XYZ -三維坐標
F一flight(航線號)
T一time(GPS時間)
I一intensity(回波強度)
R一return(第幾次回波)
N一number of return(回波次數(shù))
A一scan angle(掃描角)
RGB一red green blue(RGB顏色值)
-
*.obj
obj是一種文本文件,通常用以“#”開頭的注釋行作為文件頭,數(shù)據(jù)部分每一行的開頭關(guān)鍵字代表該行數(shù)據(jù)所表示的幾何和模型元素,以空格做數(shù)據(jù)分隔符。
# The units used in this file are centimeters.
g default // 組名稱
v -0.500000 -0.500000 0.500000 // v 代表頂點坐標
v 0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v 0.500000 0.500000 0.500000
v -0.500000 0.500000 -0.500000
v 0.500000 0.500000 -0.500000
v -0.500000 -0.500000 -0.500000
v 0.500000 -0.500000 -0.500000
vt 0.000000 0.000000 //"vt"代表點的貼圖坐標
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 2.000000
vt 1.000000 2.000000
vt 0.000000 3.000000
vt 1.000000 3.000000
vt 0.000000 4.000000
vt 1.000000 4.000000
vt 2.000000 0.000000
vt 2.000000 1.000000
vt -1.000000 0.000000
vt -1.000000 1.000000
vn 0.000000 0.000000 1.000000 //vn 代表頂點法線
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
vn -1.000000 0.000000 0.000000
s off //表示關(guān)閉光滑組
g pCube1 //
usemtl initialShadingGroup //表示使用的材質(zhì)
f 1/1/1 2/2/2 4/4/3 3/3/4 //f 面,頂點索引/uv點索引/法線索引
f 3/3/5 4/4/6 6/6/7 5/5/8
f 5/5/9 6/6/10 8/8/11 7/7/12
f 7/7/13 8/8/14 2/10/15 1/9/16
f 2/2/17 8/11/18 6/12/19 4/4/20
f 7/13/21 1/1/22 3/3/23 5/14/24
obj文件的特點:
- OBJ是一種3D模型文件,因此不包含動畫、材質(zhì)特性、貼圖路徑、動力學、粒子等信息。
- OBJ文件主要支持多邊形(Polygons)模型,也支持曲線(Curves)、表面(Surfaces)、點組材質(zhì)(Point Group Materials)。
- OBJ文件支持三個點以上的面。
- OBJ文件支持法線和貼圖坐標。
obj還有很多更復雜的內(nèi)容,再次就不進行更多的解釋了。
相應基礎(chǔ)算法庫對不同格式的支持
上面的這些點云文件的格式用代碼實現(xiàn)解析也是非常容易的。但是作為一個開發(fā)者,最大的忌諱就是不要重復造輪子(練習另當別論)。所以,下面羅列了一下,當前我用的比較多的開源算法基礎(chǔ)庫對點云讀取的支持。
-
PCL
PCL(Point Cloud Library)是在吸收了前人點云相關(guān)研究基礎(chǔ)上建立起來的大型跨平臺開源C++編程庫,它實現(xiàn)了大量點云相關(guān)的通用算法和高效數(shù)據(jù)結(jié)構(gòu),涉及到點云獲取、濾波、分割、配準、檢索、特征提取、識別、追蹤、曲面重建、可視化等。支持多種操作系統(tǒng)平臺。缺點就是:目前庫的維護好像停滯了……
支持文件讀?。篜LY、PCD、OBJ、VTK、IFS
-
vcglib
VCG Libary(Visulization and Computer Graphics Libary)是專門為處理三角網(wǎng)格而設(shè)計的,庫很大,且提供了許多先進的處理網(wǎng)格的功能,以及比較少的點云處理功能。用的比較的輕型點云處理軟件meshlab就是以vcglib為底層實現(xiàn)的。這個庫的缺點就是文檔太少了(基本等于沒有),對初學者不友好。
支持文件讀取: PLY, STL, OFF, OBJ, 3DS, COLLADA, PTX, V3D, PTS, APTS, XYZ, GTS, TRI, ASC, X3D, X3DV, VRML, ALN
支持文件保存: PLY, STL, OFF, OBJ, 3DS, COLLADA, VRML, DXF, GTS, U3D, IDTF, X3D
-
cgal
CGAL(Computational Geometry Algorithms Library)計算幾何算法庫,設(shè)計目標是,以C++庫的形式,提供方便,高效,可靠的幾何算法。其實現(xiàn)了很多處理點云以及處理網(wǎng)格的算法。個人感覺里面實現(xiàn)了很多比較新的算法,對于學習算法和測試demo還是比較好的,文檔也比較全面。缺點就是代碼比較難讀,庫的結(jié)構(gòu)也比較復雜,每個算法的相干性不是很高,代碼運行的效率不是很高。
支持的文件讀?。豪锩婷恳环N數(shù)據(jù)結(jié)構(gòu)都基本上有自己的文件格式,但是大多數(shù)還是支持ply,xyz,off等。
-
Open3d
Open3D 是一個可以支持 3D 數(shù)據(jù)處理軟件快速開發(fā)的開源庫。Open3D 前端公開了一組用 C++ 和 Python 寫成的精心挑選的數(shù)據(jù)結(jié)構(gòu)和算法,后端高度優(yōu)化并設(shè)置為并行。代碼較整潔,而且維護程度較高。作為intel的2018才公布的開源項目,在點云、網(wǎng)格、rgbd數(shù)據(jù)上都有支持,雖然現(xiàn)在的開源的算法較少,估計日后在3D視覺領(lǐng)域如同opencv在2d圖像一樣的流行吧,畢竟PCL是學校學生維護的(基本上不維護了)。
支持的文件讀取:xyz、pts、ply、pcd
總結(jié)
本文主要介紹了一些常見的點云文件的格式以及相關(guān)的3D處理開源算法庫。目的主要是為了了解這些格式,加深對點云組成的理解,以及方便日后讀取文件時進行查看。
重要的事情說三遍:
如果您看到我的文章對您有所幫助,那就點個贊唄 ( * ^ __ ^ * )
如果您看到我的文章對您有所幫助,那就點個贊唄( * ^ __ ^ * )
如果您看到我的文章對您有所幫助,那就點個贊唄( * ^ __ ^ * )
傳統(tǒng)2D計算機視覺學習筆記目錄------->傳送門
傳統(tǒng)3D計算機視覺學習筆記目錄------->傳送門
任何人或團體、機構(gòu)全部轉(zhuǎn)載或者部分轉(zhuǎn)載、摘錄,請保留本博客鏈接或標注來源。博客地址:開飛機的喬巴
作者簡介:開飛機的喬巴(WeChat:zhangzheng-thu),現(xiàn)主要從事機器人抓取視覺系統(tǒng)以及三維重建等3D視覺相關(guān)方面,另外對slam以及深度學習技術(shù)也頗感興趣,歡迎加我微信或留言交流相關(guān)工作。