本發(fā)明提供一種n維點集的增量式k近鄰查詢方法,屬于產(chǎn)品逆向工程領域。
背景技術(shù):
在逆向工程中,k近鄰查詢方法能夠有效獲取機械零件表面局部型面特征的參考數(shù)據(jù),也廣泛應用于地理信息系統(tǒng)、醫(yī)學圖像分析及古建筑與古物修復等領域。
對于目前k近鄰查詢方法文獻檢索發(fā)現(xiàn),Les等在學術(shù)期刊《Computer-Aided Design》2002,34(2),167-172上發(fā)表的學術(shù)論文“Algorithm for finding all k nearest neighbor”、衛(wèi)煒等在學術(shù)期刊《航空學報》2006,27(5),944-948上發(fā)表的學術(shù)論文“一種快速搜索海量數(shù)據(jù)集k-近鄰空間球算法”、Zhao等在學術(shù)期刊《Tsinghua Science & Technolgoy》2009,14,77-81上發(fā)表的學術(shù)論文“An improved algorithm for k-nearest-neighbor finding and surface normals estimation”中,基于柵格空間索引結(jié)構(gòu),以目標點為球心、特定距離為半徑構(gòu)造搜索空間(搜索球或搜索立方體) ,通過判斷結(jié)點包圍盒是否與搜索空間相交對結(jié)點進行剪枝,明顯減少了結(jié)點查詢個數(shù),提高了查詢效率,但該類算法中特定距離或擴展距離選取過大或過小,都將導致查詢效率下降,且由于柵格結(jié)構(gòu)為靜態(tài)空間索引,構(gòu)建時需預知點云數(shù)據(jù)的規(guī)模,當點云數(shù)據(jù)規(guī)模趨于海量甚至超出主存容限時,此類算法難以實現(xiàn)。劉宇等在學術(shù)期刊《上海交通大學學報》2001,35(9),1298-1302上發(fā)表的學術(shù)論文“空間k近鄰查詢的新策略”中以R樹為空間索引結(jié)構(gòu),基于目標點與結(jié)點包圍盒的最小距離、最小最大距離制定了各種剪枝策略,減少了查詢時所要訪問的結(jié)點個數(shù),提高了查詢效率,但在查詢過程中需進行多次排序操作,對查詢效率具有不良影響。
綜上所述,現(xiàn)在技術(shù)存在的缺陷是:查詢所需的索引受點云的影響,每次查詢時多次排序操作降低了查詢效率。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種n維點集的增量式k近鄰查詢方法,該方法以R樹為索引結(jié)構(gòu)并預先查詢以目標點為中心、特定搜索球內(nèi)的數(shù)據(jù)點集,再漸增查詢搜索球之外距離目標點最近的數(shù)據(jù)點,其技術(shù)方案為:
一種n維點集的增量式k近鄰查詢方法,其特征在于步驟依次為:一、為n維點集X構(gòu)建R樹索引結(jié)構(gòu);二、對于要進行k近鄰查詢的目標點p,通過R樹的點查詢方法獲得p所在的葉索引層結(jié)點L;三、以p為中心、為半徑,構(gòu)建球形空間S,其中m為結(jié)點L所包含的數(shù)據(jù)點個數(shù),r為結(jié)點L包圍盒的外接包圍球半徑;四、通過R樹的范圍查詢方法獲取落入S內(nèi)的點集Q,;五、若Q內(nèi)的點數(shù)k*>k,則只保留距離p最近的k個點作為k近鄰查詢結(jié)果并終止k近鄰查詢過程,否則執(zhí)行以下過程:a) 以球形空間S為查詢目標,獲取距離S最近的數(shù)據(jù)點,將其加入Q,并使得k*增1;b) 擴展球形空間S,使其恰好包含Q;c) 若k*>k,則目標點p的k近鄰查詢過程結(jié)束,返回點集Q,否則,執(zhí)行步驟a)。
為實現(xiàn)發(fā)明目的,所述的一種n維點集的增量式k近鄰查詢方法,其特征在于步驟三中,利用R樹的k近鄰查詢方法實現(xiàn)球形空間S半徑的設定,其步驟具體為:(1) 從n維海量點云中選取t個數(shù)據(jù)點;(2) 利用R樹的k近鄰查詢方法分別為這t個數(shù)據(jù)點查詢k近鄰點集;(3) 計算每個數(shù)據(jù)點到其k近鄰點集中最遠點的距離ri,得到集合{ri|i=1,2,…,t};(4) 選取{ri}中的最大值rmax作為球形空間S半徑。
為實現(xiàn)發(fā)明目的,所述的n維點集的增量式k近鄰查詢方法,其特征在于步驟五中的步驟a)中的,獲取距離S最近的數(shù)據(jù)點,其步驟具體為:(1) 從根結(jié)點開始深度優(yōu)先遍歷n維點云X的R樹索引結(jié)構(gòu),在的葉索引結(jié)點層搜索距離S最近的結(jié)點包圍盒B;(2) 獲取B所包含的數(shù)據(jù)點集{pi};(3) 將{pi}中距離搜索球S中心最近且位于搜索球S之外的數(shù)據(jù)點pi作為距離S最近的數(shù)據(jù)點。
本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點:
(1) 利用隨機數(shù)據(jù)點的k近鄰點集設置初始搜索半徑,使得初始搜索半徑更加逼近點云中點的k近鄰半徑,且避免了人為設置半徑所造成的誤差;
(2) 預先利用范圍查詢使得k近鄰查詢效率明顯提高;
(3) 增量式k近鄰查詢避免了多次排序,從而有效提高了k近鄰查詢效率。
附圖說明
圖1是利用本發(fā)明方法為三維點集查詢k近鄰點集的程序流程圖;
圖2是實施k近鄰查詢試驗所采用的實物表面樣點——維納斯頭部點云及局部樣點P、Q;
圖3是實施k近鄰查詢試驗所采用的實物表面樣點——佛像點云;
圖4與圖5分別是采用R樹的k近鄰查詢方法與本發(fā)明方法為P查詢k近鄰點集的結(jié)果圖;
圖6與圖7分別是采用R樹的k近鄰查詢方法與本發(fā)明方法為Q查詢k近鄰點集的結(jié)果圖;
圖8是采用本發(fā)明方法為佛像點云所有點查詢k近鄰點集時隨機數(shù)據(jù)點個數(shù)分別為20、30、40的查詢時間對比結(jié)果圖;
圖9是分別采用R樹的k近鄰查詢方法與本發(fā)明方法為佛像點云查詢所有點的k近鄰點集的時間對比結(jié)果圖。
具體實施方式
下面結(jié)合附圖及實施例對本發(fā)明作進一步說明。
利用本發(fā)明方法為三維點集查詢k近鄰點集的程序流程圖如附圖1所示,程序用c語言實現(xiàn)。該程序主要流程為:為點集構(gòu)建R樹索引;從點集中隨機獲取s個數(shù)據(jù)點,并利用R樹的k近鄰查詢算法為這s個點查詢k近鄰點集;獲取這s個k近鄰半徑的最大值r;獲取以目標點p為中心、r為半徑包圍球內(nèi)的點集T,并將T中的點按其與p的距離升序排序;獲取T中的點數(shù)n;若n>k,則查詢結(jié)束,否則,查詢p的第n+1個近鄰點,令n增1,如此循環(huán)往復,直至n=k為止。
使用光柵投影式三維測量儀獲取實施結(jié)點分裂試驗所采用的實物表面樣點——維納斯頭部點云及佛像點云,分別如圖2、圖3所示,其中佛像點云點數(shù)為1,029,324,并從佛像點云中提取局部樣點P、Q。
分別是采用R樹的k近鄰查詢方法與本發(fā)明方法為P、Q查詢k近鄰點集,其中k取15,P的兩種k近鄰點集的結(jié)果圖如圖4、圖5所示,Q的兩種k近鄰點集的結(jié)果圖如圖6、圖7所示。由圖4-圖7可知,兩種方法得到的k近鄰點集相同,說明本發(fā)明方法能夠準確獲取k近鄰點集。
對佛像點云進行不同程度的精簡,精簡因子分別為0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9、1.0,獲取10個點集A、B、C、D、E、F、G、H、I、J,設S={A,B,C,D,E,F,G,H,I,J},采用本發(fā)明方法查詢佛像點云中所有點的k近鄰點集,利用C語言中的時間統(tǒng)計函數(shù)統(tǒng)計隨機數(shù)據(jù)點個數(shù)s分別為20、30、40時的查詢時間,時間對比結(jié)果圖如圖8所示,其中k取15。由圖8可知,當隨機數(shù)據(jù)點個數(shù)s為30時,本發(fā)明方法為佛像點云中所有點查詢k近鄰點集所消耗的時間最少。
設定隨機數(shù)據(jù)點個數(shù)s為30,分別采用R樹的k近鄰查詢方法與本發(fā)明方法為佛像點云所有點查詢k近鄰點集,其中k取15,時間消耗對比結(jié)果圖如圖9所示。由圖9可知,相對于R樹的k近鄰查詢方法,本發(fā)明方法時間消耗明顯減少。
以上所述,僅是本發(fā)明的較佳實施例而已,并非是對本發(fā)明作其它形式的限制,任何熟悉本專業(yè)的技術(shù)人員可能利用上述揭示的技術(shù)內(nèi)容加以變更或改型為等同變化的等效實施例。但是凡是未脫離本發(fā)明技術(shù)方案內(nèi)容,依據(jù)本發(fā)明的技術(shù)實質(zhì)對以上實施例所作的任何簡單修改、等同變化與改型,仍屬于本發(fā)明技術(shù)方案的保護范圍。