k-d樹是一種常用的多維數(shù)據(jù)結(jié)構(gòu),它可以用于范圍搜索、最近鄰搜索等問題。但是,在實際應(yīng)用中,我們經(jīng)常需要對動態(tài)數(shù)據(jù)進行查詢和修改操作。這時候,傳統(tǒng)的k-d樹就顯得力不從心了。為了解決這個問題,研究人員提出了動態(tài)k-d樹(Dynamic k-d Tree)這一概念。與傳統(tǒng)的k-d樹不同,動態(tài)k-d樹可以支持插入、刪除和修改操作,并且能夠保持平衡狀態(tài)。動態(tài)k-d樹可以用于各種多維數(shù)據(jù)結(jié)構(gòu)問題,例如范圍搜索、最近鄰搜索等。本文將介紹動態(tài)k-d樹的基本原理、實現(xiàn)方法。
1 基本原理
1.1 k-d樹
首先,我們來回顧一下傳統(tǒng)的k-d樹。k-d樹是一種二叉搜索樹,它將每個節(jié)點表示為一個超矩形,并按照某種規(guī)則將超矩形劃分成兩個子區(qū)域。具體來說,k-d樹的構(gòu)建過程如下:
選擇一個維度d,將數(shù)據(jù)集按照第d個維度的值進行排序。
選擇中位數(shù)作為根節(jié)點,并將數(shù)據(jù)集分成兩個子集。左子集包含小于中位數(shù)的所有數(shù)據(jù),右子集包含大于中位數(shù)的所有數(shù)據(jù)。
對左右子集遞歸執(zhí)行步驟1和步驟2,直到每個節(jié)點只包含一個數(shù)據(jù)點
在k-d樹中,每個節(jié)點都表示一個超矩形,其中包含了一些數(shù)據(jù)點。對于任意一個節(jié)點,它的左子樹和右子樹所代表的超矩形是不相交的。因此,在搜索時,我們可以通過比較查詢點與當前節(jié)點所代表的超矩形的位置關(guān)系來確定搜索方向。例如,在二維平面上構(gòu)建k-d樹時,每個節(jié)點都代表一個矩形區(qū)域。如果查詢點在當前節(jié)點所代表的矩形區(qū)域的左下角,則搜索方向為左子樹;如果查詢點在右上角,則搜索方向為右子樹。
1.2 動態(tài)k-d樹
傳統(tǒng)的k-d樹只能處理靜態(tài)數(shù)據(jù)集,即數(shù)據(jù)集不會發(fā)生變化。但是,在實際應(yīng)用中,我們經(jīng)常需要對動態(tài)數(shù)據(jù)進行查詢和修改操作。例如,在機器人運動規(guī)劃中,機器人需要不斷地獲取周圍環(huán)境信息,并進行路徑規(guī)劃。這時候,傳統(tǒng)的k-d樹就無法滿足需求了。
為了解決這個問題,研究人員提出了動態(tài)k-d樹(Dynamic k-d Tree)這一概念。與傳統(tǒng)的k-d樹不同,動態(tài)k-d樹可以支持插入、刪除和修改操作,并且能夠保持平衡狀態(tài)。
在動態(tài)k-d樹中,每個節(jié)點都代表一個超矩形區(qū)域,其中包含了一些數(shù)據(jù)點。與傳統(tǒng)的k-d樹不同的是,動態(tài)k-d樹中的節(jié)點可以被插入、刪除或修改。當一個節(jié)點被插入時,我們需要重新構(gòu)建整個樹;當一個節(jié)點被刪除時,我們需要將其從樹中移除,并重新平衡整個樹;當一個節(jié)點被修改時,我們需要更新其所代表的超矩形區(qū)域,并重新平衡整個樹。
2. ikd-Tree設(shè)計與實現(xiàn)
ikd-Tree是一種基于K-D樹的動態(tài)數(shù)據(jù)結(jié)構(gòu)。它由一個二叉搜索樹組成,在每個節(jié)點上存儲一個超矩形區(qū)域和一個點集合。超矩形區(qū)域是由該節(jié)點所代表的所有點確定的最小超矩形區(qū)域。每個節(jié)點都有一個劃分軸和劃分值來將其子節(jié)點分成兩個子集。ikd-Tree的基本結(jié)構(gòu),包括節(jié)點、分割平面和子樹等和一些增量操作,包括插入、重新插入和刪除等。在這些操作中,ikd-Tree使用遞歸算法來更新節(jié)點,并通過旋轉(zhuǎn)和重建子樹來保持平衡。此外,該節(jié)還介紹了如何進行動態(tài)重新平衡,以避免樹的不平衡導致查詢效率下降。最后,該節(jié)討論了如何使用ikd-Tree進行最近點搜索。ikd-Tree 中樹節(jié)點的屬性在下表中給出。第 2-4 行是標準 k-d 樹的公共屬性。屬性 left tson 和 rightson 分別是指向它的左子節(jié)點和右子節(jié)點的指針。點信息(例如點坐標、強度)存儲在點中。由于一個點對應(yīng)于 k-d 樹上的單個節(jié)點,因此我們將互換使用點和節(jié)點。劃分軸記錄在axis中。第 5-7 行是為第 III-C 節(jié)中詳述的增量更新而設(shè)計的新屬性。
2.1 增量更新和重新平衡
圖1展示了增量k-d樹的更新和重新平衡過程。在這個例子中,黑色點表示現(xiàn)有的k-d樹節(jié)點,紅色三角形表示要插入的新點。藍色立方體表示需要重新平衡的空間(即分支)。在插入新點后,ikd-Tree使用旋轉(zhuǎn)和重建子樹來保持平衡,并將藍色立方體移動到正確的位置。
2.2 盒式操作和下采樣
盒式操作是指將空間劃分為多個盒子,以便更快地搜索最近的點。在ikd-Tree中,這是一種針對數(shù)據(jù)坐標軸對齊的矩形框內(nèi)的所有點進行插入、刪除或重新插入操作的方法。這些矩形框可以由用戶指定,也可以根據(jù)數(shù)據(jù)集自動計算得出。下采樣是指在保持數(shù)據(jù)分布的同時減少數(shù)據(jù)量,從而提高查詢效率。
2.3 動態(tài)重新平衡
ikd-Tree還支持動態(tài)重新平衡,以避免樹的不平衡導致查詢效率下降。具體來說,ikd-Tree使用部分重建方法來重新平衡樹。當需要重新平衡時,ikd-Tree將樹分成兩個部分,并在兩個線程中同時進行重建操作。這種方法可以最大限度地減少重建時間,并提高整體效率。
3 時間和空間復(fù)雜度
該節(jié)介紹了ikd-Tree分別對插入、刪除、查詢和重建等操作的時間復(fù)雜度進行了分析。最后,該節(jié)還討論了ikd-Tree的空間復(fù)雜度和實際應(yīng)用中的性能表現(xiàn)。ikd-Tree是一種基于k-d樹的增量數(shù)據(jù)結(jié)構(gòu),可以在機器人應(yīng)用中高效地進行點云數(shù)據(jù)處理、路徑規(guī)劃等操作。
在ikd-Tree中,每個節(jié)點都包含一個分割平面和兩個子樹,其中左子樹包含小于分割平面值的點,右子樹包含大于等于分割平面值的點。通過遞歸算法,在每個節(jié)點上進行二分查找,并通過旋轉(zhuǎn)和重建子樹來保持平衡。在插入操作方面,該節(jié)指出,在最壞情況下,插入一個新點需要O(n)次比較操作(其中n表示樹中節(jié)點數(shù)目)。這是因為新點可能會被插入到所有節(jié)點的左或右子樹中。但是,在實際應(yīng)用中,由于ikd-Tree使用動態(tài)重新平衡方法來保持平衡,并且支持下采樣等功能來減少數(shù)據(jù)量,因此插入操作的時間復(fù)雜度通常為O(log n)。
在刪除操作方面,該節(jié)指出,刪除一個節(jié)點需要O(log n)次比較操作。這是因為ikd-Tree使用遞歸算法來查找要刪除的節(jié)點,并通過旋轉(zhuǎn)和重建子樹來保持平衡。但是,在實際應(yīng)用中,由于ikd-Tree支持下采樣等功能來減少數(shù)據(jù)量,因此刪除操作的時間復(fù)雜度通常為O(log n) 在查詢操作方面,該節(jié)指出,ikd-Tree的查詢操作需要O(log n)次比較操作。這是因為在每個節(jié)點上進行二分查找,并根據(jù)分割平面的值來選擇左或右子樹進行遞歸查找。由于ikd-Tree使用動態(tài)重新平衡方法來保持平衡,并且支持下采樣等功能來減少數(shù)據(jù)量,因此查詢操作的時間復(fù)雜度通常為O(log n)。
在重建操作方面,該節(jié)指出,ikd-Tree使用部分重建方法來重新平衡樹。當需要重新平衡時,ikd-Tree將樹分成兩個部分,并在兩個線程中同時進行重建操作。這種方法可以最大限度地減少重建時間,并提高整體效率。由于ikd-Tree支持動態(tài)重新平衡和部分重建等功能,因此重建操作的時間復(fù)雜度通常為O(log n)。
在空間復(fù)雜度方面,該節(jié)指出,ikd-Tree需要O(n)的空間來存儲所有節(jié)點和數(shù)據(jù)點。每個節(jié)點都需要存儲其分割平面、子樹信息以及其他元數(shù)據(jù)。但是,在實際應(yīng)用中,由于ikd-Tree支持下采樣等功能來減少數(shù)據(jù)量,并且可以通過壓縮存儲等技術(shù)進一步減少所需存儲空間。
歡迎關(guān)注「3D視覺工坊」,加群/文章投稿/課程主講,請加微信:dddvisiona,添加時請備注:加群/投稿/主講申請
實驗結(jié)果與分析
該節(jié)首先介紹了測試環(huán)境和數(shù)據(jù)集,包括使用的硬件和軟件配置以及測試數(shù)據(jù)的來源和特點。然后,該節(jié)詳細討論了ikd-Tree在不同應(yīng)用場景下的性能表現(xiàn),并與其他數(shù)據(jù)結(jié)構(gòu)進行了比較。這些實驗分別是基于隨機增量數(shù)據(jù)集的實驗和基于LiDAR測距儀的室外SLAM實驗。在隨機增量數(shù)據(jù)集實驗中,ikd-Tree的效率得到了充分驗證。該實驗使用1000個點作為初始數(shù)據(jù)集,并逐步增加1000個點進行測試。圖4(a)展示了ikd-Tree和靜態(tài)k-d樹之間的運行時間比較,其中x軸表示增量更新次數(shù),y軸表示運行時間(單位:毫秒)。
可以看出,在增量更新次數(shù)較少時,ikd-Tree和靜態(tài)k-d樹之間的運行時間差異不大。但是,當增量更新次數(shù)達到一定數(shù)量時,ikd-Tree明顯優(yōu)于靜態(tài)k-d樹,并且具有更好的擴展性。圖4(b)展示了ikd-Tree和靜態(tài)k-d樹之間的最近鄰搜索時間比較,其中x軸表示查詢次數(shù),y軸表示運行時間(單位:毫秒)??梢钥闯?,在查詢次數(shù)較少時,ikd-Tree和靜態(tài)k-d樹之間的查詢時間差異不大。但是,在查詢次數(shù)達到一定數(shù)量時,ikd-Tree明顯優(yōu)于靜態(tài)k-d樹,并且具有更好的擴展性。圖4(c)展示了ikd-Tree和靜態(tài)k-d樹之間的操作計數(shù)和總時間消耗比較,其中x軸表示點數(shù),y軸表示操作計數(shù)和總時間消耗。在點數(shù)達到一定數(shù)量時,ikd-Tree明顯優(yōu)于靜態(tài)k-d樹。
在LiDAR的室外SLAM實驗中,ikd-Tree也表現(xiàn)出了優(yōu)異的性能。該實驗使用了一個移動機器人和一個LiDAR,通過對周圍環(huán)境進行掃描來構(gòu)建地圖。圖5展示了ikd-Tree在該實驗中的性能表現(xiàn),其中x軸表示時間(單位:秒),y軸表示運行時間(單位:毫秒)??梢钥闯?,在整個實驗過程中,ikd-Tree的運行時間始終保持在較低水平。
審核編輯:劉清
-
機器人
+關(guān)注
關(guān)注
211文章
28466瀏覽量
207327 -
SLAM
+關(guān)注
關(guān)注
23文章
425瀏覽量
31856 -
激光雷達
+關(guān)注
關(guān)注
968文章
3981瀏覽量
190021 -
LiDAR芯片
+關(guān)注
關(guān)注
1文章
17瀏覽量
3232
原文標題:ikd樹:激光雷達SLAM中高效的點云數(shù)據(jù)結(jié)構(gòu)
文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論