3D數據及數據集


1 點雲

在做3D視覺的時候,處理的主要是點雲,點雲就是由一些點的集合。點雲在組成特點上分為兩種,一種是有序點雲,一種是無序點雲。

  • 有序點雲:一般由深度圖還原的點雲,有序點雲按照圖方陣一行一行的,從左上角到右下角排列,當然其中有一些無效點因為。有序點雲按順序排列,可以很容易的找到它的相鄰點信息。有序點雲在某些處理的時候還是很便利的,但是很多情況下是無法獲取有序點雲的。
  • 無序點雲:無序點雲就是其中的點的集合,點排列之間沒有任何順序,點的順序交換后沒有任何影響。是比較普遍的點雲形式,有序點雲也可看做無序點雲來處理。

目前就文件格式而言有ASCII碼和二進制兩種編碼形式,ASCII碼可以直接閱讀里面存儲的內容,二進制的保存形式則不可讀,但體積會更小。這兩種保存都是沒有進行過壓縮的。
文件的內容的組成就有很多種形式了,常見的格式:

*.pcd
*.off
*.xyz
*.ply
*.las
*.laz
*.obj
*.stl
*.vtk
*.3ds
...

1.1 pcd文件

pcd作為PCL庫官方指定格式,典型的為點雲量身定制的格式。優點是支持n維點類型擴展機制,能夠更好的發揮PCL庫的點雲處理性能。文件格式有文本和二進制兩種格式。僅能支持點雲數據,不能支持線面數據。

# .PCD v.7 - Point Cloud Data file format    
VERSION .7               //指定PCD文件版本
FIELDS x y z rgb        //指定一個點可以有的每一個維度和字段的名字
SIZE 4 4 4 4              //用字節數指定每一個維度的大小
TYPE F F F F              //用一個字符指定每一個維度的類型
COUNT 1 1 1 1           //指定每一個維度包含的元素數目
WIDTH 213                //用點的數量表示點雲數據集的寬度
HEIGHT 1                  //用點的數量表示點雲數據集的高度,無序點雲會是1
VIEWPOINT 0 0 0 1 0 0 0    //指定數據集中點雲的獲取視點。
POINTS 213              //點雲中點的數目
DATA ascii                 //數據保存的編碼方式
0.93773 0.33763 0 4.2108e+06        //每個點的數據,根據FIELDS,可知按順序分別是x,y,z rgb
0.90805 0.35641 0 4.2108e+06

1.2 off文件

OFF格式文件頭有兩行:第一行以off關鍵字開頭,第二行表示頂點數、面數、邊數。主體分為頂點坐標(頂點列表)和面的頂點索引(面列表)兩個部分,其中每個面的頂點數可以指定,用第一個數表示。OFF相對其他格式,更加的簡單,可以存儲點和面,僅有文本格式。

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

1.3 xyz文件

xyz以行數來表明點數,沒有頭進行解釋。

17.371559 -6.531680 -8.080792 0.242422 0.419118 0.874970  //一般前三個數帶標xyz,后面三個數代表法向量,也有代表顏色信息的。
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 

1.4 ply文件

PLY多邊形文件格式,用於存儲被描述為多邊形集合的圖形對象的格式,有用於輕松啟動的ASCII表示形式,以及用於緊湊存儲和快速保存和加載的二進制版本。它可以儲存的信息包含顏色、透明度、表面法向量、材質座標與資料可信度,並能對多邊形的正反兩面設定不同的屬性,是一個比較通用和普遍的格式。

ply                                          //關鍵字
format ascii 1.0                    //文件編碼格式
comment author: Greg Turk                            // 注釋
comment object: another cube                      //注釋
element vertex 8                                        // 定義元素為頂點 數目為8個
property float x                                          // 上述頂點元素中的屬性 x,數據類型為float
property float y                                          // 上述頂點元素中的屬性 y,數據類型為float
property float z                                          // 上述頂點元素中的屬性 z,數據類型為float
property uchar red                                   // 上述頂點元素中的屬性 red,數據類型為uchar
property uchar green                               // 上述頂點元素中的屬性 green,數據類型為uchar
property uchar blue                                // 上述頂點元素中的屬性 blue,數據類型為uchar
element face 7                                        // 定義面元素,數目為7個
property list uchar int vertex_index      // 定義面元素內的列表屬性,列表開頭以uchar的數值表示列表的項目數,后面接着型態為int的頂點索引值(vertex_indices),頂點索引值從0開始。
element edge 5                                      //定義元素為邊,數目為5個
property int vertex1                  
property int vertex2                  
property uchar red                    
property uchar green
property uchar blue
end_header                                                  // 文件頭部分結束
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

1.5 las文件

LiDAR數據的工業標准格式,旨在提供一種開放的格式標准,允許不同的硬件和軟件提供商輸出可互操作的統一格式。是一種二進制文件格式。las文件格式除了基本的三維坐標之外,保留了原始掃描的數據采集信息。
一個符合LAS標准的LIDAR文件分為三個部分:公用文件頭塊、變量長度記錄和點數據記錄。
LAS文件包含以下信息:

  • C--class(所屬類)
  • XYZ -三維坐標
  • F一flight(航線號)
  • T一time(GPS時間)
  • I一intensity(回波強度)
  • R一return(第幾次回波)
  • N一number of return(回波次數)
  • A一scan angle(掃描角)
  • RGB一red green blue(RGB顏色值)

1.6 obj文件

