国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于Hash?Cube空間層次劃分結(jié)構(gòu)的最近鄰點集快速檢索方法與流程

      文檔序號:11830401閱讀:392來源:國知局
      基于Hash?Cube空間層次劃分結(jié)構(gòu)的最近鄰點集快速檢索方法與流程

      本發(fā)明涉及計算機(jī)數(shù)據(jù)和查詢技術(shù),特別涉及一種基于Hash-Cube空間層次劃分結(jié)構(gòu)的最近鄰點集快速檢索方法。



      背景技術(shù):

      三維測量技術(shù)的飛速發(fā)展使得對實體的掃描越來越精細(xì),隨之獲取的點云規(guī)模也頗為巨大,如何快速有效地從這些散亂點云數(shù)據(jù)中查找任意點的最近鄰點集一直是一個比較熱門的研究方向,諸多基于點云的數(shù)字幾何處理,例如點法矢計算、點云拼接、點云去噪、點云網(wǎng)格化等,均依賴于高效可行的最近鄰查詢結(jié)構(gòu)。

      目前,關(guān)于最近鄰點集的檢索方法主要有三類,包括蠻力查找、Voronoi圖查找以及空間劃分查找,其中:(一)蠻力查找是一類最為簡單的最近鄰查找方法,先計算當(dāng)前點與點云數(shù)據(jù)集中每個點的歐氏距離,再選擇距離最短的前k個點作為最近鄰點集,若需要計算點云數(shù)據(jù)集中所有點的最近鄰,則所需的時間復(fù)雜度為O(n2),這對于實現(xiàn)大規(guī)模點云的高效處理幾乎是不現(xiàn)實的;(二)Voronoi圖查找,該類檢索方法根據(jù)點的位置分布將點云空間劃分為若干個Voronoi子區(qū)域,每個點被包含在子區(qū)域中,通過計算與該區(qū)域共邊的其它子區(qū)域所包含的點即為當(dāng)前點的最近鄰點。由于Voronoi圖的計算代價比較高,使得該方法的復(fù)雜度為O(n2logn);(三)空間劃分查找,該類方法的執(zhí)行思路在于首先對點云數(shù)據(jù)做空間分塊,然后基于深度優(yōu)先策略或最佳優(yōu)先策略在劃分空間內(nèi)進(jìn)行最近鄰查找,代表性的方法有基于四叉樹、基于八叉樹以及基于k-d樹的最近鄰檢索,其中基于k-d樹的最近鄰檢索理論上具有O(nlogn+nk)的時間復(fù)雜度。

      基于空間劃分的最近鄰檢索效率明顯優(yōu)于蠻力查找以及Voronoi圖查找,而均分空間層次劃分結(jié)構(gòu)又是一類比較直觀地空間分塊方式,其中使用的Hash函數(shù),又稱哈希函數(shù)、散列函數(shù),是指在給定任意長度關(guān)鍵字(Key)的條件下,通過某個函數(shù)f將關(guān)鍵字映射為散列值(Hash Value)的函數(shù),即

      HashValue=f(Key) (1)

      散列值一般可表示為關(guān)鍵字的存儲位置,因此,在對關(guān)鍵字進(jìn)行查找時直接通過Hash函數(shù)映射就可以找到關(guān)鍵字的存儲位置,換而言之,Hash函數(shù)能夠根據(jù)關(guān)鍵字將各元素歸類,可以通過直接定址的方式查找到關(guān)鍵字的存儲位置。Hash映射是一種壓縮映射,即散列值的數(shù)據(jù)量遠(yuǎn)小于輸入?yún)?shù)的數(shù)據(jù)量,因而,散列值一般長度較短,形式簡單。

      散列技術(shù)不僅是一種存儲技術(shù),同時也是一種查找方法,在對任意某個元素(關(guān)鍵字)進(jìn)行查找時,只需要通過同樣的Hash函數(shù)計算對應(yīng)的散列地址,按此地址訪問存儲元素。這種存儲查找方式與四叉樹、八叉樹等樹狀結(jié)構(gòu)以及線性表、圖等結(jié)構(gòu)的不同之處在于,上述幾種結(jié)構(gòu),通過建立某種邏輯關(guān)系將所有的數(shù)據(jù)元素關(guān)聯(lián)在一起,在對元素查找時需要大量的比較過程,而Hash函數(shù)映射的數(shù)據(jù)元素之間不存在任何的邏輯關(guān)系,只跟關(guān)鍵字(Key)相關(guān),可以簡化查找比較過程。因此,散列技術(shù)比較適用于查找過程,具備較高的查找效率。

      用P={p1,p2,...,pn}表示點云數(shù)據(jù)集,其中n表示包含點的個數(shù)。對于集合中的任意一點pi,把當(dāng)前點集P中與pi的歐氏距離最近的k個點或者與pi的歐氏距離小于閾值r的稱作pi的最近鄰點集,記作Near(pi),最近鄰點集中包含的每個點稱為pi的鄰域點。為便于區(qū)分,把通過限定鄰域點的個數(shù)k進(jìn)行最近鄰查找的方式稱作k近鄰查找,而通過給定檢索距離r進(jìn)行最近鄰查找的方式稱作r近鄰查找。

      隨著三維測量技術(shù)的飛速發(fā)展,掃描所得到的實體圖像越來越清晰,數(shù)據(jù)量也越來越大,這樣帶來的問題就是龐大的數(shù)據(jù)量用傳統(tǒng)的查找方式耗時會非常大,因此需要一種查找迅速,資源消耗較少,使用效率高的查找方法。



      技術(shù)實現(xiàn)要素:

      本發(fā)明的目的在于克服現(xiàn)有的存儲和查找方法的缺點和不足,提出一種基于Hash-Cube空間層次劃分結(jié)構(gòu)的最近鄰點集快速檢索方法。

      本發(fā)明的上述目的通過獨立權(quán)利要求的技術(shù)特征實現(xiàn),從屬權(quán)利要求以另選或有利的方式發(fā)展獨立權(quán)利要求的技術(shù)特征。

      為達(dá)成上述目的,本發(fā)明提出的基于Hash-Cube空間層次劃分結(jié)構(gòu)的最近鄰點集快速檢索方法,包括以下步驟:

      步驟一、結(jié)合均分空間的劃分思想,通過估算單位長度內(nèi)包含的點云數(shù)目將整個點云空間劃分為若干個大小相等的子空間(Cube),點云中的所有點將被包裹在這些子空間中;

      步驟二、通過計算每個點的子空間坐標(biāo),結(jié)合Hash函數(shù)直接定址的特點將每個數(shù)據(jù)點分配到對應(yīng)的子空間中;

      步驟三、由于多個數(shù)據(jù)點可能對應(yīng)于同一個單位子空間,因此為了節(jié)省存儲空間,通過對數(shù)據(jù)點排序,提出了一種有效的數(shù)據(jù)點存儲方式,即每個子空間Hash-Cube只需記錄檢索值最小的點的地址;

      步驟四、空間點的最近鄰查詢,最近鄰查找過程中,根據(jù)當(dāng)前點采樣半徑r的大小以及Hash函數(shù)快速建立檢索域,在檢索域中查找位于檢索半徑范圍內(nèi)點,以此確定最近鄰點集,最后完成檢索。

      進(jìn)一步,所述步驟一之前還包括以下處理:

      建立數(shù)據(jù)結(jié)構(gòu),其包括:三維點結(jié)構(gòu)體Point3D,用于記錄點坐標(biāo)、點檢索以及該點所在的子空間坐標(biāo)等數(shù)據(jù)信息;點結(jié)構(gòu)體HashPoint,用于記錄三維點坐標(biāo)、經(jīng)Hash映射后該點對應(yīng)的子空間檢索,該結(jié)構(gòu)體在空間劃分完成后以及后續(xù)的最近鄰查找過程中使用;存儲所有經(jīng)Hash映射后的點云信息的數(shù)組HashPointsArray;存儲所有子空間的數(shù)組HashCubesArray,每個子空間最多只存儲一個數(shù)據(jù)點的指針。

      進(jìn)一步,所述步驟一對點云數(shù)據(jù)的空間劃分,具體包括以下步驟:

      (1)計算點云數(shù)據(jù)集的最小包圍盒{[xmin,xmax][ymin,ymax][zmin,zmax]},根據(jù)包圍盒尺寸以及點云數(shù)目估算單位長度內(nèi)包含的點的數(shù)目cρ;

      (2)估算沿坐標(biāo)軸x,y,z三個方向上的單位子空間個數(shù)nx,ny,nz,即單位子空間在坐標(biāo)軸方向上的解析度;

      (3)根據(jù)(2)步計算的子空間解析度估算單位子空間沿坐標(biāo)軸方向上的尺寸sx,sy,sz

      (4)上述三步執(zhí)行完成之后,整個點云空間被劃分為(cx×cy×cz)個子空間,每個子空間的尺寸為sx×sy×sz。

      進(jìn)一步,所述步驟二設(shè)計Hash函數(shù)將每個數(shù)據(jù)點分配到單位子空間中,在此將Hash函數(shù)定義為關(guān)于坐標(biāo)cx、cy的二元線性函數(shù),其中數(shù)據(jù)點作為輸入?yún)?shù),對應(yīng)的返回值(散列值)為單位子空間檢索Cubeid。任意一點pi所在的單位子空間的檢索Cubeid之間的Hash函數(shù)可表示為:

      <mrow> <msub> <mi>Cube</mi> <mrow> <mi>i</mi> <mi>d</mi> </mrow> </msub> <mo>=</mo> <msubsup> <mi>C</mi> <msub> <mi>p</mi> <mi>i</mi> </msub> <mi>x</mi> </msubsup> <mo>+</mo> <msubsup> <mi>C</mi> <msub> <mi>p</mi> <mi>i</mi> </msub> <mi>y</mi> </msubsup> <mo>&CenterDot;</mo> <msub> <mi>p</mi> <mi>x</mi> </msub> <mo>+</mo> <msubsup> <mi>C</mi> <msub> <mi>p</mi> <mi>i</mi> </msub> <mi>z</mi> </msubsup> <mo>&CenterDot;</mo> <msub> <mi>c</mi> <mi>x</mi> </msub> <mo>&CenterDot;</mo> <msub> <mi>c</mi> <mi>y</mi> </msub> </mrow>

      通過引入Hash函數(shù),在空間點pi與子空間Cubeid之間建立了一個確定的對應(yīng)關(guān)系,使得每個點只歸屬于一個子空間,所有數(shù)據(jù)點經(jīng)Hash函數(shù)映射后存儲在一塊連續(xù)的存儲空間HashPointsArray中。

      進(jìn)一步,所述步驟三通過對數(shù)據(jù)點排序,提出了一種有效的數(shù)據(jù)點存儲方式,即每個子空間Hash-Cube只需記錄檢索值最小的點的地址具體包括:數(shù)據(jù)點分配完成后,由于每個子空間內(nèi)可能包含多個數(shù)據(jù)點,這些點具有相同的子空間檢索,若將每個點都記錄在子空間中,不僅占用大量內(nèi)存空間,而且不利于快速檢索子空間內(nèi)包含的數(shù)據(jù)點。為此,根據(jù)每個點對應(yīng)的Cubeid大小對點云中所有的點進(jìn)行排序,排序之后,每個子空間只需記錄檢索值最小的點的地址,若子空間內(nèi)不包含任何點,則記為NULL,最終將排序后的HashPointsArray中的點云信息與子空間存儲數(shù)組HashCubesArray相關(guān)聯(lián)。

      進(jìn)一步,所述步驟四空間點的最近鄰查詢,具體包括以下步驟:

      (1)以點pi為中心,以2r為邊長建立虛擬檢索立方體,立方體的最小、最大角點坐標(biāo)Cubemin(最小點)、Cubemax(最大點)。

      (2)分別計算虛擬立方體的兩個角點坐標(biāo)Cubemin、Cubemax的子空間坐標(biāo),兩個角點坐標(biāo)可能對應(yīng)于不同的子空間,也可能歸屬于同一個子空間,把位于兩個角點子空間坐標(biāo)區(qū)間內(nèi)的所有非空子空間作為與點pi對應(yīng)的檢索域。

      (3)遍歷檢索域內(nèi)的所有子空間,將每組子空間坐標(biāo)代入已定義的Hash函數(shù),計算對應(yīng)的子空間檢索。由于每個子空間中存儲的是檢索值最小的點的地址,據(jù)此地址可以檢索到包含在內(nèi)的所有點的信息,通過計算每個點與pi的平方距離,進(jìn)而篩選出位于檢索范圍內(nèi)的所有點。

      由以上技術(shù)方案可知,與現(xiàn)有技術(shù)相比,本發(fā)明的顯著優(yōu)點在于:

      結(jié)合均分空間的劃分思想,通過估算單位長度內(nèi)包含的點云數(shù)目將整個點云空間劃分為若干個大小相等的子空間(Cube),點云中的所有點將被包裹在這些子空間中。通過計算每個點的子空間坐標(biāo),結(jié)合Hash函數(shù)直接定址的特點將每個數(shù)據(jù)點分配到對應(yīng)的子空間中,提高數(shù)據(jù)的構(gòu)建效率。由于多個數(shù)據(jù)點可能對應(yīng)于同一個單位子空間,通過對數(shù)據(jù)點排序,提出了一種有效的數(shù)據(jù)點存儲方式,即每個子空間只需記錄檢索值最小的點的地址,大大節(jié)省存儲空間。最近鄰查找過程中,根據(jù)當(dāng)前點采樣半徑r的大小以及Hash函數(shù)快速建立檢索域,從而快速準(zhǔn)確的在檢索域中查找位于檢索半徑范圍內(nèi)點,以此確定最近鄰點集,提高了檢索效率。

      應(yīng)當(dāng)理解,前述構(gòu)思以及在下面更加詳細(xì)地描述的額外構(gòu)思的所有組合只要在這樣的構(gòu)思不相互矛盾的情況下都可以被視為本公開的發(fā)明主題的一部分。另外,所要求保護(hù)的主題的所有組合都被視為本公開的發(fā)明主題的一部分。

      結(jié)合附圖從下面的描述中可以更加全面地理解本發(fā)明教導(dǎo)的前述和其他方面、實施例和特征。本發(fā)明的其他附加方面例如示例性實施方式的特征和/或有益效果將在下面的描述中顯見,或通過根據(jù)本發(fā)明教導(dǎo)的具體實施方式的實踐中得知。

      附圖說明

      附圖不意在按比例繪制。在附圖中,在各個圖中示出的每個相同或近似相同的組成部分可以用相同的標(biāo)號表示。為了清晰起見,在每個圖中,并非每個組成部分均被標(biāo)記?,F(xiàn)在,將通過例子并參考附圖來描述本發(fā)明的各個方面的實施例,其中:

      圖1是利用Hash函數(shù)將點云分配到子空間示意圖,其中利用Hash函數(shù)將點云中的12個點分配到4個子空間中,點云中的每個點只對應(yīng)于一個子空間檢索。

      圖2是Hash-Cube空間劃分示意圖,其中圖2(a)所示為根據(jù)子空間檢索值Cubeid的大小對點云中的10個點排序,Cubeid值相同的元素在HashPointsArray中連續(xù)存儲,HashCubesArray中的3個非空子空間內(nèi)存儲的是檢索值最小的點元素的地址;圖2(b)表示子空間包含數(shù)據(jù)點的示意圖。

      圖3是最近鄰檢索二維示意圖,其中圖3(a)為最初的點云數(shù)據(jù)分布圖,其中目標(biāo)檢索點pi為中間覆蓋面較大的點,圖3(b)表示虛構(gòu)檢索空間立方體(在此表示為二維平面正方形),圖3(c)中的陰影部分是指在虛構(gòu)檢索空間立方體的尺寸點Cubemin(最小點)、Cubemax(最大點)相對應(yīng)檢索范圍內(nèi)所有的子空間區(qū)域,在圖3(d)中圓形區(qū)域內(nèi)部顏色較淺的空間點是指檢索到與目標(biāo)空間點pi的歐氏距離在0—r之間的所有最近鄰點集。

      具體實施方式

      為了更了解本發(fā)明的技術(shù)內(nèi)容,特舉具體實施例并配合所附圖式說明如下。

      在本公開中參照附圖來描述本發(fā)明的各方面,附圖中示出了許多說明的實施例。本公開的實施例不必定意在包括本發(fā)明的所有方面。應(yīng)當(dāng)理解,上面介紹的多種構(gòu)思和實施例,以及下面更加詳細(xì)地描述的那些構(gòu)思和實施方式可以以很多方式中任意一種來實施,這是因為本發(fā)明所公開的構(gòu)思和實施例并不限于任何實施方式。另外,本發(fā)明公開的一些方面可以單獨使用,或者與本發(fā)明公開的其他方面的任何適當(dāng)組合來使用。

      根據(jù)本發(fā)明的實施例,一種基于Hash-Cube空間層次劃分結(jié)構(gòu)的最近鄰點集快速檢索方法,本專利將均分空間層次劃分結(jié)構(gòu)與Hash映射相結(jié)合,通過引入Hash函數(shù)來分配、定址點云,建立數(shù)據(jù)點與單位子空間之間的線性映射,提出了一種基于Hash-Cube空間層次劃分結(jié)構(gòu)的最近鄰點集快速檢索方法。結(jié)合均分空間的劃分思想,通過估算單位長度內(nèi)包含的點云數(shù)目將整個點云空間劃分為若干個大小相等的子空間(Cube),點云中的所有點將被包裹在這些子空間中。通過計算每個點的子空間坐標(biāo),結(jié)合Hash函數(shù)直接定址的特點將每個數(shù)據(jù)點分配到對應(yīng)的子空間中。由于多個數(shù)據(jù)點可能對應(yīng)于同一個單位子空間,因此為了節(jié)省存儲空間,通過對數(shù)據(jù)點排序,提出了一種有效的數(shù)據(jù)點存儲方式,即每個子空間只需記錄檢索值最小的點的地址。最近鄰查找過程中,根據(jù)當(dāng)前點采樣半徑r的大小以及Hash函數(shù)快速建立檢索域,在檢索域中查找位于檢索半徑范圍內(nèi)點,以此確定最近鄰點集,最后完成檢索。

      具體地,前述方法的具體實現(xiàn)包括:

      步驟一、結(jié)合均分空間的劃分思想,通過估算單位長度內(nèi)包含的點云數(shù)目將整個點云空間劃分為若干個大小相等的子空間(Cube),點云中的所有點將被包裹在這些子空間中;

      步驟二、通過計算每個點的子空間坐標(biāo),結(jié)合Hash函數(shù)直接定址的特點將每個數(shù)據(jù)點分配到對應(yīng)的子空間中;

      步驟三、由于多個數(shù)據(jù)點可能對應(yīng)于同一個單位子空間,因此為了節(jié)省存儲空間,通過對數(shù)據(jù)點排序,提出了一種有效的數(shù)據(jù)點存儲方式,即每個子空間Hash-Cube只需記錄檢索值最小的點的地址;

      步驟四、空間點的最近鄰查詢,最近鄰查找過程中,根據(jù)當(dāng)前點采樣半徑r的大小以及Hash函數(shù)快速建立檢索域,在檢索域中查找位于檢索半徑范圍內(nèi)點,以此確定最近鄰點集,最后完成檢索。

      其中,所述步驟一之前還包括以下處理:

      建立數(shù)據(jù)結(jié)構(gòu),其包括:三維點結(jié)構(gòu)體Point3D,用于記錄點坐標(biāo)、點檢索以及該點所在的子空間坐標(biāo)等數(shù)據(jù)信息;點結(jié)構(gòu)體HashPoint,用于記錄三維點坐標(biāo)、經(jīng)Hash映射后該點對應(yīng)的子空間檢索,該結(jié)構(gòu)體在空間劃分完成后以及后續(xù)的最近鄰查找過程中使用;存儲所有經(jīng)Hash映射后的點云信息的數(shù)組HashPointsArray;存儲所有子空間的數(shù)組HashCubesArray,每個子空間最多只存儲一個數(shù)據(jù)點的指針。

      具體地,本發(fā)明中,需要建立下述數(shù)據(jù)結(jié)構(gòu):

      (1)三維點結(jié)構(gòu)體Point3D,用于記錄點坐標(biāo)、點檢索值以及該點所在的子空間坐標(biāo)等數(shù)據(jù)信息,該結(jié)構(gòu)體在空間層次劃分過程中使用,即:

      (2)點結(jié)構(gòu)體HashPoint,用于記錄三維點坐標(biāo)、經(jīng)Hash映射后該點對應(yīng)的子空間檢索值,

      該結(jié)構(gòu)體在空間劃分完成后以及后續(xù)的最近鄰查找過程中使用,即:

      (3)存儲所有經(jīng)Hash映射后的點云信息的數(shù)組HashPointsArray,即:

      std::vector<HashPoint>HashPointsArray;

      (4)存儲所有子空間的數(shù)組HashCubesArray,每個子空間最多只存儲一個數(shù)據(jù)點的指針,即:

      std::vector<HashPoint*>HashCubesArray;

      (一)基于Hash-Cube對空間的劃分

      本節(jié)將依據(jù)點云包圍盒的尺寸、點云數(shù)目估算子空間的解析度,并利用Hash函數(shù)分配每一個數(shù)據(jù)點的存儲位置。對于點云數(shù)據(jù)的空間劃分過程可通過如下步驟執(zhí)行:

      (1)計算點云數(shù)據(jù)集的最小包圍盒{[xmin,xmax][ymin,ymax][zmin,zmax]},根據(jù)包圍盒尺寸以及點云數(shù)目估算單位長度內(nèi)包含的點的數(shù)目cρ,即

      <mrow> <msub> <mi>c</mi> <mi>&rho;</mi> </msub> <mo>=</mo> <mroot> <mfrac> <mi>c</mi> <mrow> <mrow> <mo>|</mo> <mrow> <msub> <mi>x</mi> <mrow> <mi>m</mi> <mi>a</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>x</mi> <mrow> <mi>m</mi> <mi>i</mi> <mi>n</mi> </mrow> </msub> </mrow> <mo>|</mo> </mrow> <mo>&CenterDot;</mo> <mrow> <mo>|</mo> <mrow> <msub> <mi>y</mi> <mrow> <mi>m</mi> <mi>a</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>y</mi> <mrow> <mi>m</mi> <mi>i</mi> <mi>n</mi> </mrow> </msub> </mrow> <mo>|</mo> </mrow> <mo>&CenterDot;</mo> <mrow> <mo>|</mo> <mrow> <msub> <mi>z</mi> <mrow> <mi>m</mi> <mi>a</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>z</mi> <mrow> <mi>m</mi> <mi>i</mi> <mi>n</mi> </mrow> </msub> </mrow> <mo>|</mo> </mrow> </mrow> </mfrac> <mn>3</mn> </mroot> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow>

      (2)估算沿坐標(biāo)軸x,y,z三個方向上的單位子空間個數(shù)nx,ny,nz,即單位子空間在坐標(biāo)軸方向上的解析度,表示為

      其中為向上取整符號。

      (3)根據(jù)(2)步計算的子空間解析度估算單位子空間沿坐標(biāo)軸方向上的尺寸sx,sy,sz,即:

      <mrow> <msub> <mi>s</mi> <mi>x</mi> </msub> <mo>=</mo> <mfrac> <mrow> <mo>|</mo> <mrow> <msub> <mi>x</mi> <mrow> <mi>m</mi> <mi>a</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>x</mi> <mrow> <mi>m</mi> <mi>i</mi> <mi>n</mi> </mrow> </msub> </mrow> <mo>|</mo> </mrow> <msub> <mi>c</mi> <mi>x</mi> </msub> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>6</mn> <mo>)</mo> </mrow> </mrow>

      <mrow> <msub> <mi>s</mi> <mi>y</mi> </msub> <mo>=</mo> <mfrac> <mrow> <mo>|</mo> <mrow> <msub> <mi>y</mi> <mrow> <mi>m</mi> <mi>a</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>y</mi> <mrow> <mi>m</mi> <mi>i</mi> <mi>n</mi> </mrow> </msub> </mrow> <mo>|</mo> </mrow> <msub> <mi>c</mi> <mi>y</mi> </msub> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>7</mn> <mo>)</mo> </mrow> </mrow>

      <mrow> <msub> <mi>s</mi> <mi>z</mi> </msub> <mo>=</mo> <mfrac> <mrow> <mo>|</mo> <mrow> <msub> <mi>z</mi> <mrow> <mi>m</mi> <mi>a</mi> <mi>x</mi> </mrow> </msub> <mo>-</mo> <msub> <mi>z</mi> <mrow> <mi>m</mi> <mi>i</mi> <mi>n</mi> </mrow> </msub> </mrow> <mo>|</mo> </mrow> <msub> <mi>c</mi> <mi>z</mi> </msub> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>8</mn> <mo>)</mo> </mrow> </mrow>

      上述三步執(zhí)行完成之后,整個點云空間被劃分為(cx×cy×cz)個子空間,每個子空間的尺寸為sx×sy×sz。

      (4)設(shè)計Hash函數(shù)將每個數(shù)據(jù)點分配到單位子空間中,在此將Hash函數(shù)定義為關(guān)于坐標(biāo)cx、cy的二元線性函數(shù),其中數(shù)據(jù)點作為輸入?yún)?shù),對應(yīng)的返回值(散列值)為單位子空間檢索值Cubeid。任意一點pi所在的單位子空間的檢索值Cubeid可表示為:

      <mrow> <msub> <mi>Cube</mi> <mrow> <mi>i</mi> <mi>d</mi> </mrow> </msub> <mo>=</mo> <msubsup> <mi>C</mi> <msub> <mi>p</mi> <mi>i</mi> </msub> <mi>x</mi> </msubsup> <mo>+</mo> <msubsup> <mi>C</mi> <msub> <mi>p</mi> <mi>i</mi> </msub> <mi>y</mi> </msubsup> <mo>&CenterDot;</mo> <msub> <mi>p</mi> <mi>x</mi> </msub> <mo>+</mo> <msubsup> <mi>C</mi> <msub> <mi>p</mi> <mi>i</mi> </msub> <mi>z</mi> </msubsup> <mo>&CenterDot;</mo> <msub> <mi>c</mi> <mi>x</mi> </msub> <mo>&CenterDot;</mo> <msub> <mi>c</mi> <mi>y</mi> </msub> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>9</mn> <mo>)</mo> </mrow> </mrow>

      式中,,分別表示點pi在x軸、y軸、z軸方向上的子空間坐標(biāo),即

      其中,pix、piy、piz分別表示點pi沿x軸、y軸、z軸方向的坐標(biāo)。

      通過引入Hash函數(shù),在空間點pi與子空間Cubeid之間建立了一個確定的對應(yīng)關(guān)系,使得每個點只歸屬于一個子空間,所有數(shù)據(jù)點經(jīng)Hash函數(shù)映射后存儲在一塊連續(xù)的存儲空間HashPoints中。圖1表示利用Hash函數(shù)將點云中的12個點分配到4個子空間中,點云中的每個點只對應(yīng)于一個子空間檢索。

      由圖1可知,點云中的10個點只對應(yīng)于3個子空間空間,出現(xiàn)了多個元素關(guān)鍵字(Key)對應(yīng)同一個散列值的“沖突”現(xiàn)象,例如其中點1、7、8、11、12映射在相同的子空間Cube1中。通常要處理的點云數(shù)據(jù)量一般在數(shù)十萬個點以上,若要求實現(xiàn)每個點與散列值的一一對應(yīng),則對于散列函數(shù)的設(shè)計要求較為苛刻。由于子空間的數(shù)目遠(yuǎn)小于點云的規(guī)模,多個點不可避免的會被映射到同一個子空間中,這也恰恰反映了這些點的空間位置比較接近,也就是說,位置關(guān)系比較接近的數(shù)據(jù)點,極有可能被映射到同一個或相鄰的子空間中。因此,這種“沖突”是不需要避免的,反而可以借助這類“沖突”從相鄰子空間中查找到最近鄰點集。

      (5)數(shù)據(jù)點分配完成后,由于每個子空間內(nèi)可能包含多個數(shù)據(jù)點,這些點具有相同的子空間檢索,若將每個點都記錄在子空間中,不僅占用大量內(nèi)存空間,而且不利于快速檢索子空間內(nèi)包含的數(shù)據(jù)點。為此,根據(jù)每個點對應(yīng)的Cubeid大小對點云中所有的點進(jìn)行排序,排序之后,每個子空間只需記錄檢索值最小的點的地址,若子空間內(nèi)不包含任何點,則記為NULL,最終將排序后的HashPoints中的點云信息與子空間存儲數(shù)組HashCubes相關(guān)聯(lián)。如圖2(a)所示,根據(jù)子空間檢索值Cubeid的大小對點云中的12個點排序,Cubeid值相同的元素在HashPoints中連續(xù)存儲,HashCubes中的3個非空子空間內(nèi)存儲的是檢索值最小的點元素的地址;圖2(b)表示子空間包含數(shù)據(jù)點的示意圖。

      (二)空間點的最近鄰查詢

      利用Hash-Cube結(jié)構(gòu)對點云空間劃分完成后,由于劃分方式是人為界定的,加之點云的分布是隨機(jī)的、不規(guī)則的,使得空間點pi的最近鄰點可能分布于多個相鄰的子空間中,單純在pi點所在的子空間內(nèi)查找是不準(zhǔn)確的。如圖2(a),檢索值為8的空間點在Cube1的右下角,該點的最近鄰點可能在Cube1附近的子空間Cube2和Cube4中。所以,在對空間中任意點進(jìn)行最近鄰檢索的時候,不僅要在當(dāng)前點所屬子空間中檢索,還需要從當(dāng)前點的相鄰子空間中檢索,其中如何確定哪些鄰域子空間包含近鄰點以及如何快速的檢索這些點是最近鄰檢索方法的關(guān)鍵。

      根據(jù)當(dāng)前點pi的查找距離r,建立包裹pi點的虛擬立方體,再次利用Hash函數(shù)直接定址的方式查找與該虛擬立方體有交集或位于虛擬立方體內(nèi)部的所有子空間,將這些子空間作為點pi的鄰接子空間,即點pi的檢索域,以此限定最近鄰檢索的范圍,待查找的最近鄰點必定位于檢索區(qū)域集內(nèi)。隨后通過遍歷檢索區(qū)域集內(nèi)的每一個非空子空間篩選出與點pi的距離小于r的所有點(為了避免開平方運算,使用平方距離替代歐氏距離),可以快速實現(xiàn)對任意空間點pi的最近鄰查詢,檢索方法的具體細(xì)節(jié)如下:

      (1)以當(dāng)前目標(biāo)點pi為檢索中心,以2r為邊長構(gòu)建虛構(gòu)檢索空間立方體,其中該立方體的尺寸坐標(biāo)Cubemin(最小點)、Cubemax(最大點)利用以下公式計算:

      Cubemin=(pix-r,piy-r,piz-r) (13)

      Cubemax=(pix+r,piy+r,piz+r) (14)

      (2)利用公式(10-12)分別計算虛擬立方體的兩個角點坐標(biāo)Cubemin、Cubemax的子空間坐標(biāo),兩個角點坐標(biāo)可能對應(yīng)于不同的子空間,也可能歸屬于同一個子空間,把位于兩個角點子空間坐標(biāo)區(qū)間內(nèi)的所有非空子空間作為與點pi對應(yīng)的檢索域。

      (3)將檢索域中所有包含的子空間依次訪問,將每組子空間坐標(biāo)代入式(9)所定義的Hash函數(shù),計算對應(yīng)的子空間檢索值。由于每個子空間中存儲的是檢索值最小的點的地址,據(jù)此地址可以檢索到包含在內(nèi)的所有點的信息,通過計算每個點與pi的平方距離,進(jìn)而篩選出位于檢索范圍內(nèi)的所有點。

      圖3表示的是以上檢索整個過程中的二維平面示意圖,其中圖3(a)為最初的點云數(shù)據(jù)分布圖,其中目標(biāo)檢索點pi為中間覆蓋面較大的點,圖3(b)表示虛構(gòu)檢索空間立方體(在此表示為二維平面正方形),圖3(c)中的陰影部分是指在虛構(gòu)檢索空間立方體的尺寸點Cubemin(最小點)、Cubemax(最大點)相對應(yīng)檢索范圍內(nèi)所有的子空間區(qū)域,在圖3(d)中圓形區(qū)域內(nèi)部顏色較淺的空間點是指檢索到與目標(biāo)空間點pi的歐氏距離在0—r之間的所有最近鄰點集。

      雖然本發(fā)明已以較佳實施例揭露如上,然其并非用以限定本發(fā)明。本發(fā)明所屬技術(shù)領(lǐng)域中具有通常知識者,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可作各種的更動與潤飾。因此,本發(fā)明的保護(hù)范圍當(dāng)視權(quán)利要求書所界定者為準(zhǔn)。

      當(dāng)前第1頁1 2 3 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1