Las與Laz點雲文件格式的區別

Las與Laz點雲文件的讀取

最近研究了一下點雲文件格式las與laz,讀取方式的話調用的是LAStools庫。編譯方式沒有什麼特別的,可能Cmake生成後編譯不通過,原來每個exe中的cpp文件有一行代碼少了個括號,自行加上即可。通過對代碼的調試與文獻閱讀,總體有以下兩點結論:

  1. las與laz相比,其佔用磁盤內存減少,大概在4倍左右;
  2. laz較las讀取時間降低,測試了一個8個G的與一個6個G的文件,效率降低也在4倍左右。通過CloudCompare進行導入,也能夠明顯地感覺出來導入速度變慢。

文獻主要是一篇Laszip對應的文章,詳細講述了las是如何壓縮爲laz的。但是我還在研究這篇文章,所以本文暫時不詳細講述具體壓縮方法,只講述自己所做實驗與以上兩點造成的原因,純屬個人理解,望評!這裏附上文章下載鏈接:《LASzip: lossless compression of LiDAR data》不過好像需要翻牆,推薦使用翻牆軟件PSIPHON。

Las

首先介紹一下Las格式的點雲存儲方式。對於每條掃描脈衝來說,掃描儀記錄了返回波段。掃描儀脈衝可能有多個峯值,因爲激光在到達地面之前可能撞擊到多種表面,如電線或者天線、樹葉甚至小鳥。每一個在一定閾值以上的峯值成爲一個“返回”。這些帶有反射強度,掃描角度,GPS時間,返回數值,飛行先ID等等的座標信息是我們感興趣的數據。爲了在不同軟件中實現數據格式交換,通常的做法是將座標文件轉換爲ASCII格式,每一行代表一個“返回”的屬性。這種方法雖然靈活病便於理解,但是用文本格式存儲百萬甚至千萬級別的記錄是十分笨拙的,更重要的是無法在文件中進行查找。

直到Las 1.3,每一個點記錄有核心的20個bytes,其中12個bytes記錄了整數形式的xyz座標。LAS的頭信息記錄了對於整數座標的縮放因子。剩下的8個bytes儲存了反射強度信息,掃描角度,返回數量,分類信息等等。這些信息組成了基本的point type 0。另外point type 1和3添加了8 byte的GPS time,point type 2與3 增加了6 byte來存儲RGB顏色信息。LAS 1.3引入了point type 4和5 允許附加對於每個“返回”的波形信息,但是很少使用。使用浮點數的表示形式意味着數字的精度取決於數字不同的值。越靠近0,精度越高。

從上述可以看出,LAS格式最大的特點就是在存儲點座標時使用縮放因子與平移量的方式。其實,很多人都認爲浮點數比整數具有較高的精度,但這是錯誤的概念。論文裏有具體的分析,大家可以仔細閱讀。LiDAR座標大多分佈在x-y平面上,這是因爲使用了大地座標與高斯投影的緣故。

Las 1.0-1.3在實際的點數據之前存在一個頭信息。前227 bytes的頭信息定義了Las文件,包含了變長記錄的數量,相對於第一個點的平移量,每個點的類型和大小,點雲數量,整數點座標的平移量和縮放因子以及點雲的包圍盒。在LAS 1.3中,每個點都附加了一個波形信息,共235 bytes。額外的8 bytes信息描述了波形數據的開始。如果這個字段爲0,則波形數據存儲在外部的WDP文件中。如果這個字段不爲0,波形數據存儲在LAS文件內。LASzip還不支持波形數據在LAZ文件內,總是把它寫在外部的WDP文件。

Laz

Laz文件是Las文件的一種壓縮格式,在LAStools中就有Laszip這個exe,可以直接調用。Laszip壓縮器把Las數據中點類型看做四種不同的數據組成的:POINT10,GPSTIME10,RGB12和WAVEPACKET13,針對這個四種數據分別進行壓縮。例如,點類型3是由POINT10後面跟着GPSTIME10和RGB12組成的。另外,每個點可能有一個“n”在最後,稱作“額外的bytes”。

點集壓縮

  1. 有損於無損
    有損壓縮方案通過輕微的改變點的位置,即座標,並且能夠保證物體表面的基本形狀即可。這種方案主要應用在只要求可視化效果的程序中。而無損壓縮方案通過使用“uniform precision”把點座標改成用縮放因子表示的數值,即修改量化點座標的形式。
  2. progressive versus non-progressive (or single-rate)(我沒理解這一部分)
  3. 流和非流
    流方案在讀取一部分數據之後開始壓縮點並輸出壓縮文件,反之,在在只讀取一部分壓縮文件後開始解壓縮。非流方案在壓縮與解壓縮的時候都是將點全部讀進內存。
  4. 點重排列與保持原始順序
    點重排列方案不在文件中保持原始點順序,它的壓縮增益來源於將點重新排列成一種聰明的順序。
    保持原始順序則反之。
  5. 連續的和隨機獲取
    連續方案依照點在壓縮文件中的編碼方式解壓縮。隨機獲取方案可以在壓縮文件中搜索並且只解壓一部分文件。

The LASzip compressor is lossless, non-progressive,
streaming, order-preserving, and provides random-access.

LASzip

laszip不對Las的頭信息或者任何變長記錄進行壓縮。變長記錄如下圖所示
在這裏插入圖片描述
它只是從las文件拷貝到laz文件中。然而它對當前的point type值加上128來防止標準的LAS讀取器嘗試讀取壓縮後的LAZ文件。另外增加了一個變長記錄指明瞭壓縮的點和使用的不同的壓縮選項的構成。LASzip壓縮器把不同的點類型看做由四部分組成:POINT10,GPSTIME10,RGB12和WAVEPACKET13。每一項都有自己的壓縮器,並且它們自己具有版本號,使得壓縮器模塊化,並且易於擴展到其他點類型。

LASzip壓縮器對點集進行分塊壓縮,這使得在壓縮文件中可以進行查找。默認的塊大小爲50000個點。Chunking makes it possible to, for example, augment the produced LAZ files with spatial indexing LAX files [2] and support area of- interest queries that decompress only the relevant parts of a compressed LAZ file。因爲每一個壓縮的塊都具有不同的大小,壓壓縮器在文件末尾存儲了一個“chunk table”,指明每一塊的開始byte位置。

當開始一個新的chunk時,Laszip把第一個點存儲爲原始的字節,作爲後來的預測方案的初值。以下所有的點數據都按一項一項的壓縮。這裏的項就是上述的POINT10,GPSTIME10,RGB12和WAVEPACKET13。
文章中針對每一項的壓縮方案做了具體介紹,我能力有限,還在研究。

讀取las與laz實驗

本文使用兩個las點雲文件進行實驗,這裏分別命名爲#1與#2。在Lastools中使用laszip庫進行壓縮,得到壓縮後的laz文件,命名爲#1_laz與#2_laz。在實驗中,對壓縮前後,其所佔磁盤內存大小與讀取時間進行對比,得到以下結果。

  1. 磁盤內存佔用大小
    在這裏插入圖片描述
  2. 讀取時間
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章