obj是一種文本文件,通常用以“#”開頭的注釋行作為文件頭,數據部分每一行的開頭關鍵字代表該行數據所表示的幾何和模型元素,以空格做數據分隔符。

  • OBJ是一種3D模型文件,因此不包含動畫、材質特性、貼圖路徑、動力學、粒子等信息。
  • OBJ文件主要支持多邊形(Polygons)模型,也支持曲線(Curves)、表面(Surfaces)、點組材質(Point Group Materials)。
  • OBJ文件支持三個點以上的面。
  • OBJ文件支持法線和貼圖坐標。
# 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 
...
vt 0.000000 0.000000               //"vt"代表點的貼圖坐標
vt 1.000000 0.000000 
vt 0.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 
...
s off                                   //表示關閉光滑組
g pCube1  
usemtl initialShadingGroup             //表示使用的材質
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 

1.7 mtl文件

.mtl文件(Material Library File)是材質庫文件,描述的是物體的材質信息,ASCII存儲,任何文本編輯器可以將其打開和編輯。一個.mtl文件可以包含一個或多個材質定義,對於每個材質都有其顏色,紋理和反射貼圖的描述,應用於物體的表面和頂點。

# 定義一個名為 'xxx'的材質
newmtl xxx
# 材質的環境光(ambient color)
Ka 0 0 0
# 散射光(diffuse color)用Kd
Kd 0.784314 0.784314 0.784314
# 鏡面光(specular color)用Ks
Ks 0 0 0
# 折射值 可在0.001到10之間進行取值。若取值為1.0,光在通過物體的時候不發生彎曲。玻璃的折射率為1.5。
Ni 1
# 反射指數 定義了反射高光度。該值越高則高光越密集,一般取值范圍在0~1000。
Ns 400
# 濾光透射率
Tf 1 1 1
# 漸隱指數描述 參數factor表示物體融入背景的數量,取值范圍為0.0~1.0,取值為1.0表示完全不透明,取值為0.0時表示完全透明。
d 1
# 為漫反射指定顏色紋理文件
map_Kd test_vt.bmp

2 Mesh

3 體素

4 算法庫支持

4.1 PCL

PCL(Point Cloud Library)是在吸收了前人點雲相關研究基礎上建立起來的大型跨平台開源C++編程庫,它實現了大量點雲相關的通用算法和高效數據結構,涉及到點雲獲取、濾波、分割、配准、檢索、特征提取、識別、追蹤、曲面重建、可視化等。支持多種操作系統平台。缺點就是:目前庫的維護好像停滯了……
支持文件讀取:PLY、PCD、OBJ、VTK、IFS

4.2 vcglib

VCG Libary(Visulization and Computer Graphics Libary)是專門為處理三角網格而設計的,庫很大,且提供了許多先進的處理網格的功能,以及比較少的點雲處理功能。用的比較的輕型點雲處理軟件meshlab就是以vcglib為底層實現的。這個庫的缺點就是文檔太少了(基本等於沒有),對初學者不友好。
支持文件讀取: 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

4.3 cgal

CGAL(Computational Geometry Algorithms Library)計算幾何算法庫,設計目標是,以C++庫的形式,提供方便,高效,可靠的幾何算法。其實現了很多處理點雲以及處理網格的算法。個人感覺里面實現了很多比較新的算法,對於學習算法和測試demo還是比較好的,文檔也比較全面。缺點就是代碼比較難讀,庫的結構也比較復雜,每個算法的相干性不是很高,代碼運行的效率不是很高。
支持的文件讀取:里面每一種數據結構都基本上有自己的文件格式,但是大多數還是支持ply,xyz,off等。

4.4 Open3d

Open3D 是一個可以支持 3D 數據處理軟件快速開發的開源庫。Open3D 前端公開了一組用 C++ 和 Python 寫成的精心挑選的數據結構和算法,后端高度優化並設置為並行。代碼較整潔,而且維護程度較高。作為intel的2018才公布的開源項目,在點雲、網格、rgbd數據上都有支持,雖然現在的開源的算法較少,估計日后在3D視覺領域如同opencv在2d圖像一樣的流行吧,畢竟PCL是學校學生維護的(基本上不維護了)。
支持的文件讀取:xyz、pts、ply、pcd

5 ShapeNet數據集

ShapeNet包含兩個子集:

  • ShapeNetCore
    55個類別,51300個3D模型
  • ShapeNetSem
    270個類別,12000個3D模型

5.1 ShapeNetCore

  • 文件組織結構
- <synsetId>
      - <modelId>
            - model.obj : (3D Rotatable version of the image)
            - model.mtl : Materials file for OBJ; Includes the name of texture files and material properties.
            - images
                  - jpg, png: Textures for the 3D model
- <synsetId>.csv : (Metadata associated with the model of the synset)
- ...
  • 57個zip文件。每一個zip文件都以synset命名,是一組3D模型的集合。
  • 每一個模型都有一個以source id命名的文件夾,其中包含了該模型的OBJ、MTL和texture image文件。
  • 57個csv文件。同時每個synset集合都有一個相應的csv文件,包含了這組模型的一些元數據。
  • OBJ文件是經過預對齊的,+Y為向上的方向,+X為向前的方向,並且每個模型都是歸一化的,可以包含在一個以坐標原點為中心的單位立方體內。因此,X-Y平面成為多數類別的對稱平面。
  • get-metadata.sh文件。可以重新下載前面所提到的csv文件(元數據)的腳本。
  • taxonomy.json文件。用JSON格式記錄了ShapeNetCore數據集中每個synset的synsetId, name, children和numInstances.
  • jq文件是一個處理JSON文件的庫。

5.2 ShapeNetSem

參考資料

https://www.jianshu.com/p/b52e152d44a9
https://www.jianshu.com/p/ffedad5e8e30


免責聲明!

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



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