點云數據結構化與體素化理論學習

一、PCD點云數據存儲格式的進一步認識

(一)PCD點云存儲格式相較于其它存儲格式(如PLY、STL、OBJ、X3D等)的優勢[1]

??????? (1)具有存儲和處理有組織的點云數據集的能力,這對于實時應用和增強現實及機器人等研究領域十分重要;

??????? (2)二進制的mmap/munmap可能是最快加載和存儲數據至磁盤的方式(在實驗中,我發現Linux系統下基于PCL/Open3D庫讀取數據較Windows系統快。后經查閱了解到,二進制格式的點云數據讀取是基于pcl::PointCloud.points array/vector的完全臨時復制。在Linux系統中,為了盡可能最快地讀取數據而采用mmap/munmap操作);

??????? (3)能夠存儲不同的數據類型(支持所有基礎類型,如char、short、int、float和double)以達到高效處理和存儲復雜的點云數據。無效的點云維度通常被存儲為NAN類型,但自從PCL 1.0.1開始,NAN類型字符被替換為nan表示;

??????? (4)支持n-D直方圖特征描述符,這對三維感知和計算機視覺應用十分重要;

??????? (5)通過控制文件格式,PCD存儲格式可以最好地匹配PCL庫,從而在PCL應用中獲得最高的性能表現。與此同時,PCL應用運行不需要將各類數據格式都作為PCL的基礎格式且不需要耗費額外的時間在數據轉換函數上,以提高時空效率。

(二)PCD文件格式頭解析[1]

??????? PCD文件的格式頭用于識別和表明存儲點云數據的確定屬性,格式頭必須為ASCII編碼且每一個屬性實體被換行符(\n)分隔。值得注意的是,視點位置較為重要,視點將會被用于不同坐標系統之間的轉換或者輔助特征計算(如局部表面法線需要一個不變的視線輔助計算保持一致性,即法線定向[8])。

??????? (1)VERSION???????????? PCD格式文件的版本號

??????? (2)FIELDS???????????????? 每一維度的特定屬性標識名字

??????? (3)SIZE????????????????????? 每一維數據存儲的字節數(unsigned char/char為1字節;unsigned short/short為2字節;unsigned int/int/float為4字節;double為8字節)

??????? (4)TYPE???????????????????? 每一維度表示字符的數據類型(I-int8(char)/int16(short)/int32(int) U- uint8(unsigned char)/uint16(unsigned short)/uint32(unsigned int) F-float)

??????? (5)COUNT??????? ????????? 一個維度的表示元素數量。默認不表示COUNT情況,其為1

??????? (6)WIDTH??????????????????? 一行記錄的點的數量

??????? (7)HEIGHT??????????????? (有/無組織存儲標記)若無組織存儲為1,否則為點云數據存儲的行數

??????? (8)VIEWPOINT??????????? 點云數據的視點(tx ty tz qw qx qy qz)

??????? (9)POINTS?????????????????? 存儲點云的總體數量(與WIDTH*HEIGHT一致)

??????? (10)DATA???????????????????? 特定數據格式存儲的點云數據

圖一 PCD存儲格式文件圖示

二、基于KDTree的點云結構化組織

??????? 在計算機科學里,k-d樹(k-dimensional tree)是在k維歐幾里德空間組織點的數據結構,是空間二叉樹的一種特殊情況。k-d樹可以使用在多種應用場合,如多維鍵值搜索(如范圍搜索及最鄰近搜索)。k-d樹是每個葉子節點都為k維點的二叉樹,所有非葉子節點可以視作用一個超平面把空間分割成兩個半空間。節點左邊的子樹代表在超平面左邊的點,節點右邊的子樹代表在超平面右邊的點。選擇超平面的方法如下:每個節點都與k維中垂直于超平面的那一維有關[2]。

????????一個三維樹。第一次劃分(紅色)把根節點(白色)劃分成兩個節點,然后它們分別再次被劃分(綠色)為兩個子節點。最后這四個子節點的每一個都被劃分(藍色)為兩個子節點。因為沒有更進一步的劃分,最后得到的八個節點稱為葉子節點,如圖二所示。

圖二 三維k-d樹圖示(圖源wikipedia)

三、點云數據的三維格網化/體素化

??????? 體素(Voxel)是體積像素的簡稱。概念上類似二維空間的最小單位—像素,像素用于二維圖像。體積像素一如其名,是數字資料于三維空間分割上的最小單位[4]。點云數據三維格網化通常用于基于體素的深度學習數據預處理、局部相對特征計算以及投影。

圖三 體素示意圖(圖源wikipedia)

四、基于的Octree的點云結構化組織

