本發(fā)明涉及計(jì)算機(jī)數(shù)據(jù)和查詢技術(shù),特別涉及一種基于Hash-Cube空間層次劃分結(jié)構(gòu)的最近鄰點(diǎn)集快速檢索方法。
背景技術(shù):
三維測(cè)量技術(shù)的飛速發(fā)展使得對(duì)實(shí)體的掃描越來越精細(xì),隨之獲取的點(diǎn)云規(guī)模也頗為巨大,如何快速有效地從這些散亂點(diǎn)云數(shù)據(jù)中查找任意點(diǎn)的最近鄰點(diǎn)集一直是一個(gè)比較熱門的研究方向,諸多基于點(diǎn)云的數(shù)字幾何處理,例如點(diǎn)法矢計(jì)算、點(diǎn)云拼接、點(diǎn)云去噪、點(diǎn)云網(wǎng)格化等,均依賴于高效可行的最近鄰查詢結(jié)構(gòu)。
目前,關(guān)于最近鄰點(diǎn)集的檢索方法主要有三類,包括蠻力查找、Voronoi圖查找以及空間劃分查找,其中:(一)蠻力查找是一類最為簡(jiǎn)單的最近鄰查找方法,先計(jì)算當(dāng)前點(diǎn)與點(diǎn)云數(shù)據(jù)集中每個(gè)點(diǎn)的歐氏距離,再選擇距離最短的前k個(gè)點(diǎn)作為最近鄰點(diǎn)集,若需要計(jì)算點(diǎn)云數(shù)據(jù)集中所有點(diǎn)的最近鄰,則所需的時(shí)間復(fù)雜度為O(n2),這對(duì)于實(shí)現(xiàn)大規(guī)模點(diǎn)云的高效處理幾乎是不現(xiàn)實(shí)的;(二)Voronoi圖查找,該類檢索方法根據(jù)點(diǎn)的位置分布將點(diǎn)云空間劃分為若干個(gè)Voronoi子區(qū)域,每個(gè)點(diǎn)被包含在子區(qū)域中,通過計(jì)算與該區(qū)域共邊的其它子區(qū)域所包含的點(diǎn)即為當(dāng)前點(diǎn)的最近鄰點(diǎn)。由于Voronoi圖的計(jì)算代價(jià)比較高,使得該方法的復(fù)雜度為O(n2logn);(三)空間劃分查找,該類方法的執(zhí)行思路在于首先對(duì)點(diǎn)云數(shù)據(jù)做空間分塊,然后基于深度優(yōu)先策略或最佳優(yōu)先策略在劃分空間內(nèi)進(jìn)行最近鄰查找,代表性的方法有基于四叉樹、基于八叉樹以及基于k-d樹的最近鄰檢索,其中基于k-d樹的最近鄰檢索理論上具有O(nlogn+nk)的時(shí)間復(fù)雜度。
基于空間劃分的最近鄰檢索效率明顯優(yōu)于蠻力查找以及Voronoi圖查找,而均分空間層次劃分結(jié)構(gòu)又是一類比較直觀地空間分塊方式,其中使用的Hash函數(shù),又稱哈希函數(shù)、散列函數(shù),是指在給定任意長(zhǎng)度關(guān)鍵字(Key)的條件下,通過某個(gè)函數(shù)f將關(guān)鍵字映射為散列值(Hash Value)的函數(shù),即
HashValue=f(Key) (1)
散列值一般可表示為關(guān)鍵字的存儲(chǔ)位置,因此,在對(duì)關(guān)鍵字進(jìn)行查找時(shí)直接通過Hash函數(shù)映射就可以找到關(guān)鍵字的存儲(chǔ)位置,換而言之,Hash函數(shù)能夠根據(jù)關(guān)鍵字將各元素歸類,可以通過直接定址的方式查找到關(guān)鍵字的存儲(chǔ)位置。Hash映射是一種壓縮映射,即散列值的數(shù)據(jù)量遠(yuǎn)小于輸入?yún)?shù)的數(shù)據(jù)量,因而,散列值一般長(zhǎng)度較短,形式簡(jiǎn)單。
散列技術(shù)不僅是一種存儲(chǔ)技術(shù),同時(shí)也是一種查找方法,在對(duì)任意某個(gè)元素(關(guān)鍵字)進(jìn)行查找時(shí),只需要通過同樣的Hash函數(shù)計(jì)算對(duì)應(yīng)的散列地址,按此地址訪問存儲(chǔ)元素。這種存儲(chǔ)查找方式與四叉樹、八叉樹等樹狀結(jié)構(gòu)以及線性表、圖等結(jié)構(gòu)的不同之處在于,上述幾種結(jié)構(gòu),通過建立某種邏輯關(guān)系將所有的數(shù)據(jù)元素關(guān)聯(lián)在一起,在對(duì)元素查找時(shí)需要大量的比較過程,而Hash函數(shù)映射的數(shù)據(jù)元素之間不存在任何的邏輯關(guān)系,只跟關(guān)鍵字(Key)相關(guān),可以簡(jiǎn)化查找比較過程。因此,散列技術(shù)比較適用于查找過程,具備較高的查找效率。
用P={p1,p2,...,pn}表示點(diǎn)云數(shù)據(jù)集,其中n表示包含點(diǎn)的個(gè)數(shù)。對(duì)于集合中的任意一點(diǎn)pi,把當(dāng)前點(diǎn)集P中與pi的歐氏距離最近的k個(gè)點(diǎn)或者與pi的歐氏距離小于閾值r的稱作pi的最近鄰點(diǎn)集,記作Near(pi),最近鄰點(diǎn)集中包含的每個(gè)點(diǎn)稱為pi的鄰域點(diǎn)。為便于區(qū)分,把通過限定鄰域點(diǎn)的個(gè)數(shù)k進(jìn)行最近鄰查找的方式稱作k近鄰查找,而通過給定檢索距離r進(jìn)行最近鄰查找的方式稱作r近鄰查找。
隨著三維測(cè)量技術(shù)的飛速發(fā)展,掃描所得到的實(shí)體圖像越來越清晰,數(shù)據(jù)量也越來越大,這樣帶來的問題就是龐大的數(shù)據(jù)量用傳統(tǒng)的查找方式耗時(shí)會(huì)非常大,因此需要一種查找迅速,資源消耗較少,使用效率高的查找方法。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有的存儲(chǔ)和查找方法的缺點(diǎn)和不足,提出一種基于Hash-Cube空間層次劃分結(jié)構(gòu)的最近鄰點(diǎn)集快速檢索方法。
本發(fā)明的上述目的通過獨(dú)立權(quán)利要求的技術(shù)特征實(shí)現(xiàn),從屬權(quán)利要求以另選或有利的方式發(fā)展獨(dú)立權(quán)利要求的技術(shù)特征。
為達(dá)成上述目的,本發(fā)明提出的基于Hash-Cube空間層次劃分結(jié)構(gòu)的最近鄰點(diǎn)集快速檢索方法,包括以下步驟:
步驟一、結(jié)合均分空間的劃分思想,通過估算單位長(zhǎng)度內(nèi)包含的點(diǎn)云數(shù)目將整個(gè)點(diǎn)云空間劃分為若干個(gè)大小相等的子空間(Cube),點(diǎn)云中的所有點(diǎn)將被包裹在這些子空間中;
步驟二、通過計(jì)算每個(gè)點(diǎn)的子空間坐標(biāo),結(jié)合Hash函數(shù)直接定址的特點(diǎn)將每個(gè)數(shù)據(jù)點(diǎn)分配到對(duì)應(yīng)的子空間中;
步驟三、由于多個(gè)數(shù)據(jù)點(diǎn)可能對(duì)應(yīng)于同一個(gè)單位子空間,因此為了節(jié)省存儲(chǔ)空間,通過對(duì)數(shù)據(jù)點(diǎn)排序,提出了一種有效的數(shù)據(jù)點(diǎn)存儲(chǔ)方式,即每個(gè)子空間Hash-Cube只需記錄檢索值最小的點(diǎn)的地址;
步驟四、空間點(diǎn)的最近鄰查詢,最近鄰查找過程中,根據(jù)當(dāng)前點(diǎn)采樣半徑r的大小以及Hash函數(shù)快速建立檢索域,在檢索域中查找位于檢索半徑范圍內(nèi)點(diǎn),以此確定最近鄰點(diǎn)集,最后完成檢索。
進(jìn)一步,所述步驟一之前還包括以下處理:
建立數(shù)據(jù)結(jié)構(gòu),其包括:三維點(diǎn)結(jié)構(gòu)體Point3D,用于記錄點(diǎn)坐標(biāo)、點(diǎn)檢索以及該點(diǎn)所在的子空間坐標(biāo)等數(shù)據(jù)信息;點(diǎn)結(jié)構(gòu)體HashPoint,用于記錄三維點(diǎn)坐標(biāo)、經(jīng)Hash映射后該點(diǎn)對(duì)應(yīng)的子空間檢索,該結(jié)構(gòu)體在空間劃分完成后以及后續(xù)的最近鄰查找過程中使用;存儲(chǔ)所有經(jīng)Hash映射后的點(diǎn)云信息的數(shù)組HashPointsArray;存儲(chǔ)所有子空間的數(shù)組HashCubesArray,每個(gè)子空間最多只存儲(chǔ)一個(gè)數(shù)據(jù)點(diǎn)的指針。
進(jìn)一步,所述步驟一對(duì)點(diǎn)云數(shù)據(jù)的空間劃分,具體包括以下步驟:
(1)計(jì)算點(diǎn)云數(shù)據(jù)集的最小包圍盒{[xmin,xmax][ymin,ymax][zmin,zmax]},根據(jù)包圍盒尺寸以及點(diǎn)云數(shù)目估算單位長(zhǎng)度內(nèi)包含的點(diǎn)的數(shù)目cρ;
(2)估算沿坐標(biāo)軸x,y,z三個(gè)方向上的單位子空間個(gè)數(shù)nx,ny,nz,即單位子空間在坐標(biāo)軸方向上的解析度;
(3)根據(jù)(2)步計(jì)算的子空間解析度估算單位子空間沿坐標(biāo)軸方向上的尺寸sx,sy,sz;
(4)上述三步執(zhí)行完成之后,整個(gè)點(diǎn)云空間被劃分為(cx×cy×cz)個(gè)子空間,每個(gè)子空間的尺寸為sx×sy×sz。
進(jìn)一步,所述步驟二設(shè)計(jì)Hash函數(shù)將每個(gè)數(shù)據(jù)點(diǎn)分配到單位子空間中,在此將Hash函數(shù)定義為關(guān)于坐標(biāo)cx、cy的二元線性函數(shù),其中數(shù)據(jù)點(diǎn)作為輸入?yún)?shù),對(duì)應(yīng)的返回值(散列值)為單位子空間檢索Cubeid。任意一點(diǎn)pi所在的單位子空間的檢索Cubeid之間的Hash函數(shù)可表示為:
通過引入Hash函數(shù),在空間點(diǎn)pi與子空間Cubeid之間建立了一個(gè)確定的對(duì)應(yīng)關(guān)系,使得每個(gè)點(diǎn)只歸屬于一個(gè)子空間,所有數(shù)據(jù)點(diǎn)經(jīng)Hash函數(shù)映射后存儲(chǔ)在一塊連續(xù)的存儲(chǔ)空間HashPointsArray中。
進(jìn)一步,所述步驟三通過對(duì)數(shù)據(jù)點(diǎn)排序,提出了一種有效的數(shù)據(jù)點(diǎn)存儲(chǔ)方式,即每個(gè)子空間Hash-Cube只需記錄檢索值最小的點(diǎn)的地址具體包括:數(shù)據(jù)點(diǎn)分配完成后,由于每個(gè)子空間內(nèi)可能包含多個(gè)數(shù)據(jù)點(diǎn),這些點(diǎn)具有相同的子空間檢索,若將每個(gè)點(diǎn)都記錄在子空間中,不僅占用大量?jī)?nèi)存空間,而且不利于快速檢索子空間內(nèi)包含的數(shù)據(jù)點(diǎn)。為此,根據(jù)每個(gè)點(diǎn)對(duì)應(yīng)的Cubeid大小對(duì)點(diǎn)云中所有的點(diǎn)進(jìn)行排序,排序之后,每個(gè)子空間只需記錄檢索值最小的點(diǎn)的地址,若子空間內(nèi)不包含任何點(diǎn),則記為NULL,最終將排序后的HashPointsArray中的點(diǎn)云信息與子空間存儲(chǔ)數(shù)組HashCubesArray相關(guān)聯(lián)。
進(jìn)一步,所述步驟四空間點(diǎn)的最近鄰查詢,具體包括以下步驟:
(1)以點(diǎn)pi為中心,以2r為邊長(zhǎng)建立虛擬檢索立方體,立方體的最小、最大角點(diǎn)坐標(biāo)Cubemin(最小點(diǎn))、Cubemax(最大點(diǎn))。
(2)分別計(jì)算虛擬立方體的兩個(gè)角點(diǎn)坐標(biāo)Cubemin、Cubemax的子空間坐標(biāo),兩個(gè)角點(diǎn)坐標(biāo)可能對(duì)應(yīng)于不同的子空間,也可能歸屬于同一個(gè)子空間,把位于兩個(gè)角點(diǎn)子空間坐標(biāo)區(qū)間內(nèi)的所有非空子空間作為與點(diǎn)pi對(duì)應(yīng)的檢索域。
(3)遍歷檢索域內(nèi)的所有子空間,將每組子空間坐標(biāo)代入已定義的Hash函數(shù),計(jì)算對(duì)應(yīng)的子空間檢索。由于每個(gè)子空間中存儲(chǔ)的是檢索值最小的點(diǎn)的地址,據(jù)此地址可以檢索到包含在內(nèi)的所有點(diǎn)的信息,通過計(jì)算每個(gè)點(diǎn)與pi的平方距離,進(jìn)而篩選出位于檢索范圍內(nèi)的所有點(diǎn)。
由以上技術(shù)方案可知,與現(xiàn)有技術(shù)相比,本發(fā)明的顯著優(yōu)點(diǎn)在于:
結(jié)合均分空間的劃分思想,通過估算單位長(zhǎng)度內(nèi)包含的點(diǎn)云數(shù)目將整個(gè)點(diǎn)云空間劃分為若干個(gè)大小相等的子空間(Cube),點(diǎn)云中的所有點(diǎn)將被包裹在這些子空間中。通過計(jì)算每個(gè)點(diǎn)的子空間坐標(biāo),結(jié)合Hash函數(shù)直接定址的特點(diǎn)將每個(gè)數(shù)據(jù)點(diǎn)分配到對(duì)應(yīng)的子空間中,提高數(shù)據(jù)的構(gòu)建效率。由于多個(gè)數(shù)據(jù)點(diǎn)可能對(duì)應(yīng)于同一個(gè)單位子空間,通過對(duì)數(shù)據(jù)點(diǎn)排序,提出了一種有效的數(shù)據(jù)點(diǎn)存儲(chǔ)方式,即每個(gè)子空間只需記錄檢索值最小的點(diǎn)的地址,大大節(jié)省存儲(chǔ)空間。最近鄰查找過程中,根據(jù)當(dāng)前點(diǎn)采樣半徑r的大小以及Hash函數(shù)快速建立檢索域,從而快速準(zhǔn)確的在檢索域中查找位于檢索半徑范圍內(nèi)點(diǎn),以此確定最近鄰點(diǎn)集,提高了檢索效率。
應(yīng)當(dāng)理解,前述構(gòu)思以及在下面更加詳細(xì)地描述的額外構(gòu)思的所有組合只要在這樣的構(gòu)思不相互矛盾的情況下都可以被視為本公開的發(fā)明主題的一部分。另外,所要求保護(hù)的主題的所有組合都被視為本公開的發(fā)明主題的一部分。
結(jié)合附圖從下面的描述中可以更加全面地理解本發(fā)明教導(dǎo)的前述和其他方面、實(shí)施例和特征。本發(fā)明的其他附加方面例如示例性實(shí)施方式的特征和/或有益效果將在下面的描述中顯見,或通過根據(jù)本發(fā)明教導(dǎo)的具體實(shí)施方式的實(shí)踐中得知。
附圖說明
附圖不意在按比例繪制。在附圖中,在各個(gè)圖中示出的每個(gè)相同或近似相同的組成部分可以用相同的標(biāo)號(hào)表示。為了清晰起見,在每個(gè)圖中,并非每個(gè)組成部分均被標(biāo)記?,F(xiàn)在,將通過例子并參考附圖來描述本發(fā)明的各個(gè)方面的實(shí)施例,其中:
圖1是利用Hash函數(shù)將點(diǎn)云分配到子空間示意圖,其中利用Hash函數(shù)將點(diǎn)云中的12個(gè)點(diǎn)分配到4個(gè)子空間中,點(diǎn)云中的每個(gè)點(diǎn)只對(duì)應(yīng)于一個(gè)子空間檢索。
圖2是Hash-Cube空間劃分示意圖,其中圖2(a)所示為根據(jù)子空間檢索值Cubeid的大小對(duì)點(diǎn)云中的10個(gè)點(diǎn)排序,Cubeid值相同的元素在HashPointsArray中連續(xù)存儲(chǔ),HashCubesArray中的3個(gè)非空子空間內(nèi)存儲(chǔ)的是檢索值最小的點(diǎn)元素的地址;圖2(b)表示子空間包含數(shù)據(jù)點(diǎn)的示意圖。
圖3是最近鄰檢索二維示意圖,其中圖3(a)為最初的點(diǎn)云數(shù)據(jù)分布圖,其中目標(biāo)檢索點(diǎn)pi為中間覆蓋面較大的點(diǎn),圖3(b)表示虛構(gòu)檢索空間立方體(在此表示為二維平面正方形),圖3(c)中的陰影部分是指在虛構(gòu)檢索空間立方體的尺寸點(diǎn)Cubemin(最小點(diǎn))、Cubemax(最大點(diǎn))相對(duì)應(yīng)檢索范圍內(nèi)所有的子空間區(qū)域,在圖3(d)中圓形區(qū)域內(nèi)部顏色較淺的空間點(diǎn)是指檢索到與目標(biāo)空間點(diǎn)pi的歐氏距離在0—r之間的所有最近鄰點(diǎn)集。
具體實(shí)施方式
為了更了解本發(fā)明的技術(shù)內(nèi)容,特舉具體實(shí)施例并配合所附圖式說明如下。
在本公開中參照附圖來描述本發(fā)明的各方面,附圖中示出了許多說明的實(shí)施例。本公開的實(shí)施例不必定意在包括本發(fā)明的所有方面。應(yīng)當(dāng)理解,上面介紹的多種構(gòu)思和實(shí)施例,以及下面更加詳細(xì)地描述的那些構(gòu)思和實(shí)施方式可以以很多方式中任意一種來實(shí)施,這是因?yàn)楸景l(fā)明所公開的構(gòu)思和實(shí)施例并不限于任何實(shí)施方式。另外,本發(fā)明公開的一些方面可以單獨(dú)使用,或者與本發(fā)明公開的其他方面的任何適當(dāng)組合來使用。
根據(jù)本發(fā)明的實(shí)施例,一種基于Hash-Cube空間層次劃分結(jié)構(gòu)的最近鄰點(diǎn)集快速檢索方法,本專利將均分空間層次劃分結(jié)構(gòu)與Hash映射相結(jié)合,通過引入Hash函數(shù)來分配、定址點(diǎn)云,建立數(shù)據(jù)點(diǎn)與單位子空間之間的線性映射,提出了一種基于Hash-Cube空間層次劃分結(jié)構(gòu)的最近鄰點(diǎn)集快速檢索方法。結(jié)合均分空間的劃分思想,通過估算單位長(zhǎng)度內(nèi)包含的點(diǎn)云數(shù)目將整個(gè)點(diǎn)云空間劃分為若干個(gè)大小相等的子空間(Cube),點(diǎn)云中的所有點(diǎn)將被包裹在這些子空間中。通過計(jì)算每個(gè)點(diǎn)的子空間坐標(biāo),結(jié)合Hash函數(shù)直接定址的特點(diǎn)將每個(gè)數(shù)據(jù)點(diǎn)分配到對(duì)應(yīng)的子空間中。由于多個(gè)數(shù)據(jù)點(diǎn)可能對(duì)應(yīng)于同一個(gè)單位子空間,因此為了節(jié)省存儲(chǔ)空間,通過對(duì)數(shù)據(jù)點(diǎn)排序,提出了一種有效的數(shù)據(jù)點(diǎn)存儲(chǔ)方式,即每個(gè)子空間只需記錄檢索值最小的點(diǎn)的地址。最近鄰查找過程中,根據(jù)當(dāng)前點(diǎn)采樣半徑r的大小以及Hash函數(shù)快速建立檢索域,在檢索域中查找位于檢索半徑范圍內(nèi)點(diǎn),以此確定最近鄰點(diǎn)集,最后完成檢索。
具體地,前述方法的具體實(shí)現(xiàn)包括:
步驟一、結(jié)合均分空間的劃分思想,通過估算單位長(zhǎng)度內(nèi)包含的點(diǎn)云數(shù)目將整個(gè)點(diǎn)云空間劃分為若干個(gè)大小相等的子空間(Cube),點(diǎn)云中的所有點(diǎn)將被包裹在這些子空間中;
步驟二、通過計(jì)算每個(gè)點(diǎn)的子空間坐標(biāo),結(jié)合Hash函數(shù)直接定址的特點(diǎn)將每個(gè)數(shù)據(jù)點(diǎn)分配到對(duì)應(yīng)的子空間中;
步驟三、由于多個(gè)數(shù)據(jù)點(diǎn)可能對(duì)應(yīng)于同一個(gè)單位子空間,因此為了節(jié)省存儲(chǔ)空間,通過對(duì)數(shù)據(jù)點(diǎn)排序,提出了一種有效的數(shù)據(jù)點(diǎn)存儲(chǔ)方式,即每個(gè)子空間Hash-Cube只需記錄檢索值最小的點(diǎn)的地址;
步驟四、空間點(diǎn)的最近鄰查詢,最近鄰查找過程中,根據(jù)當(dāng)前點(diǎn)采樣半徑r的大小以及Hash函數(shù)快速建立檢索域,在檢索域中查找位于檢索半徑范圍內(nèi)點(diǎn),以此確定最近鄰點(diǎn)集,最后完成檢索。
其中,所述步驟一之前還包括以下處理:
建立數(shù)據(jù)結(jié)構(gòu),其包括:三維點(diǎn)結(jié)構(gòu)體Point3D,用于記錄點(diǎn)坐標(biāo)、點(diǎn)檢索以及該點(diǎn)所在的子空間坐標(biāo)等數(shù)據(jù)信息;點(diǎn)結(jié)構(gòu)體HashPoint,用于記錄三維點(diǎn)坐標(biāo)、經(jīng)Hash映射后該點(diǎn)對(duì)應(yīng)的子空間檢索,該結(jié)構(gòu)體在空間劃分完成后以及后續(xù)的最近鄰查找過程中使用;存儲(chǔ)所有經(jīng)Hash映射后的點(diǎn)云信息的數(shù)組HashPointsArray;存儲(chǔ)所有子空間的數(shù)組HashCubesArray,每個(gè)子空間最多只存儲(chǔ)一個(gè)數(shù)據(jù)點(diǎn)的指針。
具體地,本發(fā)明中,需要建立下述數(shù)據(jù)結(jié)構(gòu):
(1)三維點(diǎn)結(jié)構(gòu)體Point3D,用于記錄點(diǎn)坐標(biāo)、點(diǎn)檢索值以及該點(diǎn)所在的子空間坐標(biāo)等數(shù)據(jù)信息,該結(jié)構(gòu)體在空間層次劃分過程中使用,即:
(2)點(diǎn)結(jié)構(gòu)體HashPoint,用于記錄三維點(diǎn)坐標(biāo)、經(jīng)Hash映射后該點(diǎn)對(duì)應(yīng)的子空間檢索值,
該結(jié)構(gòu)體在空間劃分完成后以及后續(xù)的最近鄰查找過程中使用,即:
(3)存儲(chǔ)所有經(jīng)Hash映射后的點(diǎn)云信息的數(shù)組HashPointsArray,即:
std::vector<HashPoint>HashPointsArray;
(4)存儲(chǔ)所有子空間的數(shù)組HashCubesArray,每個(gè)子空間最多只存儲(chǔ)一個(gè)數(shù)據(jù)點(diǎn)的指針,即:
std::vector<HashPoint*>HashCubesArray;
(一)基于Hash-Cube對(duì)空間的劃分
本節(jié)將依據(jù)點(diǎn)云包圍盒的尺寸、點(diǎn)云數(shù)目估算子空間的解析度,并利用Hash函數(shù)分配每一個(gè)數(shù)據(jù)點(diǎn)的存儲(chǔ)位置。對(duì)于點(diǎn)云數(shù)據(jù)的空間劃分過程可通過如下步驟執(zhí)行:
(1)計(jì)算點(diǎn)云數(shù)據(jù)集的最小包圍盒{[xmin,xmax][ymin,ymax][zmin,zmax]},根據(jù)包圍盒尺寸以及點(diǎn)云數(shù)目估算單位長(zhǎng)度內(nèi)包含的點(diǎn)的數(shù)目cρ,即
(2)估算沿坐標(biāo)軸x,y,z三個(gè)方向上的單位子空間個(gè)數(shù)nx,ny,nz,即單位子空間在坐標(biāo)軸方向上的解析度,表示為
其中為向上取整符號(hào)。
(3)根據(jù)(2)步計(jì)算的子空間解析度估算單位子空間沿坐標(biāo)軸方向上的尺寸sx,sy,sz,即:
上述三步執(zhí)行完成之后,整個(gè)點(diǎn)云空間被劃分為(cx×cy×cz)個(gè)子空間,每個(gè)子空間的尺寸為sx×sy×sz。
(4)設(shè)計(jì)Hash函數(shù)將每個(gè)數(shù)據(jù)點(diǎn)分配到單位子空間中,在此將Hash函數(shù)定義為關(guān)于坐標(biāo)cx、cy的二元線性函數(shù),其中數(shù)據(jù)點(diǎn)作為輸入?yún)?shù),對(duì)應(yīng)的返回值(散列值)為單位子空間檢索值Cubeid。任意一點(diǎn)pi所在的單位子空間的檢索值Cubeid可表示為:
式中,,分別表示點(diǎn)pi在x軸、y軸、z軸方向上的子空間坐標(biāo),即
其中,pix、piy、piz分別表示點(diǎn)pi沿x軸、y軸、z軸方向的坐標(biāo)。
通過引入Hash函數(shù),在空間點(diǎn)pi與子空間Cubeid之間建立了一個(gè)確定的對(duì)應(yīng)關(guān)系,使得每個(gè)點(diǎn)只歸屬于一個(gè)子空間,所有數(shù)據(jù)點(diǎn)經(jīng)Hash函數(shù)映射后存儲(chǔ)在一塊連續(xù)的存儲(chǔ)空間HashPoints中。圖1表示利用Hash函數(shù)將點(diǎn)云中的12個(gè)點(diǎn)分配到4個(gè)子空間中,點(diǎn)云中的每個(gè)點(diǎn)只對(duì)應(yīng)于一個(gè)子空間檢索。
由圖1可知,點(diǎn)云中的10個(gè)點(diǎn)只對(duì)應(yīng)于3個(gè)子空間空間,出現(xiàn)了多個(gè)元素關(guān)鍵字(Key)對(duì)應(yīng)同一個(gè)散列值的“沖突”現(xiàn)象,例如其中點(diǎn)1、7、8、11、12映射在相同的子空間Cube1中。通常要處理的點(diǎn)云數(shù)據(jù)量一般在數(shù)十萬個(gè)點(diǎn)以上,若要求實(shí)現(xiàn)每個(gè)點(diǎn)與散列值的一一對(duì)應(yīng),則對(duì)于散列函數(shù)的設(shè)計(jì)要求較為苛刻。由于子空間的數(shù)目遠(yuǎn)小于點(diǎn)云的規(guī)模,多個(gè)點(diǎn)不可避免的會(huì)被映射到同一個(gè)子空間中,這也恰恰反映了這些點(diǎn)的空間位置比較接近,也就是說,位置關(guān)系比較接近的數(shù)據(jù)點(diǎn),極有可能被映射到同一個(gè)或相鄰的子空間中。因此,這種“沖突”是不需要避免的,反而可以借助這類“沖突”從相鄰子空間中查找到最近鄰點(diǎn)集。
(5)數(shù)據(jù)點(diǎn)分配完成后,由于每個(gè)子空間內(nèi)可能包含多個(gè)數(shù)據(jù)點(diǎn),這些點(diǎn)具有相同的子空間檢索,若將每個(gè)點(diǎn)都記錄在子空間中,不僅占用大量?jī)?nèi)存空間,而且不利于快速檢索子空間內(nèi)包含的數(shù)據(jù)點(diǎn)。為此,根據(jù)每個(gè)點(diǎn)對(duì)應(yīng)的Cubeid大小對(duì)點(diǎn)云中所有的點(diǎn)進(jìn)行排序,排序之后,每個(gè)子空間只需記錄檢索值最小的點(diǎn)的地址,若子空間內(nèi)不包含任何點(diǎn),則記為NULL,最終將排序后的HashPoints中的點(diǎn)云信息與子空間存儲(chǔ)數(shù)組HashCubes相關(guān)聯(lián)。如圖2(a)所示,根據(jù)子空間檢索值Cubeid的大小對(duì)點(diǎn)云中的12個(gè)點(diǎn)排序,Cubeid值相同的元素在HashPoints中連續(xù)存儲(chǔ),HashCubes中的3個(gè)非空子空間內(nèi)存儲(chǔ)的是檢索值最小的點(diǎn)元素的地址;圖2(b)表示子空間包含數(shù)據(jù)點(diǎn)的示意圖。
(二)空間點(diǎn)的最近鄰查詢
利用Hash-Cube結(jié)構(gòu)對(duì)點(diǎn)云空間劃分完成后,由于劃分方式是人為界定的,加之點(diǎn)云的分布是隨機(jī)的、不規(guī)則的,使得空間點(diǎn)pi的最近鄰點(diǎn)可能分布于多個(gè)相鄰的子空間中,單純?cè)趐i點(diǎn)所在的子空間內(nèi)查找是不準(zhǔn)確的。如圖2(a),檢索值為8的空間點(diǎn)在Cube1的右下角,該點(diǎn)的最近鄰點(diǎn)可能在Cube1附近的子空間Cube2和Cube4中。所以,在對(duì)空間中任意點(diǎn)進(jìn)行最近鄰檢索的時(shí)候,不僅要在當(dāng)前點(diǎn)所屬子空間中檢索,還需要從當(dāng)前點(diǎn)的相鄰子空間中檢索,其中如何確定哪些鄰域子空間包含近鄰點(diǎn)以及如何快速的檢索這些點(diǎn)是最近鄰檢索方法的關(guān)鍵。
根據(jù)當(dāng)前點(diǎn)pi的查找距離r,建立包裹pi點(diǎn)的虛擬立方體,再次利用Hash函數(shù)直接定址的方式查找與該虛擬立方體有交集或位于虛擬立方體內(nèi)部的所有子空間,將這些子空間作為點(diǎn)pi的鄰接子空間,即點(diǎn)pi的檢索域,以此限定最近鄰檢索的范圍,待查找的最近鄰點(diǎn)必定位于檢索區(qū)域集內(nèi)。隨后通過遍歷檢索區(qū)域集內(nèi)的每一個(gè)非空子空間篩選出與點(diǎn)pi的距離小于r的所有點(diǎn)(為了避免開平方運(yùn)算,使用平方距離替代歐氏距離),可以快速實(shí)現(xiàn)對(duì)任意空間點(diǎn)pi的最近鄰查詢,檢索方法的具體細(xì)節(jié)如下:
(1)以當(dāng)前目標(biāo)點(diǎn)pi為檢索中心,以2r為邊長(zhǎng)構(gòu)建虛構(gòu)檢索空間立方體,其中該立方體的尺寸坐標(biāo)Cubemin(最小點(diǎn))、Cubemax(最大點(diǎn))利用以下公式計(jì)算:
Cubemin=(pix-r,piy-r,piz-r) (13)
Cubemax=(pix+r,piy+r,piz+r) (14)
(2)利用公式(10-12)分別計(jì)算虛擬立方體的兩個(gè)角點(diǎn)坐標(biāo)Cubemin、Cubemax的子空間坐標(biāo),兩個(gè)角點(diǎn)坐標(biāo)可能對(duì)應(yīng)于不同的子空間,也可能歸屬于同一個(gè)子空間,把位于兩個(gè)角點(diǎn)子空間坐標(biāo)區(qū)間內(nèi)的所有非空子空間作為與點(diǎn)pi對(duì)應(yīng)的檢索域。
(3)將檢索域中所有包含的子空間依次訪問,將每組子空間坐標(biāo)代入式(9)所定義的Hash函數(shù),計(jì)算對(duì)應(yīng)的子空間檢索值。由于每個(gè)子空間中存儲(chǔ)的是檢索值最小的點(diǎn)的地址,據(jù)此地址可以檢索到包含在內(nèi)的所有點(diǎn)的信息,通過計(jì)算每個(gè)點(diǎn)與pi的平方距離,進(jìn)而篩選出位于檢索范圍內(nèi)的所有點(diǎn)。
圖3表示的是以上檢索整個(gè)過程中的二維平面示意圖,其中圖3(a)為最初的點(diǎn)云數(shù)據(jù)分布圖,其中目標(biāo)檢索點(diǎn)pi為中間覆蓋面較大的點(diǎn),圖3(b)表示虛構(gòu)檢索空間立方體(在此表示為二維平面正方形),圖3(c)中的陰影部分是指在虛構(gòu)檢索空間立方體的尺寸點(diǎn)Cubemin(最小點(diǎn))、Cubemax(最大點(diǎn))相對(duì)應(yīng)檢索范圍內(nèi)所有的子空間區(qū)域,在圖3(d)中圓形區(qū)域內(nèi)部顏色較淺的空間點(diǎn)是指檢索到與目標(biāo)空間點(diǎn)pi的歐氏距離在0—r之間的所有最近鄰點(diǎn)集。
雖然本發(fā)明已以較佳實(shí)施例揭露如上,然其并非用以限定本發(fā)明。本發(fā)明所屬技術(shù)領(lǐng)域中具有通常知識(shí)者,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可作各種的更動(dòng)與潤(rùn)飾。因此,本發(fā)明的保護(hù)范圍當(dāng)視權(quán)利要求書所界定者為準(zhǔn)。