日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

PCL中Kd树理论

發(fā)布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PCL中Kd树理论 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

 k-d樹(k-dimensional樹的簡稱),是一種分割k維數(shù)據(jù)空間的數(shù)據(jù)結(jié)構(gòu)。主要應(yīng)用于多維空間關(guān)鍵數(shù)據(jù)的搜索(如:范圍搜索和最近鄰搜索)。

? ?01? ?Kd簡介

? ?

? ? ?K-D樹是二進(jìn)制空間分割樹的特殊的情況。用來組織表示K維空間中點的幾何,是一種帶有其他約束的二分查找樹,為了達(dá)到目的,通常只在三個維度中進(jìn)行處理因此所有的kd_tree都將是三維的kd_tree,kd_tree的每一維在指定維度上分開所有的字節(jié)點,在樹的根部所有子節(jié)點是以第一個指定的維度上被分開。

? ? ?K-D樹算法可以分為兩大部分,一部分是有關(guān)k-d樹本身這種數(shù)據(jù)結(jié)構(gòu)建立的算法,另一部分是在建立的k-d樹上如何進(jìn)行最鄰近查找的算法。

? ?02? ?應(yīng)用背景

? ? ?

? ? ? ?比如SIFT算法中做特征點匹配的時候就會利用到k-d樹。而特征點匹配實際上就是一個通過距離函數(shù)在高維矢量之間進(jìn)行相似性檢索的問題。針對如何快速而準(zhǔn)確地找到查詢點的近鄰,現(xiàn)在提出了很多高維空間索引結(jié)構(gòu)和近似查詢的算法,k-d樹就是其中一種。

  索引結(jié)構(gòu)中相似性查詢有兩種基本的方式:一種是范圍查詢(range searches),另一種是K近鄰查詢(K-neighbor searches)。范圍查詢就是給定查詢點和查詢距離的閾值,從數(shù)據(jù)集中找出所有與查詢點距離小于閾值的數(shù)據(jù);K近鄰查詢是給定查詢點及正整數(shù)K,從數(shù)據(jù)集中找到距離查詢點最近的K個數(shù)據(jù),當(dāng)K=1時,就是最近鄰查詢(nearest neighbor searches)。

? ?03? ?實例

? ? ??

? ? ? ?先以一個簡單直觀的實例來介紹k-d樹算法。假設(shè)有6個二維數(shù)據(jù)點{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)},數(shù)據(jù)點位于二維空間內(nèi)(如圖1中黑點所示)。k-d樹算法就是要確定圖1中這些分割空間的分割線(多維空間即為分割平面,一般為超平面)。下面就要通過一步步展示k-d樹是如何確定這些分割線的。

? ? ?k-d樹算法可以分為兩大部分,一部分是有關(guān)k-d樹本身這種數(shù)據(jù)結(jié)構(gòu)建立的算法,另一部分是在建立的k-d樹上如何進(jìn)行最鄰近查找的算法。

? ?03? ?構(gòu)建算法

 

? ? ? k-d樹是一個二叉樹,每個節(jié)點表示一個空間范圍。表1給出的是k-d樹每個節(jié)點中主要包含的數(shù)據(jù)結(jié)構(gòu)。

? ? ?從上面對k-d樹節(jié)點的數(shù)據(jù)類型的描述可以看出構(gòu)建k-d樹是一個逐級展開的遞歸過程。表2給出的是構(gòu)建k-d樹的偽碼。

?以上述舉的實例來看,過程如下:

  由于此例簡單,數(shù)據(jù)維度只有2維,所以可以簡單地給x,y兩個方向軸編號為0,1,也即split={0,1}。

  (1)確定split域的首先該取的值。分別計算x,y方向上數(shù)據(jù)的方差得知x方向上的方差最大,所以split域值首先取0,也就是x軸方向;

  (2)確定Node-data的域值。根據(jù)x軸方向的值2,5,9,4,8,7排序選出中值為7,所以Node-data = (7,2)。這樣,該節(jié)點的分割超平面就是通過(7,2)并垂直于split = 0(x軸)的直線x = 7;

  (3)確定左子空間和右子空間。分割超平面x = 7將整個空間分為兩部分,如圖2所示。x < =? 7的部分為左子空間,包含3個節(jié)點{(2,3),(5,4),(4,7)};另一部分為右子空間,包含2個節(jié)點{(9,6),(8,1)}。