??????? 八叉樹(Octree)是一種樹形數據結構,每個內部節點都正好有八個子節點。八叉樹常用于分割三維空間,將其遞歸細分為八個卦限。八叉樹是四叉樹在三維空間中的對應,在三維圖形、三維游戲引擎等領域有很多應用。八叉樹的每個節點都可以代表一個空間,對應的八個子節點則將這個空間細分為八個卦限。點域(point region,簡稱PR)八叉樹的節點中都存儲著一個三維點,即該節點對應區域的“中心”,也是八個子節點對應區域中的一個角落。矩陣(matrix based,簡稱MX)八叉樹中,節點只記錄區域范圍,對應的中心點坐標需要從區域范圍推算。因此,PR八叉樹的根節點可以表示無限大的空間;而MX八叉樹的根節點只能表示有限空間,這樣才可以得到隱含的中心點[6]。

圖四 八叉樹遞歸劃分圖示(圖源wikipedia)

參考資料:

[1] The PCD (Point Cloud Data) file format — Point Cloud Library 1.14.0-dev documentation

[2] https://en.wikipedia.org/wiki/K-d_tree

[3] KDTree - Open3D 0.18.0 documentation

[4] https://en.wikipedia.org/wiki/Voxel

[5] Voxelization - Open3D 0.18.0 documentation

[6] https://en.wikipedia.org/wiki/Octree

[7] Octree - Open3D 0.18.0 documentation

[8] Open3D 法線估計(2)——法線定向_open3d法向量定向-CSDN博客

[9] Open3D KDTree的使用_open3d使用kdtree-CSDN博客

[10] Open3D 從點云中構建八叉樹_根據空間點構造八叉樹-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/716861.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/716861.shtml
英文地址,請注明出處:http://en.pswp.cn/news/716861.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20240302-1-ZooKeeper面試題(三)

21. 集群最少要幾臺機器,集群規則是怎樣的? 集群規則為 2N1 臺,N>0,即 3 臺。 22. 集群支持動態添加機器嗎? 其實就是水平擴容了,Zookeeper 在這方面不太好。兩種方式:第 62 頁 共 485 頁全部重啟&a…

【Spring連載】使用Spring Data訪問 MongoDB----對象映射之非包裝類型

【Spring連載】使用Spring Data訪問 MongoDB----對象映射之非包裝類型 一、未包裝類型映射二、未包裝類型字段名三、查詢未包裝對象3.1 按未包裝字段排序3.2 未包裝對象的字段投影3.3 未包裝對象的Query By Example3.4 未包裝對象的存儲庫查詢 四、更新未包裝對象五、未包裝對象…

蒼穹外賣學習 Day10 Day11 Day12

前言 用于記錄蒼穹外賣Day10、Day11、Day12的學習 Day10 訂單狀態定時處理 來電提醒 客戶催單 訂單狀態定時處理 Spring Task Spring Task是一個任務調度工具,可以按照約定的時間自動執行某個代碼邏輯(定時自動執行某段Java代碼) cron表…

代碼隨想錄算法訓練營第三十天| 回溯篇總結

文章目錄 前言一、組合問題二、切割問題三、子集問題四、排列問題五、性能分析總結 前言 回溯法就是暴力搜索,并不是什么高效的算法,最多再剪枝一下。 組合問題:N個數里面按一定規則找出k個數的集合 排列問題:N個數按一定規則全…

【黑馬程序員】STL之set和map容器

文章目錄 set/multiset容器set基本概念簡介區別 set的構造和賦值功能描述函數原型代碼示例運行結果 set的大小和交換功能描述函數原型代碼示例運行結果 set的插入和刪除功能描述函數原型代碼示例運行結果 set查找和統計函數原型代碼示例運行結果 set和multiset區別區別代碼示例…

JVM(6)

JMM JVM定義了一種Java內存模型來屏蔽掉各種硬件和操作系統的內存訪問差異,以實現讓Java程序在各種平臺下都能達到一致的內存訪問效果.在此之前,C/C直接使用物理硬件和操作系統的內存模型,因此,會由于不同平臺下的內存模型差異,有可能導致程序在一套平臺上并發完全正常,而在另…

深入解剖指針(4)

個人主頁(找往期文章包括但不限于本期文章中不懂的知識點): 我要學編程(?_?)-CSDN博客 目錄 回調函數 qsort使用舉例 使用qsort函數排序整型數據 使用qsort排序結構數據 qsort函數的模擬實現 回調函數 回調函數就是一個通過函數指…

【Android12】Android性能調優工具SystemServerTiming日志

Android性能調優工具SystemServerTiming日志 性能優化、穩定性優化是Android系統優化的兩大方面,對于性能調試Android提供了很多工具,比如:bootchart、systrace、perfboot、log、dmsg等等。 SystemServerTiming是Android原生系統中一個日志…

《Spring Security 簡易速速上手小冊》第10章 未來趨勢與高級話題(2024 最新版)

