开源点云实时压缩方案测试
點擊“藍字”關注我們,選擇“星標”獲取最新文章
上周在一篇共享的開源的方案中我們介紹了理論的研究部分,處于好奇,本人決定親自測試一下該開源的方案,雖然了解PCL的同學應該都知道,該開源庫中也有關于點云的壓縮和解壓的研究,效果也很好。在之前的博客中,我們有過介紹,將來如果有機會更加可以繼續深入解析其中的理論以及代碼部分,這里我們首先來學習一下這一優秀的開源代碼。首先介紹一下這篇文章《Real-Time Spatio-Temporal LiDAR Point Cloud Compression》
本文提出了一個新的系統,可以有效地壓縮一系列點云。利用點云幀序列中的空間和時間冗余的思想。首先在點云序列中識別關鍵幀,然后通過迭代平面擬合對關鍵幀進行空間編碼。然后我們利用連續點云在物理空間中有大量重疊的事實,因此空間編碼的數據可以(重新)用于對時間流進行編碼。利用空間編碼數據進行時間編碼,不僅提高了壓縮率,而且避免了冗余計算,大大提高了壓縮速度。實驗表明,我們的壓縮系統達到了40×90的壓縮率,明顯高于MPEG的LiDAR點云壓縮標準,同時保持了較高的端到端應用精度。同時,我們的壓縮系統的壓縮速度與目前激光雷達的點云生成速率相匹配,并優于現有的壓縮系統,實現了實時點云傳輸。
具體文章可查看:
github地址:
https://github.com/horizon-research/Real-Time-Spatio-Temporal-LiDAR-Point-Cloud-Compression由于在測試時,編譯有點小問題,所以這里對源代碼進行了一些重構,在代碼結構上進行了CMake重構,將頭文件和源文件進行了部分修改。
整理后的代碼地址:
https://github.com/yaoli1992/LiDAR-Point-Cloud-Compression
測試內容介紹
原始的代碼給出了data 和src兩個文件,其中data是給的測試數據,代碼是在src中,并且使用的Makefile編譯。
根據文件的命名,可以一目了然的知道每一個文件是什么作用,代碼上看起來是比較簡單明了的,這里面也給出了六個測試代碼,分別是對單幀點云數據和多幀的點云數據的壓縮和解壓以及完整的測試,具體如下:
* 'pcc_encoder':對單幀點云進行編碼的編碼器。
* 'pcc-decoder':解碼單幀點云的解碼器。
* 'pcc_test':這是一個完整的測試代碼。
* 'pcc_stream_encoder':對多幀的點云數據流進行編碼的編碼器。
* 'pcc_stream_decoder':解碼多幀的點云數據流解碼器。
* 'pcc_stream_test':這是多幀數據流完整的測試。
使用了opencv4和boost庫函數,如果你的電腦端正好有這兩個庫,那么你就直接make吧,可以直接編譯和使用,但是由于本人的電腦只有opencv3.4以及boost1.58,修改后在編譯的時候仍然沒有成功,所以我決定將代碼重新構建一下,使用cmake進行編譯,并且為了測試壓縮前后點云數據的質量,我已經引入了點云庫PCL,對點云進行一些轉換和可視化,
同時將代碼的公共部分編譯成一個.so的動態鏈接庫,這樣我們就可以很好的整合這些代碼了,這里可以先看一下,本人在構建完成后的文件夾有哪些,如圖:
每個文件夾的說明如下:
build:主要是我們的編譯文件,以及生成的可執行文件。
data:是原始的數據文件,這里沒有做改變
include:主要存放原始文件中的頭文件
lib:文件主要是保存在接下來的編譯中生成的.so動態鏈接庫
src:主要用于存放原始文件的實現函數,主要是.cpp文件。
pcl_test:是我臨時增加的一個基于點云庫的bin文件轉到pcd文件
test:主要是實驗單幀和多幀點云數據壓縮和解壓的測試代碼。
CmakeLists.txt:增加cmake文件。
重新構建的代碼剛剛分享在了我的github地址上,所以有需要的直接下載后,使用cmake的方式編譯代碼即可,
編譯完成后生成動態鏈接庫,以及可執行的二進制文件
接下來我們就可以根據提供的數據和生成的二進制文件進行一些測試,在測試之前,可以根據我提供的pcl_test文件生成一個pcl_bin2pcd的可執行文件,并使使用pcl_viewer進行可視化查看原始數據和原始點的數量以及加載這些點云需要的時長。如圖所示:
為了更好的對比壓縮前后點云數據所占空間的大小,這里我們首先查看一下點云的屬性,查看其大小:
然后我們使用,編譯生成的可執行文件進行點云壓縮處理
./pcc_encoder --path ../data --file 0000000000.bin -p 0.18 -y 0.45 -f binary -l 4 -t 0.5 --out frame.tar.gz
命令行來對0000000000.bin進行壓縮。解壓后生成一個frame.tar.gz,我們查看此時這一幀點云數據的大小。
對比一下文件大小可以看出壓縮后的點云確實很小啊,從2M壓縮到了50.6KB,節省了空間,但是會不會影響我們的點云質量呢?這里我們再解壓出來看看。使用命令
./pcc_decoder -p 0.18 -y 0.45 -f binary -l 4 --file frame.tar.gz
此時解壓出來的bin文件的大小,如圖所示:
解壓后從大小上好像比之前的小了一些,那說明是有一些損失,這里我們直接使用工具將其轉化后可視化的結果大致查看一下結果如下
總結
從點的個數和點云的加載時間上也減少了不少,有損失,但是可視化出來的結果,看不出有什么影響點云質量。同時在作者的論文中也從三個方面,提出了三個評估指標來驗證這里的壓縮是沒有影響到點云的質量。分別從以下三個方面的應用驗證了壓縮的有效性:
點云配準:配準的測試使用了基于點云PCL庫的ICP算法進行對比測試。
點云目標檢測:使用了體素網格的深度學習的方法測試對比。
點云場景的分割:使用了基于DNN的squezeseg方法。
使用三個評估指標:未壓縮點云的壓縮率、FPS的壓縮速度和應用程序結果的精確度。
所謂前人栽樹,后人乘涼,再次感謝作者開源了代碼。
資源
三維點云論文及相關應用分享
【點云論文速讀】基于激光雷達的里程計及3D點云地圖中的定位方法
3D目標檢測:MV3D-Net
三維點云分割綜述(上)
3D-MiniNet: 從點云中學習2D表示以實現快速有效的3D LIDAR語義分割(2020)
win下使用QT添加VTK插件實現點云可視化GUI
JSNet:3D點云的聯合實例和語義分割
大場景三維點云的語義分割綜述
PCL中outofcore模塊---基于核外八叉樹的大規模點云的顯示
基于局部凹凸性進行目標分割
基于三維卷積神經網絡的點云標記
點云的超體素(SuperVoxel)
基于超點圖的大規模點云分割
更多文章可查看:點云學習歷史文章大匯總
SLAM及AR相關分享
【開源方案共享】ORB-SLAM3開源啦!
【論文速讀】AVP-SLAM:自動泊車系統中的語義SLAM
【點云論文速讀】StructSLAM:結構化線特征SLAM
SLAM和AR綜述
常用的3D深度相機
AR設備單目視覺慣導SLAM算法綜述與評價
SLAM綜述(4)激光與視覺融合SLAM
Kimera實時重建的語義SLAM系統
SLAM綜述(3)-視覺與慣導,視覺與深度學習SLAM
易擴展的SLAM框架-OpenVSLAM
高翔:非結構化道路激光SLAM中的挑戰
SLAM綜述之Lidar SLAM
基于魚眼相機的SLAM方法介紹
往期線上分享錄播匯總
第一期B站錄播之三維模型檢索技術
第二期B站錄播之深度學習在3D場景中的應用
第三期B站錄播之CMake進階學習
第四期B站錄播之點云物體及六自由度姿態估計
第五期B站錄播之點云深度學習語義分割拓展
第六期B站錄播之Pointnetlk解讀
[線上分享錄播]點云配準概述及其在激光SLAM中的應用
[線上分享錄播]cloudcompare插件開發
[線上分享錄播]基于點云數據的?Mesh重建與處理
[線上分享錄播]機器人力反饋遙操作技術及機器人視覺分享
[線上分享錄播]地面點云配準與機載點云航帶平差
點云PCL更多活動請查看:點云PCL活動之應屆生校招群
掃描下方微信視頻號二維碼可查看最新研究成果及相關開源方案的演示:
如果你對本文感興趣,點擊“原文閱讀”獲取知識星球二維碼,務必按照“姓名+學校/公司+研究方向”備注加入免費知識星球,星球可自由發言交流和分享。也可免費下載公眾號分享的論文pdf文檔,和更多熱愛分享的小伙伴一起交流吧!
歡迎各位轉發分享朋友圈,將公眾號設置為星標,或點擊“在看”以示鼓勵和支持,讓我們繼續分享!
以上內容如有錯誤請留言評論,歡迎指正交流。如有侵權,請聯系刪除
掃描二維碼
? ? ? ? ? ? ? ? ? ?關注我們
讓我們一起分享一起學習吧!期待有想法,樂于分享的小伙伴加入免費星球注入愛分享的新鮮活力。分享的主題包含但不限于三維視覺,點云,高精地圖,自動駕駛,以及機器人等相關的領域。
分享及合作方式:可聯系微信“920177957”(需要按要求備注)聯系郵箱:dianyunpcl@163.com,歡迎企業來聯系公眾號展開合作。
點一下“在看”你會更好看耶
總結
以上是生活随笔為你收集整理的开源点云实时压缩方案测试的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: PCL安装常见的错误集合解决方案(一)
 - 下一篇: 三维点云语义分割总览