? ? ? ?如算法所述,k-d樹的構(gòu)建是一個遞歸的過程。然后對左子空間和右子空間內(nèi)的數(shù)據(jù)重復(fù)根節(jié)點的過程就可以得到下一級子節(jié)點(5,4)和(9,6)(也就是左右子空間的'根'節(jié)點),同時將空間和數(shù)據(jù)集進(jìn)一步細(xì)分。如此反復(fù)直到空間中只包含一個數(shù)據(jù)點,如圖1所示。最后生成的k-d樹如圖3所示。

? ?04? ?PCL中k-d樹的最鄰近查找

? ? ? 在k-d樹中進(jìn)行數(shù)據(jù)的查找也是特征匹配的重要環(huán)節(jié),其目的是檢索在k-d樹中與查詢點距離最近的數(shù)據(jù)點。這里先以一個簡單的實例來描述最鄰近查找的基本思路。

  星號表示要查詢的點(2.1,3.1)。通過二叉搜索,順著搜索路徑很快就能找到最鄰近的近似點,也就是葉子節(jié)點(2,3)。而找到的葉子節(jié)點并不一定就是最鄰近的,最鄰近肯定距離查詢點更近,應(yīng)該位于以查詢點為圓心且通過葉子節(jié)點的圓域內(nèi)。為了找到真正的最近鄰,還需要進(jìn)行'回溯'操作:算法沿搜索路徑反向查找是否有距離查詢點更近的數(shù)據(jù)點。此例中先從(7,2)點開始進(jìn)行二叉查找,然后到達(dá)(5,4),最后到達(dá)(2,3),此時搜索路徑中的節(jié)點為<(7,2),(5,4),(2,3)>,首先以(2,3)作為當(dāng)前最近鄰點,計算其到查詢點(2.1,3.1)的距離為0.1414,然后回溯到其父節(jié)點(5,4),并判斷在該父節(jié)點的其他子節(jié)點空間中是否有距離查詢點更近的數(shù)據(jù)點。以(2.1,3.1)為圓心,以0.1414為半徑畫圓,如圖4所示。發(fā)現(xiàn)該圓并不和超平面y = 4交割,因此不用進(jìn)入(5,4)節(jié)點右子空間中去搜索。

? ? ?再回溯到(7,2),以(2.1,3.1)為圓心,以0.1414為半徑的圓更不會與x = 7超平面交割,因此不用進(jìn)入(7,2)右子空間進(jìn)行查找。至此,搜索路徑中的節(jié)點已經(jīng)全部回溯完,結(jié)束整個搜索,返回最近鄰點(2,3),最近距離為0.1414。

  一個復(fù)雜點了例子如查找點為(2,4.5)。同樣先進(jìn)行二叉查找,先從(7,2)查找到(5,4)節(jié)點,在進(jìn)行查找時是由y = 4為分割超平面的,由于查找點為y值為4.5,因此進(jìn)入右子空間查找到(4,7),形成搜索路徑<(7,2),(5,4),(4,7)>,取(4,7)為當(dāng)前最近鄰點,計算其與目標(biāo)查找點的距離為3.202。然后回溯到(5,4),計算其與查找點之間的距離為3.041。以(2,4.5)為圓心,以3.041為半徑作圓,如圖5所示。可見該圓和y = 4超平面交割,所以需要進(jìn)入(5,4)左子空間進(jìn)行查找。此時需將(2,3)節(jié)點加入搜索路徑中得<(7,2),(2,3)>。回溯至(2,3)葉子節(jié)點,(2,3)距離(2,4.5)比(5,4)要近,所以最近鄰點更新為(2,3),最近距離更新為1.5。回溯至(7,2),以(2,4.5)為圓心1.5為半徑作圓,并不和x = 7分割超平面交割,如圖6所示。至此,搜索路徑回溯完。返回最近鄰點(2,3),最近距離1.5。k-d樹查詢算法的偽代碼如表3所示。

? ?那么各種編程語言實現(xiàn)Kd tree的代碼網(wǎng)址:

https://rosettacode.org/wiki/K-d_tree

