一種基于八叉樹的三維數(shù)據(jù)檢索方法及裝置制造方法
【專利摘要】本申請?zhí)峁┝艘环N基于八叉樹的三維數(shù)據(jù)檢索方法及裝置,其中一種基于八叉樹的三維數(shù)據(jù)檢索方法,包括:獲取三維數(shù)據(jù)文件的八叉樹文件,其中八叉樹文件包括一數(shù)據(jù)信息文件和一數(shù)據(jù)文件,數(shù)據(jù)文件用于存數(shù)三維數(shù)據(jù)的所有數(shù)據(jù)塊,每個數(shù)據(jù)塊對應八叉樹中的一個節(jié)點,數(shù)據(jù)信息文件用于記錄每個數(shù)據(jù)塊在數(shù)據(jù)文件中的位置;在內(nèi)存中生成數(shù)據(jù)文件的數(shù)據(jù)塊索引表,數(shù)據(jù)塊索引表為每個數(shù)據(jù)塊分配一標識;接收攜帶有數(shù)據(jù)塊標識的三維數(shù)據(jù)檢索請求,數(shù)據(jù)塊標識是當前要檢索的數(shù)據(jù)塊的標識;從數(shù)據(jù)信息文件中查找數(shù)據(jù)塊標識對應的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置,從而實現(xiàn)了對基于八叉樹存儲的三維數(shù)據(jù)的數(shù)據(jù)檢索。
【專利說明】—種基于八叉樹的三維數(shù)據(jù)檢索方法及裝置
【技術領域】
[0001]本申請涉及數(shù)據(jù)處理【技術領域】,特別涉及一種基于八叉樹的三維數(shù)據(jù)檢索方法及
>J-U ρ?α裝直。
【背景技術】
[0002]隨著硬件技術的進步,在地球深部探測等領域中三維數(shù)據(jù)產(chǎn)生量級的快速增長。雖然用于處理數(shù)據(jù)的計算機的性能在不斷提高,但三維數(shù)據(jù)的爆炸式增長仍然超越了計算機內(nèi)存的發(fā)展速度。因此對于三維地震數(shù)據(jù)建立合理的存儲格式非常重要。
[0003]SEG-Y 格式是由 SEG(Society of Exploration Geophysicists)提出的標準磁帶格式之一,該SEG-Y格式的結構參見圖1所示。由于其在數(shù)據(jù)采集時存儲方便,且整體存儲結構簡單,是目前地球深部探測行業(yè)曾使用的用來存儲三維數(shù)據(jù)的格式。但是當數(shù)據(jù)量較大時,采用SEG-Y格式存儲數(shù)據(jù)不利于數(shù)據(jù)的隨機讀取和快速訪問。為此本申請?zhí)岢隽艘环N基于八叉樹結構的三維數(shù)據(jù)檢索方法和裝置。
【發(fā)明內(nèi)容】
[0004]本申請所要解決的技術問題是提供一種基于八叉樹的三維數(shù)據(jù)檢索方法和裝置,用于對現(xiàn)有基于八叉樹存儲三維數(shù)據(jù)的進行數(shù)據(jù)檢索。技術方案如下:
[0005]本申請實施例提供一種基于八叉樹的三維數(shù)據(jù)檢索方法,包括:.[0006]獲取三維數(shù)據(jù)文件的八叉樹文件,其中所述八叉樹文件包括一數(shù)據(jù)信息文件和一數(shù)據(jù)文件,所述數(shù)據(jù)文件用于存數(shù)所述三維數(shù)據(jù)的所有數(shù)據(jù)塊,每個所述數(shù)據(jù)塊對應所述八叉樹中的一個節(jié)點,所述數(shù)據(jù)信息文件用于記錄每個所述數(shù)據(jù)塊在數(shù)據(jù)文件中的位置;
[0007]在內(nèi)存中生成所述數(shù)據(jù)文件的數(shù)據(jù)塊索引表,所述數(shù)據(jù)塊索引表為每個所述數(shù)據(jù)塊分配一標識;
[0008]接收攜帶有數(shù)據(jù)塊標識的三維數(shù)據(jù)檢索請求,所述數(shù)據(jù)塊標識是當前要檢索的數(shù)據(jù)塊的標識;
[0009]從所述數(shù)據(jù)信息文件中查找所述數(shù)據(jù)塊標識對應的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置。
[0010]優(yōu)選地,獲取三維數(shù)據(jù)文件的八叉樹文件,包括:
[0011]將三維數(shù)據(jù)置于一八叉樹中,所述八叉樹是包含所述三維數(shù)據(jù)的所有數(shù)據(jù)的最小八叉樹,且所述八叉樹的每個節(jié)點是三個體素數(shù)N為預設體素數(shù)的正方體數(shù)據(jù)塊,所述八
叉樹的層數(shù)M為[log2(P/iV)l + l, P為所述三維數(shù)據(jù)的三個體素數(shù)中的最大體素數(shù);
[0012]對八叉樹中的每個節(jié)點進行節(jié)點編碼,得到每個節(jié)點的標識,其中所述節(jié)點之間的標識符合遞增變化或遞減變化;
[0013]將所述三維數(shù)據(jù)和所述八叉樹中所有節(jié)點標識記錄在三維數(shù)據(jù)文件中;
[0014]將所述三維數(shù)據(jù)文件轉換為八叉樹文件。
[0015]優(yōu)選地,將三維數(shù)據(jù)置于一八叉樹中之后,在對八叉樹中的每個節(jié)點進行節(jié)點編碼,得到每個節(jié)點的標識之前,所述方法還包括:刪除八叉樹中的空節(jié)點,其中所述空節(jié)點是未包括有三維數(shù)據(jù)的節(jié)點。
[0016]優(yōu)選地,所述對八叉樹中的每個節(jié)點進行節(jié)點編碼,得到每個節(jié)點的標識包括:
[0017]對所述八叉樹中的每個節(jié)點進行基于Morton碼的節(jié)點編碼,以按照節(jié)點在所述八叉樹中的排序,將所有節(jié)點標識按照從零起始的自然數(shù)序列進行一一映射。
[0018]優(yōu)選地,所述數(shù)據(jù)信息文件包括數(shù)據(jù)塊偏移索引表和數(shù)據(jù)塊尺寸索引表;
[0019]從所述數(shù)據(jù)信息文件中查找所述數(shù)據(jù)塊標識對應的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置包括:
[0020]依據(jù)所述數(shù)據(jù)塊標識,在所述數(shù)據(jù)塊偏移索引表中查找所述數(shù)據(jù)塊標識對應的數(shù)據(jù)塊與所述數(shù)據(jù)文件頭之間的偏移量;
[0021]依據(jù)所述數(shù)據(jù)塊標識,在所述數(shù)據(jù)塊尺寸索引表中查找所述數(shù)據(jù)塊標識對應的數(shù)據(jù)塊的長度,并在所述數(shù)據(jù)文件中查找到偏移量位置處具有所長度的數(shù)據(jù)塊。
[0022]優(yōu)選地,所述方法還包括:
[0023]采用直方圖對所述三維數(shù)據(jù)進行去噪處理,以刪除所述三維數(shù)據(jù)中的最大數(shù)據(jù)和最小數(shù)據(jù)。
[0024]本申請實施例還提供一種基于八叉樹的三維數(shù)據(jù)檢索裝置,包括:
[0025]獲取單元,用于獲取三維數(shù)據(jù)文件的八叉樹文件,其中所述八叉樹文件包括一數(shù)據(jù)信息文件和一數(shù)據(jù)文件,所述數(shù)據(jù)文件用于存數(shù)所述三維數(shù)據(jù)的所有數(shù)據(jù)塊,每個所述數(shù)據(jù)塊對應所述八叉樹中的一個節(jié)點,所述數(shù)據(jù)信息文件用于記錄每個所述數(shù)據(jù)塊在數(shù)據(jù)文件中的位置;
[0026]生成單元,用于在內(nèi)存中生成所述數(shù)據(jù)文件的數(shù)據(jù)塊索引表,所述數(shù)據(jù)塊索引表為每個所述數(shù)據(jù)塊分配一標識;
[0027]接收單元,用于接收攜帶有數(shù)據(jù)塊標識的三維數(shù)據(jù)檢索請求,所述數(shù)據(jù)塊標識是當前要檢索的數(shù)據(jù)塊的標識;
[0028]查找單元,用于從所述數(shù)據(jù)信息文件中查找所述數(shù)據(jù)塊標識對應的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置。
[0029]優(yōu)選地,所述獲取單元包括:
[0030]構建子單元,用于將三維數(shù)據(jù)置于一八叉樹中,所述八叉樹是包含所述三維數(shù)據(jù)的所有數(shù)據(jù)的最小八叉樹,且所述八叉樹的每個節(jié)點是三個體素數(shù)N為預設體素數(shù)的正方
體數(shù)據(jù)塊,所述八叉樹的層數(shù)M為「log P/iVD + l,P為所述三維數(shù)據(jù)的三個體素數(shù)中的
最大體素數(shù);
[0031]編碼子單元,用于對八叉樹中的每個節(jié)點進行節(jié)點編碼,得到每個節(jié)點的標識,其中所述節(jié)點之間的標識符合遞增變化或遞減變化;
[0032]記錄子單元,用于將所述三維數(shù)據(jù)和所述八叉樹中所有節(jié)點標識記錄在三維數(shù)據(jù)文件中;
[0033]轉換子單元,用于將所述三維數(shù)據(jù)文件轉換為八叉樹文件。
[0034]優(yōu)選地,所述獲取單元還包括:刪除子單元,用于刪除八叉樹中的空節(jié)點,其中所述空節(jié)點是未包括有三維數(shù)據(jù)的節(jié)點;
[0035]所述編碼子單元,具體用于對所述八叉樹中的每個節(jié)點進行基于Morton碼的節(jié)點編碼,以按照節(jié)點在所述八叉樹中的排序,將所有節(jié)點標識按照從零起始的自然數(shù)序列進行 映射。
[0036]優(yōu)選地,所述數(shù)據(jù)信息文件包括數(shù)據(jù)塊偏移索引表和數(shù)據(jù)塊尺寸索引表;
[0037]所述查找單元,具體用于依據(jù)所述數(shù)據(jù)塊標識,在所述數(shù)據(jù)塊偏移索引表中查找所述數(shù)據(jù)塊標識對應的數(shù)據(jù)塊與所述數(shù)據(jù)文件頭之間的偏移量;以及依據(jù)所述數(shù)據(jù)塊標識,在所述數(shù)據(jù)塊尺寸索引表中查找所述數(shù)據(jù)塊標識對應的數(shù)據(jù)塊的長度,并在所述數(shù)據(jù)文件中查找到偏移量位置處具有所長度的數(shù)據(jù)塊;
[0038]所述裝置還包括:采用直方圖對所述三維數(shù)據(jù)進行去噪處理,以刪除所述三維數(shù)據(jù)中的最大數(shù)據(jù)和最小數(shù)據(jù)。
[0039]與現(xiàn)有技術相比,本申請包括以下優(yōu)點:
[0040]本申請實施例提供的基于八叉樹的三維數(shù)據(jù)檢索方法,在獲取到三維數(shù)據(jù)文件的八叉樹文件,在內(nèi)存中生成八叉樹文件所包括的數(shù)據(jù)文件的數(shù)據(jù)塊索引表,以為每個數(shù)據(jù)看分配一標識。當接收到攜帶有數(shù)據(jù)塊標識的三維數(shù)據(jù)檢索請求,則可以直接從八叉樹文件所包括的數(shù)據(jù)信息文件中查找該數(shù)據(jù)塊標識對應的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置,從而實現(xiàn)了對基于八叉樹存儲的三維數(shù)據(jù)的數(shù)據(jù)檢索。
【專利附圖】
【附圖說明】
[0041]為了更清楚地說明本申請實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0042]圖1是現(xiàn)有SEG-Y格式的結構示意圖;
[0043]圖2是本申請?zhí)峁┑幕诎瞬鏄涞娜S數(shù)據(jù)檢索方法的一種流程圖;
[0044]圖3是本申請?zhí)峁┑陌瞬鏄涞氖疽鈭D;
[0045]圖4是本申請?zhí)峁┑陌瞬鏄湮募氖疽鈭D;
[0046]圖5是本申請?zhí)峁┑幕诎瞬鏄涞娜S數(shù)據(jù)檢索方法的一種子流程圖;
[0047]圖6是本申請?zhí)峁┑幕诎瞬鏄涞娜S數(shù)據(jù)檢索裝置的一種結構示意圖;
[0048]圖7是本申請?zhí)峁┑幕诎瞬鏄涞娜S數(shù)據(jù)檢索裝置的一種子結構示意圖;
[0049]圖8是本申請?zhí)峁┑幕诎瞬鏄涞娜S數(shù)據(jù)檢索裝置的另一種子結構示意圖。
【具體實施方式】
[0050]首先對本申請實施例提供的基于八叉樹的三維數(shù)據(jù)檢索方法進行簡單說明,可以包括:
[0051]獲取三維數(shù)據(jù)文件的八叉樹文件,其中八叉樹文件包括一數(shù)據(jù)信息文件和一數(shù)據(jù)文件,數(shù)據(jù)文件用于存數(shù)三維數(shù)據(jù)的所有數(shù)據(jù)塊,每個數(shù)據(jù)塊對應八叉樹中的一個節(jié)點,數(shù)據(jù)信息文件用于記錄每個數(shù)據(jù)塊在數(shù)據(jù)文件中的位置。
[0052]在內(nèi)存中生成數(shù)據(jù)文件的數(shù)據(jù)塊索引表,數(shù)據(jù)塊索引表為每個數(shù)據(jù)塊分配一標識。
[0053]接收攜帶有數(shù)據(jù)塊標識的三維數(shù)據(jù)檢索請求,數(shù)據(jù)塊標識是當前要檢索的數(shù)據(jù)塊的標識。[0054]從數(shù)據(jù)信息文件中查找數(shù)據(jù)塊標識對應的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置。
[0055]從上述方案可以看出,本申請實施例提供的基于八叉樹的三維數(shù)據(jù)檢索方法,在獲取到三維數(shù)據(jù)文件的八叉樹文件,在內(nèi)存中生成八叉樹文件所包括的數(shù)據(jù)文件的數(shù)據(jù)塊索引表,以為每個數(shù)據(jù)看分配一標識。當接收到攜帶有數(shù)據(jù)塊標識的三維數(shù)據(jù)檢索請求,則可以直接從八叉樹文件所包括的數(shù)據(jù)信息文件中查找該數(shù)據(jù)塊標識對應的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置,從而實現(xiàn)了對基于八叉樹存儲的三維數(shù)據(jù)的數(shù)據(jù)檢索。
[0056]下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
[0057]請參閱圖2,其示出了本申請實施例提供的一種基于八叉樹的三維數(shù)據(jù)檢索方法的流程圖,可以包括以下步驟:
[0058]步驟101:獲取三維數(shù)據(jù)文件的八叉樹文件。
[0059]可以理解的是:八叉樹對三維形體的表示及應用是在上世紀80年代后展開,其可以看成二維圖像處理中使用的圖像金子塔的四叉樹結構在三維空間中的推廣。八叉樹結構對三維形體的劃分可以用下面的方法遞歸定義:
[0060]—個三維形體被一個正方體“完全占據(jù)”的定義:三維形體中有給定大小的體素或體積包含于正方體中;一個三維形體在一個正方體中“完全空白”的定義:三維形體中沒有任何體素或體積包含于正方體中;
[0061]用一個足夠大的正方體將一個三維形體V包含,每次將正方體八等分得到正方體的子體。如果正方體或者正方體的子體被其所劃分的三維形體V的子體“完全占據(jù)”或“完全空白”,則停止劃分;否則將正方體的子體繼續(xù)八等分。正方體的子體作為八叉樹的節(jié)點構成八叉樹。
[0062]如三維數(shù)據(jù)是一個體素數(shù)為2001X201X221的體數(shù)據(jù)時,將其置于八叉樹中的過程如下:首先定義八叉樹節(jié)點為64X64X64的體素塊;
[0063]然后計算最長邊的節(jié)點數(shù):2001/64=31.3 ;由于24〈2001/64〈25,所以八叉樹中的最后一層節(jié)點數(shù)量是=32X32X32,該最后一層所有節(jié)點包括體素數(shù)為2001X201X221的體數(shù)據(jù)的全部數(shù)據(jù),結束劃分,得到如圖3所示的八叉樹,該八叉樹包括6層節(jié)點,每層的節(jié)點數(shù)為:13,23,43,83,163,323,且上一層節(jié)點的體數(shù)據(jù)通過對其下一層的八個子節(jié)點的體數(shù)據(jù)采樣得到。在圖3中采用箭頭指示方式表示上下兩層節(jié)點的對應關系,如第三層的第I至8個節(jié)點是第二層的第一個節(jié)點的子節(jié)點,則第二層的第一個節(jié)點的體數(shù)據(jù)是通過第三層的第I至8個節(jié)點的子數(shù)據(jù)采樣得到。
[0064]在構建出三維數(shù)據(jù)的八叉樹后,獲得三維數(shù)據(jù)文件的八叉樹文件,其中三維數(shù)據(jù)文件是包含三維數(shù)據(jù)的文件,八叉樹文件包括一數(shù)據(jù)信息文件和一數(shù)據(jù)文件,數(shù)據(jù)文件用于存數(shù)三維數(shù)據(jù)的所有數(shù)據(jù)塊,每個數(shù)據(jù)塊對應八叉樹中的一個節(jié)點,即一個節(jié)點的體數(shù)據(jù)為一個數(shù)據(jù)塊,以圖3所示為例,數(shù)據(jù)塊是一個體素數(shù)為64X64X64的體素塊,數(shù)據(jù)信息文件用于記錄每個數(shù)據(jù)塊在數(shù)據(jù)文件中的位置。
[0065]步驟102:在內(nèi)存中生成數(shù)據(jù)文件的數(shù)據(jù)塊索引表,數(shù)據(jù)塊索引表為每個數(shù)據(jù)塊分配一標識。[0066]在本申請實施例中,數(shù)據(jù)塊索引表為每個數(shù)據(jù)塊分配一標識,以將不同數(shù)據(jù)塊加以區(qū)分,該標識可以是按照Morton碼對八叉樹中的節(jié)點進行節(jié)點編碼后,得到的按照節(jié)點在八叉樹中排序分配的一個自然數(shù),且所有數(shù)據(jù)塊的標識之間符合遞增或者遞減變化。
[0067]如圖3所示八叉樹的第一層的唯一一個節(jié)點被分配0,則該節(jié)點對應的數(shù)據(jù)塊的標識也為O。八叉樹的第二層的8個節(jié)點被依次分配I?8,則該8個節(jié)點對應的數(shù)據(jù)塊的標識分別為I?8,依次類推,最后一層的323個節(jié)點被依次分配4681?37448,則該層節(jié)點對應的數(shù)據(jù)塊的標識分別為4681?37448,符合遞增變化。
[0068]步驟103:接收攜帶有數(shù)據(jù)塊標識的三維數(shù)據(jù)檢索請求。
[0069]其中三維數(shù)據(jù)檢索請求用于指示對數(shù)據(jù)文件中的某一個數(shù)據(jù)塊的具體位置進行檢索,以為后續(xù)加載該數(shù)據(jù)塊和進行三維可視化操作。數(shù)據(jù)塊標識是當前要檢索的數(shù)據(jù)塊的標識。
[0070]步驟104:從數(shù)據(jù)信息文件中查找數(shù)據(jù)塊標識對應的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置。
[0071]在進行查找之前,可以首先將數(shù)據(jù)信息文件加載到內(nèi)存中。因為內(nèi)存的讀取速度優(yōu)于其他設備,所以將數(shù)據(jù)信息文件加載到內(nèi)存中可以加快查找速度。
[0072]數(shù)據(jù)文件和數(shù)據(jù)信息文件的格式請參閱圖4所示,數(shù)據(jù)塊按照其標識依次存儲在數(shù)據(jù)文件中。數(shù)據(jù)信息文件包括數(shù)據(jù)塊偏移索引表和數(shù)據(jù)塊尺寸索引表,該數(shù)據(jù)塊偏移索引表用于表示每個數(shù)據(jù)塊在數(shù)據(jù)文件中的偏移量,偏移量以數(shù)據(jù)塊與數(shù)據(jù)文件頭之間的偏移量為基準,數(shù)據(jù)塊尺寸索引表則用于表示每個數(shù)據(jù)塊的長度。從中可以看出,第i個數(shù)據(jù)塊的偏移量為第I個至第i_l個數(shù)據(jù)塊的長度之和。數(shù)據(jù)信息文件中各個字節(jié)表示內(nèi)容如下:
[0073]I?4字節(jié):數(shù)據(jù)塊尺寸(浮點型);5?8字節(jié):源數(shù)據(jù)(三維數(shù)據(jù))的數(shù)據(jù)類型(整型);9?12字節(jié):八叉樹層數(shù)(整型);13?24字節(jié):源數(shù)據(jù)在橫、縱方向及時間維上的尺寸(整型);25?28字節(jié):源數(shù)據(jù)在去噪后的上界(浮點型);29?32字節(jié):源數(shù)據(jù)在去噪后的下界(浮點型);33?36字節(jié):標識數(shù)據(jù)是否經(jīng)過壓縮,如果經(jīng)過壓縮采用了何種壓縮技術(整型)37?40字節(jié):壓縮級別(整型)41?48字節(jié):索引表的長度(長整型);49?56字節(jié):源文件頭的長度(長整型);57?(56+索引表長度X8)字節(jié):數(shù)據(jù)塊偏移索引;(57+索引表長度X8)?(56+索引表長度X 12)字節(jié):數(shù)據(jù)塊長度索引;(57+索引表長度X 12)字節(jié)?文件尾:源文件頭。
[0074]這里需要指出的是:當33?36字節(jié)值為O時表示沒有采用數(shù)據(jù)壓縮技術;值為I時認為采用了 gzip技術,如果采用gzip技術壓縮每個數(shù)據(jù)塊,將可以選擇的O?9個壓縮級別選擇為I時,將數(shù)據(jù)文件從591MB壓縮至237MB ;值為2時認為采用了 openjpeg技術。當有采用其它壓縮技術的需要時可以對本字段進行拓展。37?40字節(jié)記錄采用的壓縮級另IJ。當49?56字節(jié)值為O時認為不保留源文件頭。
[0075]在本申請實施例中,從數(shù)據(jù)信息文件中查找數(shù)據(jù)塊標識對應的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置具體過程可以是:依據(jù)數(shù)據(jù)塊標識,在數(shù)據(jù)塊偏移索引表中查找數(shù)據(jù)塊標識對應的數(shù)據(jù)塊與數(shù)據(jù)文件頭之間的偏移量;依據(jù)數(shù)據(jù)塊標識,在數(shù)據(jù)塊尺寸索引表中查找數(shù)據(jù)塊標識對應的數(shù)據(jù)塊的長度,并在數(shù)據(jù)文件中查找到偏移量位置處具有所長度的數(shù)據(jù)塊。
[0076]如三維數(shù)據(jù)檢索請求中攜帶的是第三層的第一個節(jié)點對應的數(shù)據(jù)塊的標識9,則需要在數(shù)據(jù)塊索引表查找標識為9的數(shù)據(jù)塊。首先獲得該數(shù)據(jù)塊的標識9,然后根據(jù)該標識在數(shù)據(jù)塊偏移索引表和數(shù)據(jù)塊尺寸索引表中檢索該數(shù)據(jù)塊在數(shù)據(jù)文件中的偏移和長度即可。
[0077]應用上述技術方案,在獲取到三維數(shù)據(jù)文件的八叉樹文件,在內(nèi)存中生成八叉樹文件所包括的數(shù)據(jù)文件的數(shù)據(jù)塊索引表,以為每個數(shù)據(jù)看分配一標識。當接收到攜帶有數(shù)據(jù)塊標識的三維數(shù)據(jù)檢索請求,則可以直接從八叉樹文件所包括的數(shù)據(jù)信息文件中查找該數(shù)據(jù)塊標識對應的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置,從而實現(xiàn)了對基于八叉樹存儲的三維數(shù)據(jù)的數(shù)據(jù)檢索。
[0078]在上述實施例中,獲取三維數(shù)據(jù)文件的八叉樹文件的過程可以參閱圖5所述,可以包括:
[0079]步驟1011:將三維數(shù)據(jù)置于一八叉樹中,八叉樹是包含三維數(shù)據(jù)的所有數(shù)據(jù)的最小八叉樹,且八叉樹的每個節(jié)點是三個體素數(shù)N為預設體素數(shù)的正方體數(shù)據(jù)塊,八叉樹的
層數(shù)M為PlOg2(ZViV)I +1,P為三維數(shù)據(jù)的三個體素數(shù)中的最大體素數(shù)。
[0080]仍以三維數(shù)據(jù)是一個體素數(shù)為2001X201X221的體數(shù)據(jù),八叉樹的節(jié)點是64X64X64的體素塊為例,在該三維數(shù)據(jù)中,P為2001,N為64,則八叉樹的層數(shù)M為
[0081]步驟1012:對八叉樹中的每個節(jié)點進行節(jié)點編碼,得到每個節(jié)點的標識,其中節(jié)點之間的標識符合遞增變化或遞減變化。
[0082]具體的,對八叉樹中的每個節(jié)點進行基于Morton碼的節(jié)點編碼,以按照節(jié)點在八叉樹中的排序,將所有節(jié)點標識按照從零起始的自然數(shù)序列進行一一映射。
[0083]如圖3所示八叉樹的第一層的唯一一個節(jié)點被分配0,八叉樹的第二層的8個節(jié)點被依次分配I?8,則該8個節(jié)點對應的數(shù)據(jù)塊的標識分別為I?8,依次類推,最后一層的323個節(jié)點被依次分配4681?37448,符合遞增變化。
[0084]步驟1013:將三維數(shù)據(jù)和八叉樹中所有節(jié)點標識記錄在三維數(shù)據(jù)文件中。
[0085]步驟1014:將三維數(shù)據(jù)文件轉換為八叉樹文件。轉換后的八叉樹文件格式如圖4所示,本申請實施例不再加以闡述。需要說明的一點是:每個三維數(shù)據(jù)僅進行一次轉換得到八叉樹文件,后續(xù)對該三維數(shù)據(jù)的檢索可以直接獲得八叉樹文件,無需再對三維數(shù)據(jù)文件進行轉換。
[0086]從圖3所示的八叉樹可以看出,最后一層節(jié)點的體數(shù)據(jù)總量為2048X2048X2048,大于2001X201X221的體數(shù)據(jù),因此八叉樹中有部分節(jié)點為空節(jié)點,在對八叉樹的每個節(jié)點進行節(jié)點編碼時,可以首先刪除空節(jié)點,降低編碼時間。其中空節(jié)點是未包括有三維數(shù)據(jù)的節(jié)點,即節(jié)點對應的數(shù)據(jù)塊內(nèi)未包括三維數(shù)據(jù)。
[0087]在上述所有方法實施例中,本申請實施例提供的基于八叉樹的三維數(shù)據(jù)檢索方法還可以包括:采用直方圖對三維數(shù)據(jù)進行去噪處理,以刪除三維數(shù)據(jù)中的最大數(shù)據(jù)和最小數(shù)據(jù)。具體過程是:通過直方圖對三維數(shù)據(jù)進行統(tǒng)計,得到三維數(shù)據(jù)中的最大數(shù)據(jù)和最小數(shù)據(jù)。由于最大數(shù)據(jù)和最小數(shù)據(jù)較其他數(shù)據(jù)來說分布分散,在進行地球深部探測過程以及三維可視化中可以忽略不計,所以在得到最大數(shù)據(jù)和最小數(shù)據(jù)后可以刪除,降低后續(xù)加載的數(shù)據(jù)量。通過多次實驗將直方圖統(tǒng)計得出的占三維數(shù)據(jù)千分之一的較大數(shù)據(jù)和占三維數(shù)據(jù)千分之一的較小數(shù)據(jù)作為噪聲可以獲得較好的去噪效果。
[0088]與上述方法實施例相對應,本申請實施例還提供一種基于八叉樹的三維數(shù)據(jù)檢索裝置,其結構示意圖請參閱圖6所示,包括:獲取單元11、生成單元12、接收單元13和查找單元14。其中,
[0089]獲取單元11,用于獲取三維數(shù)據(jù)文件的八叉樹文件,其中八叉樹文件包括一數(shù)據(jù)信息文件和一數(shù)據(jù)文件,數(shù)據(jù)文件用于存數(shù)三維數(shù)據(jù)的所有數(shù)據(jù)塊,每個數(shù)據(jù)塊對應八叉樹中的一個節(jié)點,數(shù)據(jù)信息文件用于記錄每個數(shù)據(jù)塊在數(shù)據(jù)文件中的位置。
[0090]生成單元12,用于在內(nèi)存中生成數(shù)據(jù)文件的數(shù)據(jù)塊索引表,數(shù)據(jù)塊索引表為每個數(shù)據(jù)塊分配一標識。
[0091]在本申請實施例中,生成單元12得到的數(shù)據(jù)塊索引表為每個數(shù)據(jù)塊分配一標識,以將不同數(shù)據(jù)塊加以區(qū)分,該標識可以是按照Morton碼對八叉樹中的節(jié)點進行節(jié)點編碼后,得到的按照節(jié)點在八叉樹中排序分配的一個自然數(shù),且所有數(shù)據(jù)塊的標識之間符合遞增或者遞減變化。
[0092]接收單元13,用于接收攜帶有數(shù)據(jù)塊標識的三維數(shù)據(jù)檢索請求,數(shù)據(jù)塊標識是當前要檢索的數(shù)據(jù)塊的標識。
[0093]其中三維數(shù)據(jù)檢索請求用于指示對數(shù)據(jù)文件中的某一個數(shù)據(jù)塊的具體位置進行檢索,以為后續(xù)加載該數(shù)據(jù)塊和進行三維可視化操作。數(shù)據(jù)塊標識是當前要檢索的數(shù)據(jù)塊的標識。
[0094]查找單元14,用于從數(shù)據(jù)信息文件中查找數(shù)據(jù)塊標識對應的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置。進行查找之前,可以首先將數(shù)據(jù)信息文件加載到內(nèi)存中。因為內(nèi)存的讀取速度優(yōu)于其他設備,所以將數(shù)據(jù)信息文件加載到內(nèi)存中可以加快查找速度。
[0095]數(shù)據(jù)文件和數(shù)據(jù)信息文件的格式請參閱圖4所示,數(shù)據(jù)塊按照其標識依次存儲在數(shù)據(jù)文件中。數(shù)據(jù)信息文件包括數(shù)據(jù)塊偏移索引表和數(shù)據(jù)塊尺寸索引表,該數(shù)據(jù)塊偏移索引表用于表示每個數(shù)據(jù)塊在數(shù)據(jù)文件中的偏移量,偏移量以數(shù)據(jù)塊與數(shù)據(jù)文件頭之間的偏移量為基準,數(shù)據(jù)塊尺寸索引表則用于表示每個數(shù)據(jù)塊的長度。從中可以看出,第i個數(shù)據(jù)塊的偏移量為第I個至第1-ι個數(shù)據(jù)塊的長度之和。
[0096]在本申請實施例中,查找單元14具體用于依據(jù)數(shù)據(jù)塊標識,在數(shù)據(jù)塊偏移索引表中查找數(shù)據(jù)塊標識對應的數(shù)據(jù)塊與數(shù)據(jù)文件頭之間的偏移量。以及依據(jù)數(shù)據(jù)塊標識,在數(shù)據(jù)塊尺寸索引表中查找數(shù)據(jù)塊標識對應的數(shù)據(jù)塊的長度,并在數(shù)據(jù)文件中查找到偏移量位置處具有所長度的數(shù)據(jù)塊。
[0097]如三維數(shù)據(jù)檢索請求中攜帶的是第三層的第一個節(jié)點對應的數(shù)據(jù)塊的標識9,則需要在數(shù)據(jù)塊索引表查找標識為9的數(shù)據(jù)塊。首先獲得該數(shù)據(jù)塊的標識9,然后根據(jù)該標識在數(shù)據(jù)塊偏移索引表和數(shù)據(jù)塊尺寸索引表中檢索該數(shù)據(jù)塊在數(shù)據(jù)文件中的偏移和長度即可。
[0098]在本申請實施例中,獲取單元11的結構示意圖請參閱圖7所示,可以包括:構建子單元111、編碼子單元112、記錄子單元113和轉換子單元114。其中,
[0099]構建子單元111,用于將三維數(shù)據(jù)置于一八叉樹中,八叉樹是包含三維數(shù)據(jù)的所有數(shù)據(jù)的最小八叉樹,且八叉樹的每個節(jié)點是三個體素數(shù)N為預設體素數(shù)的正方體數(shù)據(jù)塊,八叉樹的層數(shù)M為
【權利要求】
1.一種基于八叉樹的三維數(shù)據(jù)檢索方法,其特征在于,包括: 獲取三維數(shù)據(jù)文件的八叉樹文件,其中所述八叉樹文件包括一數(shù)據(jù)信息文件和一數(shù)據(jù)文件,所述數(shù)據(jù)文件用于存數(shù)所述三維數(shù)據(jù)的所有數(shù)據(jù)塊,每個所述數(shù)據(jù)塊對應所述八叉樹中的一個節(jié)點,所述數(shù)據(jù)信息文件用于記錄每個所述數(shù)據(jù)塊在數(shù)據(jù)文件中的位置; 在內(nèi)存中生成所述數(shù)據(jù)文件的數(shù)據(jù)塊索引表,所述數(shù)據(jù)塊索引表為每個所述數(shù)據(jù)塊分配一標識; 接收攜帶有數(shù)據(jù)塊標識的三維數(shù)據(jù)檢索請求,所述數(shù)據(jù)塊標識是當前要檢索的數(shù)據(jù)塊的標識; 從所述數(shù)據(jù)信息文件中查找所述數(shù)據(jù)塊標識對應的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置。
2.根據(jù)權利要求1所述的方法,其特征在于,獲取三維數(shù)據(jù)文件的八叉樹文件,包括: 將三維數(shù)據(jù)置于一八叉樹中,所述八叉樹是包含所述三維數(shù)據(jù)的所有數(shù)據(jù)的最小八叉樹,且所述八叉樹的每個節(jié)點是三個體素數(shù)N為預設體素數(shù)的正方體數(shù)據(jù)塊,所述八叉樹的層數(shù)M為Plog2(RZY)I +1,P為所述三維數(shù)據(jù)的三個體素數(shù)中的最大體素數(shù); 對八叉樹中的每個節(jié)點進行節(jié)點編碼,得到每個節(jié)點的標識,其中所述節(jié)點之間的標識符合遞增變化或遞減變化; 將所述三維數(shù)據(jù)和所述八叉樹中所有節(jié)點標識記錄在三維數(shù)據(jù)文件中; 將所述三維數(shù)據(jù)文件轉換為八叉樹文件。
3.根據(jù)權利要求2所述的 方法,其特征在于,將三維數(shù)據(jù)置于一八叉樹中之后,在對八叉樹中的每個節(jié)點進行節(jié)點編碼,得到每個節(jié)點的標識之前,所述方法還包括:刪除八叉樹中的空節(jié)點,其中所述空節(jié)點是未包括有三維數(shù)據(jù)的節(jié)點。
4.根據(jù)權利要求3所述的方法,其特征在于,所述對八叉樹中的每個節(jié)點進行節(jié)點編碼,得到每個節(jié)點的標識包括: 對所述八叉樹中的每個節(jié)點進行基于Morton碼的節(jié)點編碼,以按照節(jié)點在所述八叉樹中的排序,將所有節(jié)點標識按照從零起始的自然數(shù)序列進行一一映射。
5.根據(jù)權利要求1至4任意一項所述的方法,其特征在于,所述數(shù)據(jù)信息文件包括數(shù)據(jù)塊偏移索引表和數(shù)據(jù)塊尺寸索引表; 從所述數(shù)據(jù)信息文件中查找所述數(shù)據(jù)塊標識對應的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置包括: 依據(jù)所述數(shù)據(jù)塊標識,在所述數(shù)據(jù)塊偏移索引表中查找所述數(shù)據(jù)塊標識對應的數(shù)據(jù)塊與所述數(shù)據(jù)文件頭之間的偏移量; 依據(jù)所述數(shù)據(jù)塊標識,在所述數(shù)據(jù)塊尺寸索引表中查找所述數(shù)據(jù)塊標識對應的數(shù)據(jù)塊的長度,并在所述數(shù)據(jù)文件中查找到偏移量位置處具有所長度的數(shù)據(jù)塊。
6.根據(jù)權利要求5所述的方法,其特征在于,所述方法還包括: 采用直方圖對所述三維數(shù)據(jù)進行去噪處理,以刪除所述三維數(shù)據(jù)中的最大數(shù)據(jù)和最小數(shù)據(jù)。
7.一種基于八叉樹的三維數(shù)據(jù)檢索裝置,其特征在于,包括: 獲取單元,用于獲取三維數(shù)據(jù)文件的八叉樹文件,其中所述八叉樹文件包括一數(shù)據(jù)信息文件和一數(shù)據(jù)文件,所述數(shù)據(jù)文件用于存數(shù)所述三維數(shù)據(jù)的所有數(shù)據(jù)塊,每個所述數(shù)據(jù)塊對應所述八叉樹中的一個節(jié)點,所述數(shù)據(jù)信息文件用于記錄每個所述數(shù)據(jù)塊在數(shù)據(jù)文件中的位置; 生成單元,用于在內(nèi)存中生成所述數(shù)據(jù)文件的數(shù)據(jù)塊索引表,所述數(shù)據(jù)塊索引表為每個所述數(shù)據(jù)塊分配一標識; 接收單元,用于接收攜帶有數(shù)據(jù)塊標識的三維數(shù)據(jù)檢索請求,所述數(shù)據(jù)塊標識是當前要檢索的數(shù)據(jù)塊的標識; 查找單元,用于從所述數(shù)據(jù)信息文件中查找所述數(shù)據(jù)塊標識對應的數(shù)據(jù)塊在數(shù)據(jù)文件中的位置。
8.根據(jù)權利要求7所述的裝置,其特征在于,所述獲取單元包括: 構建子單元,用于將三維數(shù)據(jù)置于一八叉樹中,所述八叉樹是包含所述三維數(shù)據(jù)的所有數(shù)據(jù)的最小八叉樹,且所述八叉樹的每個節(jié)點是三個體素數(shù)N為預設體素數(shù)的正方體數(shù)據(jù)塊,所述八叉樹的層數(shù)M為pog2(//,V;)l+l,P為所述三維數(shù)據(jù)的三個體素數(shù)中的最大體素數(shù); 編碼子單元,用于對八叉樹中的每個節(jié)點進行節(jié)點編碼,得到每個節(jié)點的標識,其中所述節(jié)點之間的標識符合遞增變化或遞減變化; 記錄子單元,用于將所述三維數(shù)據(jù)和所述八叉樹中所有節(jié)點標識記錄在三維數(shù)據(jù)文件中; 轉換子單元,用于 將所述三維數(shù)據(jù)文件轉換為八叉樹文件。
9.根據(jù)權利要求8所述的裝置,其特征在于,所述獲取單元還包括:刪除子單元,用于刪除八叉樹中的空節(jié)點,其中所述空節(jié)點是未包括有三維數(shù)據(jù)的節(jié)點; 所述編碼子單元,具體用于對所述八叉樹中的每個節(jié)點進行基于Morton碼的節(jié)點編碼,以按照節(jié)點在所述八叉樹中的排序,將所有節(jié)點標識按照從零起始的自然數(shù)序列進行一一映射。
10.根據(jù)權利要求7至9任意一項所述的裝置,其特征在于,所述數(shù)據(jù)信息文件包括數(shù)據(jù)塊偏移索引表和數(shù)據(jù)塊尺寸索引表; 所述查找單元,具體用于依據(jù)所述數(shù)據(jù)塊標識,在所述數(shù)據(jù)塊偏移索引表中查找所述數(shù)據(jù)塊標識對應的數(shù)據(jù)塊與所述數(shù)據(jù)文件頭之間的偏移量;以及依據(jù)所述數(shù)據(jù)塊標識,在所述數(shù)據(jù)塊尺寸索引表中查找所述數(shù)據(jù)塊標識對應的數(shù)據(jù)塊的長度,并在所述數(shù)據(jù)文件中查找到偏移量位置處具有所長度的數(shù)據(jù)塊; 所述裝置還包括:采用直方圖對所述三維數(shù)據(jù)進行去噪處理,以刪除所述三維數(shù)據(jù)中的最大數(shù)據(jù)和最小數(shù)據(jù)。
【文檔編號】G06F17/30GK103440350SQ201310432202
【公開日】2013年12月11日 申請日期:2013年9月22日 優(yōu)先權日:2013年9月22日
【發(fā)明者】魏曉輝, 白鑫, 李洪亮, 胡亮, 黃大年 申請人:吉林大學