文章目錄 10.1 云原生安全性趨勢10.1.1 基礎知識10.1.2 重點案例:保護微服務通信10.1.3 拓展案例 1:容器安全最佳實踐10.1.4 拓展案例 2:自動化安全審計和合規性檢查 10.2 反應式編程與 Spring Security10.2.1 基礎知識10.2.2 重點案例&#…

nginx-圖片模塊

./configure --with-http_image_filter_module location / {root html;index index.html index.htm;if ($arg_w "") {set $arg_w -;}if ($arg_h "") {set $arg_h -;}image_filter resize $arg_w $arg_h;image_filter_jpeg_quality 95; } 訪問: 1234…

CSS錐形漸變:conic-gradient()

畫一個扇形圖&#xff0c;使用常規方法可能很難畫&#xff0c;但是用錐形漸變的話非常好畫 <style>.pattern{width: 100px; height: 100px;border-radius: 50%;background: conic-gradient(yellow 30deg , black 30deg , black 90deg , yellow 90deg ,yellow 150d…

Git分布式版本控制系統——git學習準備工作

一、Git倉庫介紹 開發者可以通過Git倉庫來存儲和管理文件代碼&#xff0c;Git倉庫分為兩種&#xff1a; 本地倉庫&#xff1a;開發人員自己電腦上的Git倉庫 遠程倉庫&#xff1a;遠程服務器上的Git倉庫 倉庫之間的運轉如下圖&#xff1a; commit&#xff1a;提交&#xff…

Decoupled Knowledge Distillation解耦知識蒸餾

Decoupled Knowledge Distillation解耦知識蒸餾 現有的蒸餾方法主要是基于從中間層提取深層特征&#xff0c;而忽略了Logit蒸餾的重要性。為了給logit蒸餾研究提供一個新的視角&#xff0c;我們將經典的KD損失重新表述為兩部分&#xff0c;即目標類知識蒸餾&#xff08;TCKD&a…

c++之旅——第四彈

大家好啊&#xff0c;這里是c之旅第三彈&#xff0c;跟隨我的步伐來開始這一篇的學習吧&#xff01; 如果有知識性錯誤&#xff0c;歡迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 創作不易&#xff0c;希望大家多多支持哦&#xff01; 本篇文章的主…

如何對比 MySQL 主備數據的一致性?

隨著業務范圍的擴大&#xff0c;很多企業為了保障核心業務的高可用性&#xff0c;選擇了 MySQL 主從架構&#xff0c;這一套方案通常具備主備數據同步、數據備份與恢復、讀寫分離、高可用切換等特性&#xff0c;是一種相當成熟可靠的數據庫架構方案。然而這套方案在特定情況下可…

Redis小白入門教程

Redis入門教程 1. Redis入門1.1 Redis簡介1.2 Redis服務啟動與停止1.2.1 Redis下載1.2.2 服務啟動命令1.2.3 客戶端連接命令1.2.4 修改Redis配置文件 2. Redis數據類型2.1 五種常用數據類型介紹2.1.1 字符串操作命令2.1.2 哈希操作命令2.1.3 列表操作命令2.1.4 集合操作命令2.1…

雙周回顧#006 - 這三個月

斷更啦~~ 上次更新時間 2023/11/23, 斷更近三個月的時間。 先狡辯下&#xff0c;因為忙、著實忙。因為忙&#xff0c;心安理得給斷更找了個借口&#xff0c;批評下自己~~ 這三個月在做啥&#xff1f;跨部門援助&#xff0c;支援公司互聯網的 ToC 項目&#xff0c;一言難盡。 …

智能時代:人工智能引領未來創新

智能時代&#xff1a;人工智能引領未來創新 1. 人工智能的定義與特點 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是指模擬、延伸和擴展人類智能的理論、方法、技術及應用系統的一門交叉學科。其特點包括學習能力、推理能力、感知能力和交互能力…

【C語言】InfiniBand 驅動mlx4_ib_init和mlx4_ib_cleanup

一、中文講解 這兩個函數是Linux內核模塊中對于Mellanox InfiniBand 驅動程序初始化和清理的函數。 mlx4_ib_init()函數是模塊初始化函數&#xff0c;使用__init宏標注&#xff0c;表示該函數只在模塊加載時運行一次。 函數執行的步驟如下&#xff1a; 1. 通過alloc_ordered_w…

數據結構——lesson5棧和隊列詳解

hellohello~這里是土土數據結構學習筆記&#x1f973;&#x1f973; &#x1f4a5;個人主頁&#xff1a;大耳朵土土垚的博客 &#x1f4a5; 所屬專欄&#xff1a;數據結構學習筆記 &#x1f4a5;對于順序表鏈表有疑問的都可以在上面數據結構的專欄進行學習哦~感謝大家的觀看與…