LAZ和LAS
下圖為標准LAS的數據類型,論文將其分類為四種類型
數據壓縮 解壓 序列化 反序列化
LASzip
Rapidlasso GmbH 的免費開源產品,可以將快速將龐大的 LAS 文件轉換為緊湊的 LAZ 文件而不會丟失信息。
LASzip 是 2012 年地理空間世界論壇獲得激光雷達處理技術創新獎,也是 2012 年 INTERGEO 創新產品的亞軍。
圖片中是用PDAL工具壓縮后和壓縮前的大小對比。壓縮后是原數據的0.498倍。
paper簡介:LASzip壓縮器對點集進行分塊壓縮,由四部分組成:POINT10,GPSTIME10,RGB12和WAVEPACKET13。
解壓和壓縮過程是借鑒的 這篇文章
,是用一個類似於kdtree/Octree的分類方式,簡單來說就是,對線性增量即熵求最優,也是分為8個維度然后每個維度的線性預測差值區間為,可以構造類似與八叉樹的結構進行編碼。
軟件是開源的,且向后兼容。
且允許在壓縮后的laz文件中查找點,每5萬點分成一個壓縮快,一個文件由多個壓縮塊組成。
point10的壓縮,我們以Return Number(r)和Number of Returns of Pulse(n)重構為例,具體是根據一些二進制掩碼什么的重構的,重構示意:
重構后的字段信息:
還會生成一個l陣,l = n - r
其余的也是會生成類似的矩陣
MEPG
MEPG是做視頻壓縮為主的公司,在VR相關工作中,開發了點雲壓縮技術——PCC(point cloud compression)。發展出了基於視頻的PCC(V-PCC)和基於幾何的PCC(G-PCC)。
分別介紹V-PCC和G-PCC。
V-PCC:
其技術是基於之前開發的視頻壓縮技術,視頻流是二維圖像數據,故先將3D點雲投影到2D上。基礎版本的V-PCC發表在《An emerging point cloud compression standard》上。
投影方式是基於±x, ± y, ± z的正交投影,根據點的法向量確定最相關的投影方向。為了避免三維到二維轉換中,不同三維點對應同一二維平面點,將不同距離的點投影到不同的二維圖像中,看成多個視頻流。投影過程中還有一些其他小的Tricks,比如考慮深度值的變換差值、空點插值等,以及插值造成的重復點的剪枝等。
這種形式類似於視頻,可以進行分辨率之類的設置,可以有損也可以無損壓縮,中間的一些Tricks可能造成,壓縮前后點雲數量不一致的情況(本人推測)。
G-PCC
這種方式是需要先進行體素化的,本身體素化的過程就是有損的,其后面的過程可以保證無損,但整個過程注定是有損的。其編碼方式借鑒了八叉樹,根據點雲每個體素內的占用與否編碼成二進制,占用為1不占用為0。
這種方式的壓縮有三種編碼方式供選擇,(a) RAHT; (b) Predicting Transform;(c) Lifting Transform,其中只有Predicting Transform,是無損的。
這里只介紹無損的Predicting Transform,它是一種基於插值的分層最近鄰預測方案。他有一種特定的歐式距離的點的划分准則,下圖划分了三個歐式距離范圍層級,層級越高分辨率越低(L),層級越低細化程度越高(H)。
查找最近點的時候先在同一層級中查找,再去往下一個相鄰層級。
編碼的時候先是最高層級的往低層級的分裂,層級屬性為分辨率L(N)和細化程度H(N),同時會根據規則生成一個預測值P(N)和偏差值D(N),在解碼時用同樣的數值反變換即可。
Lastool讀取laz點雲相關代碼梳理
測試結果
測試目標 | Darco | lz4 | lazperf | laszip |
---|---|---|---|---|
文件格式(大小、點數) | 壓縮前.ply(818kb 7w點)——壓縮后.drc | 壓縮前.las(262M左右 809w點)——壓縮后.lz4 | 壓縮前.las(262M左右 809w點)——壓縮后.laz | 壓縮前.las(279M左右 984w點)——壓縮后.laz |
壓縮率 | 50%(-qp = 20) 43%(-qp = 16) 33%(-qp = 13(默認數值)) | 總體在百分之30-50左右比較看數據(各字段二進制編碼相似程度) | 25%左右 | 25%左右 |
誤差 | <萬分之一(-qp = 20) 萬分之三(-qp = 16) 千分之二(-qp = 13(默認數值)) | 無損 | 無損 | 無損 |
壓縮時間 | 441ms(-qp = 20) 309ms(-qp = 16) 290ms(-qp = 13) | 3979ms | 直接保存為laz格式,不計時間,不做實時存取,直接讀.laz | 直接保存為laz格式,不計時間,不做實時存取,直接讀.laz |
解壓時間 | 131ms(-qp = 20) 121ms(-qp = 16) 113ms(-qp = 13) | 445ms | 直接讀取遍歷所有x坐標點,laz:60969ms las:3018ms | 直接讀取遍歷所有x坐標點,laz:18511ms las:4051ms |
注:后面會出laslayer相關的文章,是一種IO提速方式,會讓laszip下laz讀取的時間大大降低。這里測試的是沒做過laslayers處理的laz,進行坐標遍歷