PCL中關(guān)于K-D樹的算法已經(jīng)實現(xiàn),是實現(xiàn)其他算法的基礎(chǔ),比如在使用濾波算法,配準(zhǔn)等算法都會使用該接口。既然有輪子,就不要自己造輪子了。

資源

三維點云論文及相關(guān)應(yīng)用分享

【點云論文速讀】基于激光雷達(dá)的里程計及3D點云地圖中的定位方法

3D目標(biāo)檢測:MV3D-Net

三維點云分割綜述(上)

3D-MiniNet: 從點云中學(xué)習(xí)2D表示以實現(xiàn)快速有效的3D LIDAR語義分割(2020)

win下使用QT添加VTK插件實現(xiàn)點云可視化GUI

JSNet:3D點云的聯(lián)合實例和語義分割

大場景三維點云的語義分割綜述

PCL中outofcore模塊---基于核外八叉樹的大規(guī)模點云的顯示

基于局部凹凸性進(jìn)行目標(biāo)分割

基于三維卷積神經(jīng)網(wǎng)絡(luò)的點云標(biāo)記

點云的超體素(SuperVoxel)

基于超點圖的大規(guī)模點云分割

更多文章可查看:點云學(xué)習(xí)歷史文章大匯總

SLAM及AR相關(guān)分享

【開源方案共享】ORB-SLAM3開源啦!

【論文速讀】AVP-SLAM:自動泊車系統(tǒng)中的語義SLAM

【點云論文速讀】StructSLAM:結(jié)構(gòu)化線特征SLAM

SLAM和AR綜述

常用的3D深度相機(jī)

AR設(shè)備單目視覺慣導(dǎo)SLAM算法綜述與評價

SLAM綜述(4)激光與視覺融合SLAM

Kimera實時重建的語義SLAM系統(tǒng)

SLAM綜述(3)-視覺與慣導(dǎo),視覺與深度學(xué)習(xí)SLAM

易擴(kuò)展的SLAM框架-OpenVSLAM

高翔:非結(jié)構(gòu)化道路激光SLAM中的挑戰(zhàn)

SLAM綜述之Lidar SLAM

基于魚眼相機(jī)的SLAM方法介紹

往期線上分享錄播匯總

第一期B站錄播之三維模型檢索技術(shù)

第二期B站錄播之深度學(xué)習(xí)在3D場景中的應(yīng)用

第三期B站錄播之CMake進(jìn)階學(xué)習(xí)

第四期B站錄播之點云物體及六自由度姿態(tài)估計

第五期B站錄播之點云深度學(xué)習(xí)語義分割拓展

第六期B站錄播之Pointnetlk解讀

[線上分享錄播]點云配準(zhǔn)概述及其在激光SLAM中的應(yīng)用

[線上分享錄播]cloudcompare插件開發(fā)

[線上分享錄播]基于點云數(shù)據(jù)的?Mesh重建與處理

[線上分享錄播]機(jī)器人力反饋遙操作技術(shù)及機(jī)器人視覺分享

[線上分享錄播]地面點云配準(zhǔn)與機(jī)載點云航帶平差

點云PCL更多活動請查看:點云PCL活動之應(yīng)屆生校招群

掃描下方微信視頻號二維碼可查看最新研究成果及相關(guān)開源方案的演示:

如果你對本文感興趣,請點擊“原文閱讀”獲取知識星球二維碼,務(wù)必按照“姓名+學(xué)校/公司+研究方向”備注加入免費知識星球,免費下載pdf文檔,和更多熱愛分享的小伙伴一起交流吧!

以上內(nèi)容如有錯誤請留言評論,歡迎指正交流。如有侵權(quán),請聯(lián)系刪除

掃描二維碼

? ? ? ? ? ? ? ? ? ?關(guān)注我們

讓我們一起分享一起學(xué)習(xí)吧!期待有想法,樂于分享的小伙伴加入免費星球注入愛分享的新鮮活力。分享的主題包含但不限于三維視覺,點云,高精地圖,自動駕駛,以及機(jī)器人等相關(guān)的領(lǐng)域。

分享及合作方式:群主微信“920177957”(需要按要求備注) 聯(lián)系郵箱:dianyunpcl@163.com,歡迎企業(yè)來聯(lián)系公眾號展開合作。

點一下“在看”你會更好看耶

總結(jié)

以上是生活随笔為你收集整理的PCL中Kd树理论的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。