本發(fā)明涉及計(jì)算機(jī)圖像處理領(lǐng)域,尤其涉及一種三維數(shù)字巖心的連通區(qū)域識(shí)別方法及裝置。
背景技術(shù):
數(shù)字巖心技術(shù)是近年興起的巖心分析的有效方法,在常規(guī)砂巖和碳酸鹽巖等巖心分析領(lǐng)域應(yīng)用廣泛,獲得了極大的成功。基本原理是基于二維掃描電鏡圖像或三維ct掃描圖像,運(yùn)用計(jì)算機(jī)圖像處理技術(shù),通過一定的算法完成數(shù)字巖心重構(gòu)。
數(shù)字巖心建模方法可分為兩大類:物理實(shí)驗(yàn)方法和數(shù)值重建方法。物理實(shí)驗(yàn)方法均借助高倍光學(xué)顯微鏡、掃描電鏡或ct成像儀等高精度儀器獲取巖心的平面圖像,之后對(duì)平面圖像進(jìn)行三維重建即可得到數(shù)字巖心;數(shù)值重建方法則借助巖心平面圖像等少量資料,通過圖像分析提取建模信息,之后采用某種數(shù)學(xué)方法建立數(shù)字巖心。上述建立三維數(shù)字巖心的方法,相鄰連通區(qū)域之間沒有很好地進(jìn)行區(qū)分標(biāo)識(shí),不利于研究人員查看分析。因此,亟需一種三維數(shù)字巖心的連通區(qū)域識(shí)別方法。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種三維數(shù)字巖心的連通區(qū)域識(shí)別方法及裝置,用以解決現(xiàn)有技術(shù)中的三維數(shù)字巖心相鄰連通區(qū)域之間區(qū)分不明顯的技術(shù)問題。
本發(fā)明一方面提供一種三維數(shù)字巖心的連通區(qū)域識(shí)別方法,包括:
數(shù)據(jù)讀取步驟,讀取三維數(shù)字巖心文件,所述三維數(shù)字巖心文件包括能夠表征三維數(shù)字巖心的數(shù)據(jù),其中,三維數(shù)字巖心的數(shù)據(jù)為多個(gè)像素點(diǎn),每個(gè)像素點(diǎn)包括像素值和用于確定像素點(diǎn)位置的三維坐標(biāo),三維坐標(biāo)分別用x,y和z表示;
數(shù)據(jù)分塊步驟,對(duì)三維數(shù)字巖心數(shù)據(jù)進(jìn)行分塊處理,以獲得多個(gè)子塊;
掃描線獲取步驟,對(duì)各子塊的三維數(shù)字巖心數(shù)據(jù)進(jìn)行掃描,以獲取掃描線;
子連通區(qū)域獲取步驟,在各子塊內(nèi)根據(jù)掃描線生成子連通區(qū)域;
父連通區(qū)域獲取步驟,對(duì)子連通區(qū)域進(jìn)行合并處理,以生成父連通區(qū)域;
標(biāo)記步驟,對(duì)各父連通區(qū)域采用不同的顏色進(jìn)行標(biāo)記。
進(jìn)一步的,掃描線獲取步驟,具體包括:
對(duì)每個(gè)子塊分別進(jìn)行像素點(diǎn)篩選,以獲得優(yōu)選像素點(diǎn),其中,優(yōu)選像素點(diǎn)為像素值小于第一預(yù)設(shè)閾值的像素點(diǎn);
在每個(gè)子塊內(nèi)獲取掃描線的長(zhǎng)度大于第二預(yù)設(shè)閾值的掃描線,所述掃描線的長(zhǎng)度為x方向上相鄰的優(yōu)選像素點(diǎn)的連線長(zhǎng)度,所述掃描線包括組成掃描線長(zhǎng)度的各個(gè)優(yōu)選像素點(diǎn)。
進(jìn)一步的,子連通區(qū)域獲取步驟,具體包括:
初始化子步驟,初始化未分組掃描線,初始化子連通區(qū)域?yàn)榭?,其中,未分組掃描線包括所有的掃描線;
當(dāng)前掃描線選定子步驟,在未分組掃描線內(nèi)任意選定一條掃描線作為當(dāng)前掃描線,并將當(dāng)前掃描線添加到子連通區(qū)域中,且將當(dāng)前掃描線從未分組掃描線中刪除;
子連通區(qū)域生成子步驟,在當(dāng)前掃描線y方向和z方向的平面內(nèi)查找是否有相鄰的掃描線,若有,將其添加到子連通區(qū)域中,并將其設(shè)置為當(dāng)前掃描線,且將當(dāng)前掃描線從未分組掃描線中刪除,轉(zhuǎn)子連通區(qū)域生成子步驟執(zhí)行,若無,保存此時(shí)的子連通區(qū)域,然后設(shè)置子連通區(qū)域?yàn)榭?,判斷未分組掃描線是否為空,若不為空,轉(zhuǎn)當(dāng)前掃描線選定子步驟執(zhí)行,以獲得多個(gè)子連通區(qū)域。
進(jìn)一步的,父連通區(qū)域獲取步驟,具體包括:
判斷分屬于相鄰兩個(gè)子塊的兩個(gè)子連通區(qū)域的范圍是否有交集,若有交集,則將兩個(gè)子塊的掃描線按照z值排序,對(duì)于每個(gè)z值,在兩個(gè)子塊中各取z-1,z,z+1這三行z值對(duì)應(yīng)的掃描線,形成兩組z值掃描線;
對(duì)兩組z值掃描線按照y值排序,對(duì)于每個(gè)y值,在兩組z值掃描線中各取y-1,y,y+1這三行y值對(duì)應(yīng)的掃描線,形成兩組y值掃描線;
若兩組y值掃描線中有相鄰的掃描線,則將兩個(gè)子連通區(qū)域合并,以形成父連通區(qū)域。
進(jìn)一步的,標(biāo)記步驟具體包括:
中心點(diǎn)獲取子步驟,獲取父連通區(qū)域的中心點(diǎn),并將中心點(diǎn)利用四面體剖分 連接,初始化未標(biāo)記中心點(diǎn),其中,未標(biāo)記中心點(diǎn)包括所有中心點(diǎn);
判斷子步驟,判斷未標(biāo)記中心點(diǎn)是否為空,若不為空,則轉(zhuǎn)標(biāo)記子步驟執(zhí)行;
標(biāo)記子步驟,將未標(biāo)記中心點(diǎn)中所連的邊的數(shù)量最多的中心點(diǎn)設(shè)置為當(dāng)前中心點(diǎn),對(duì)當(dāng)前中心點(diǎn)所在的父連通區(qū)域進(jìn)行顏色標(biāo)記,其顏色要與當(dāng)前中心點(diǎn)有邊連接且標(biāo)記過的父連通區(qū)域的顏色不同;
設(shè)置子步驟,將所有與當(dāng)前中心點(diǎn)有邊相連的中心點(diǎn)所連接的邊的數(shù)量減1,將當(dāng)前中心點(diǎn)從未標(biāo)記中心點(diǎn)中刪除,轉(zhuǎn)判斷子步驟執(zhí)行。
本發(fā)明另一方面提供一種三維數(shù)字巖心的連通區(qū)域識(shí)別裝置,包括:
數(shù)據(jù)讀取模塊,用于讀取三維數(shù)字巖心文件,所述三維數(shù)字巖心文件包括能夠表征三維數(shù)字巖心的數(shù)據(jù),其中,三維數(shù)字巖心的數(shù)據(jù)為多個(gè)像素點(diǎn),每個(gè)像素點(diǎn)包括像素值和用于確定像素點(diǎn)位置的三維坐標(biāo),三維坐標(biāo)分別用x,y和z表示;
數(shù)據(jù)分塊模塊,用于對(duì)三維數(shù)字巖心數(shù)據(jù)進(jìn)行分塊處理,以獲得多個(gè)子塊;
掃描線獲取模塊,用于對(duì)各子塊的三維數(shù)字巖心數(shù)據(jù)進(jìn)行掃描,以獲取掃描線;
子連通區(qū)域獲取模塊,用于在各子塊內(nèi)根據(jù)掃描線生成子連通區(qū)域;
父連通區(qū)域獲取模塊,用于對(duì)子連通區(qū)域進(jìn)行合并處理,以生成父連通區(qū)域;
標(biāo)記模塊,用于對(duì)各父連通區(qū)域采用不同的顏色進(jìn)行標(biāo)記。
進(jìn)一步的,掃描線獲取模塊具體用于:
對(duì)每個(gè)子塊分別進(jìn)行像素點(diǎn)篩選,以獲得優(yōu)選像素點(diǎn),其中,優(yōu)選像素點(diǎn)為像素值小于第一預(yù)設(shè)閾值的像素點(diǎn);
在每個(gè)子塊內(nèi)獲取掃描線的長(zhǎng)度大于第二預(yù)設(shè)閾值的掃描線,所述掃描線的長(zhǎng)度為x方向上相鄰的優(yōu)選像素點(diǎn)的連線長(zhǎng)度,所述掃描線包括組成掃描線長(zhǎng)度的各個(gè)優(yōu)選像素點(diǎn)。
進(jìn)一步的,子連通區(qū)域獲取模塊具體包括:
初始化子模塊,用于初始化未分組掃描線,初始化子連通區(qū)域?yàn)榭?,其中,未分組掃描線包括所有的掃描線;
當(dāng)前掃描線選定子模塊,用于在未分組掃描線內(nèi)任意選定一條掃描線作為當(dāng)前掃描線,并將當(dāng)前掃描線添加到子連通區(qū)域中,且將當(dāng)前掃描線從未分組掃描線中刪除;
子連通區(qū)域生成子模塊,用于在當(dāng)前掃描線y方向和z方向的平面內(nèi)查找是否有相鄰的掃描線,若有,將其添加到子連通區(qū)域中,并將其設(shè)置為當(dāng)前掃描線,且將當(dāng)前掃描線從未分組掃描線中刪除,觸發(fā)子連通區(qū)域生成模塊,若無,保存此時(shí)的子連通區(qū)域,然后設(shè)置子連通區(qū)域?yàn)榭?,判斷未分組掃描線是否為空,若不為空,觸發(fā)當(dāng)前掃描線選定模塊,以獲得多個(gè)子連通區(qū)域。
進(jìn)一步的,父連通區(qū)域獲取模塊,具體用于:
判斷分屬于相鄰兩個(gè)子塊的兩個(gè)子連通區(qū)域的范圍是否有交集,若有交集,則將兩個(gè)子塊的掃描線按照z值排序,對(duì)于每個(gè)z值,在兩個(gè)子塊中各取z-1,z,z+1這三行z值對(duì)應(yīng)的掃描線,形成兩組z值掃描線;
對(duì)兩組z值掃描線按照y值排序,對(duì)于每個(gè)y值,在兩組z值掃描線中各取y-1,y,y+1這三行y值對(duì)應(yīng)的掃描線,形成兩組y值掃描線;
若兩組y值掃描線中有相鄰的掃描線,則將兩個(gè)子連通區(qū)域合并,以形成父連通區(qū)域。
進(jìn)一步的,標(biāo)記模塊具體包括:
中心點(diǎn)獲取子模塊,用于獲取父連通區(qū)域的中心點(diǎn),并將中心點(diǎn)利用四面體剖分連接,初始化未標(biāo)記中心點(diǎn),其中,未標(biāo)記中心點(diǎn)包括所有中心點(diǎn);
判斷子模塊,用于判斷未標(biāo)記中心點(diǎn)是否為空,若不為空,則觸發(fā)標(biāo)記子模塊;
標(biāo)記子模塊,用于將未標(biāo)記中心點(diǎn)中所連的邊的數(shù)量最多的中心點(diǎn)設(shè)置為當(dāng)前中心點(diǎn),對(duì)當(dāng)前中心點(diǎn)所在的父連通區(qū)域進(jìn)行顏色標(biāo)記,其顏色要與當(dāng)前中心點(diǎn)有邊連接且標(biāo)記過的父連通區(qū)域的顏色不同;
設(shè)置子模塊,用于將所有與當(dāng)前中心點(diǎn)有邊相連的中心點(diǎn)所連接的邊的數(shù)量減1,將當(dāng)前中心點(diǎn)從未標(biāo)記中心點(diǎn)中刪除,觸發(fā)判斷子模塊。
本發(fā)明提供的三維數(shù)字巖心的連通區(qū)域識(shí)別方法及裝置,首先讀取三維數(shù)字巖心文件,所述三維數(shù)字巖心文件包括能夠表征三維數(shù)字巖心的數(shù)據(jù),然后對(duì)三維數(shù)字巖心數(shù)據(jù)進(jìn)行分塊處理,以獲得多個(gè)子塊;再對(duì)各子塊的三維數(shù)字巖心數(shù)據(jù)進(jìn)行掃描,以獲取掃描線,并在各子塊內(nèi)根據(jù)掃描線生成子連通區(qū)域,然后對(duì)子連通區(qū)域進(jìn)行合并處理,以生成父連通區(qū)域,最后對(duì)各父連通區(qū)域采用不同的顏色進(jìn)行標(biāo)記。利用本發(fā)明提供的這種方法不僅可以精確獲得三維數(shù)字巖心的連通區(qū)域,而且可以對(duì)三維數(shù)字巖心相鄰連通區(qū)域之間進(jìn)行區(qū)分,為研究人員進(jìn)行 分析研究奠定基礎(chǔ)。
附圖說明
在下文中將基于實(shí)施例并參考附圖來對(duì)本發(fā)明進(jìn)行更詳細(xì)的描述。其中:
圖1為根據(jù)本發(fā)明實(shí)施例一的三維數(shù)字巖心的連通區(qū)域識(shí)別方法的流程示意圖;
圖2為根據(jù)本發(fā)明實(shí)施例二的三維數(shù)字巖心的連通區(qū)域識(shí)別方法的流程示意圖;
圖3為根據(jù)本發(fā)明實(shí)施例三的三維數(shù)字巖心的連通區(qū)域識(shí)別裝置的結(jié)構(gòu)示意圖;
圖4為根據(jù)本發(fā)明實(shí)施例四的三維數(shù)字巖心的連通區(qū)域識(shí)別裝置的結(jié)構(gòu)示意圖。
在附圖中,相同的部件使用相同的附圖標(biāo)記。附圖并未按照實(shí)際的比例繪制。
具體實(shí)施方式
下面將結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步說明。
實(shí)施例一
圖1為根據(jù)本發(fā)明實(shí)施例一的三維數(shù)字巖心的連通區(qū)域識(shí)別方法的流程示意圖;如圖1所示,本實(shí)施例提供一種三維數(shù)字巖心的連通區(qū)域識(shí)別方法,包括:
數(shù)據(jù)讀取步驟101,讀取三維數(shù)字巖心文件,所述三維數(shù)字巖心文件包括能夠表征三維數(shù)字巖心的數(shù)據(jù),其中,三維數(shù)字巖心的數(shù)據(jù)為多個(gè)像素點(diǎn),每個(gè)像素點(diǎn)包括像素值和用于確定像素點(diǎn)位置的三維坐標(biāo),三維坐標(biāo)分別用x,y和z表示。
具體的,三維數(shù)字巖心文件包括三維數(shù)字巖心數(shù)據(jù),三維數(shù)字巖心數(shù)據(jù)可表征多個(gè)像素點(diǎn),每個(gè)像素點(diǎn)包括像素值和可確定像素點(diǎn)位置的三維坐標(biāo)組成,三維坐標(biāo)可表示空間任何一個(gè)位置,本發(fā)明中的三維坐標(biāo)分別用x、y和z表示,本實(shí)施例中采用空間直角坐標(biāo)系來對(duì)像素點(diǎn)的位置進(jìn)行說明。
數(shù)據(jù)分塊步驟102,對(duì)三維數(shù)字巖心數(shù)據(jù)進(jìn)行分塊處理,以獲得多個(gè)子塊。
具體的,將三維數(shù)字巖心數(shù)據(jù)分塊,每一塊為一個(gè)子塊,如若導(dǎo)入的三維數(shù)字巖心數(shù)據(jù)在x、y、z方向上的像素點(diǎn)個(gè)數(shù)分別為1200,1200,1600,可將三 維數(shù)字巖心數(shù)據(jù)劃分為在x、y、z方向上的像素點(diǎn)個(gè)數(shù)為128*128*128的子塊。
掃描線獲取步驟103,對(duì)各子塊的三維數(shù)字巖心數(shù)據(jù)進(jìn)行掃描,以獲取掃描線。
具體的,掃描線由像素點(diǎn)和像素點(diǎn)之間的連線組成,用于后續(xù)判斷像素點(diǎn)之間的連通關(guān)系。對(duì)各子塊的三維數(shù)字巖心數(shù)據(jù)進(jìn)行掃描,即依次讀取各子塊中的各像素點(diǎn),通過判斷各像素點(diǎn)之間的關(guān)系以獲取掃描線。
子連通區(qū)域獲取步驟104,在各子塊內(nèi)根據(jù)掃描線生成子連通區(qū)域。
具體的,在各個(gè)子塊內(nèi),根據(jù)各個(gè)掃描線之間的相互關(guān)系,使具有相鄰關(guān)系的掃描線合并,使其處于一個(gè)子連通區(qū)域內(nèi)。掃描線之間是否相鄰的判斷方法為:x方向沒有重疊則不相鄰,y方向距離大于1則不相鄰,z方向距離大于1則不相鄰,除以上情況外的其它情況認(rèn)為兩個(gè)掃描線相鄰。
父連通區(qū)域獲取步驟105,對(duì)子連通區(qū)域進(jìn)行合并處理,以生成父連通區(qū)域。
具體的,在相鄰的各個(gè)子塊內(nèi),對(duì)處于不同子塊的子連通區(qū)域進(jìn)行分析,將具有連通關(guān)系的子連通區(qū)域合并,以生成父連通區(qū)域。合并兩個(gè)子塊中的子連通區(qū)域的方法為:將子塊中一個(gè)子連通區(qū)域,和另一個(gè)子塊中每個(gè)子連通區(qū)域逐一進(jìn)行比對(duì),將具有相鄰關(guān)系的子連通區(qū)域的掃描線合并到一起形成父連通區(qū)域。
標(biāo)記步驟106,對(duì)各父連通區(qū)域采用不同的顏色進(jìn)行標(biāo)記。
具體的,對(duì)各個(gè)父連通區(qū)域采用不同的顏色進(jìn)行標(biāo)記,以示區(qū)別。
進(jìn)一步的,在獲取父連通區(qū)域之后,由于將相鄰子塊的子連通區(qū)域合并后,可能一些跨多個(gè)子塊的子連通區(qū)域并沒有被合成一個(gè)父連通區(qū)域,所以還要對(duì)這些父連通區(qū)域進(jìn)行相鄰性的識(shí)別并合并。合并過程就是對(duì)這些父連通區(qū)域互相比對(duì),將相鄰的父連通區(qū)域合并,直到找不到相鄰的父連通區(qū)域。
本實(shí)施例中的三維數(shù)字巖心的連通區(qū)域識(shí)別方法,首先讀取三維數(shù)字巖心文件,所述三維數(shù)字巖心文件包括能夠表征三維數(shù)字巖心的數(shù)據(jù),然后對(duì)三維數(shù)字巖心數(shù)據(jù)進(jìn)行分塊處理,以獲得多個(gè)子塊;再對(duì)各子塊的三維數(shù)字巖心數(shù)據(jù)進(jìn)行掃描,以獲取掃描線,并在各子塊內(nèi)根據(jù)掃描線生成子連通區(qū)域,然后對(duì)子連通區(qū)域進(jìn)行合并處理,以生成父連通區(qū)域,最后對(duì)各父連通區(qū)域采用不同的顏色進(jìn)行標(biāo)記。利用本發(fā)明提供的這種方法不僅可以精確獲得三維數(shù)字巖心的連通區(qū)域,而且可以對(duì)三維數(shù)字巖心相鄰連通區(qū)域之間進(jìn)行區(qū)分,為研究人員進(jìn)行分析研究奠定基礎(chǔ)。
實(shí)施例二
本實(shí)施例是在上述實(shí)施例的基礎(chǔ)上進(jìn)行的補(bǔ)充說明。
圖2為根據(jù)本發(fā)明實(shí)施例二的三維數(shù)字巖心的連通區(qū)域識(shí)別方法的流程示意圖;如圖2所示,本實(shí)施例提供一種三維數(shù)字巖心的連通區(qū)域識(shí)別方法,包括:
步驟201,讀取三維數(shù)字巖心文件。
步驟202,對(duì)三維數(shù)字巖心數(shù)據(jù)進(jìn)行分塊處理,以獲得多個(gè)子塊。
步驟201-202具體可參見實(shí)施例一中的步驟101-步驟102,在此不再贅述。
步驟2031,對(duì)每個(gè)子塊分別進(jìn)行像素點(diǎn)篩選,以獲得優(yōu)選像素點(diǎn),其中,優(yōu)選像素點(diǎn)為像素值小于第一預(yù)設(shè)閾值的像素點(diǎn)。
具體的,第一預(yù)設(shè)閾值可根據(jù)實(shí)際情況進(jìn)行靈活設(shè)置,在此不做限制,在本實(shí)施例中,第一預(yù)設(shè)閾值取55,將每個(gè)子塊中的像素值小于55的像素點(diǎn)選定為優(yōu)選像素點(diǎn)。
步驟2032,獲取每個(gè)子塊內(nèi)掃描線的長(zhǎng)度大于第二預(yù)設(shè)閾值的掃描線,所述掃描線的長(zhǎng)度為x方向上相鄰的優(yōu)選像素點(diǎn)的連線長(zhǎng)度,所述掃描線包括組成掃描線長(zhǎng)度的各個(gè)優(yōu)選像素點(diǎn)。
具體的,相鄰兩個(gè)優(yōu)選像素點(diǎn)之間的掃描線長(zhǎng)度為1,第二預(yù)設(shè)閾值可根據(jù)實(shí)際情況進(jìn)行靈活設(shè)置,在此不做限制,在本實(shí)施例中,第二預(yù)設(shè)閾值取3,即連續(xù)4個(gè)或以上像素點(diǎn)組成的掃描線會(huì)被保留。掃描線包含這條線x方向的起止坐標(biāo),y值和z值。
步驟2041,初始化未分組掃描線,初始化子連通區(qū)域?yàn)榭眨渲?,未分組掃描線包括所有的掃描線。
具體的,初始化子連通區(qū)域?yàn)榭?,即子連通區(qū)域不包括任何掃描線。
步驟2042,在未分組掃描線內(nèi)任意選定一條掃描線作為當(dāng)前掃描線,并將當(dāng)前掃描線添加到子連通區(qū)域中,且將當(dāng)前掃描線從未分組掃描線中刪除。
步驟2043,在當(dāng)前掃描線y方向和z方向的平面內(nèi)查找是否有相鄰的掃描線,若有,轉(zhuǎn)步驟2043a執(zhí)行,若無,轉(zhuǎn)步驟2043b執(zhí)行。
具體的,在當(dāng)前掃描線y方向和z方向的平面內(nèi)查找其y方向上下兩層,z方向前后兩層中是否有相鄰的掃描線,若有,轉(zhuǎn)步驟2043a執(zhí)行,若無,轉(zhuǎn)步驟2043b執(zhí)行。
掃描線是否相鄰的判斷方法為:x方向沒有重疊則不相鄰,y方向距離大于1 則不相鄰,z方向距離大于1則不相鄰,其它情況相鄰。
步驟2043a,將查找到的相鄰的掃描線添加到子連通區(qū)域中,并將其設(shè)置為當(dāng)前掃描線,且將當(dāng)前掃描線從未分組掃描線中刪除,轉(zhuǎn)步驟2043執(zhí)行。
具體的,將相鄰的掃描線全部添加到子連通區(qū)域中,并將查找到的相鄰的掃描線設(shè)置為當(dāng)前掃描線,轉(zhuǎn)步驟2043執(zhí)行。
步驟2043b,保存此時(shí)的子連通區(qū)域,然后設(shè)置子連通區(qū)域?yàn)榭眨D(zhuǎn)步驟2043b1執(zhí)行。
具體的,執(zhí)行到本步驟,說明包括在子連通區(qū)域中的掃描線已經(jīng)全部添加完畢,因此需要對(duì)此時(shí)的子連通區(qū)域進(jìn)行保存,用于后續(xù)步驟使用,然后將子連通區(qū)域設(shè)置為空,用于下一輪新的循環(huán),即轉(zhuǎn)步驟2043b1執(zhí)行。
步驟2043b1,判斷未分組掃描線是否為空,若不為空,轉(zhuǎn)步驟2042執(zhí)行,以獲得多個(gè)子連通區(qū)域。若為空,則轉(zhuǎn)步驟2051執(zhí)行。
具體的,判斷未分組掃描線中是否還有掃描線沒有參與子連通區(qū)域的合并,若還有,即未分組掃描線不為空,則需要根據(jù)掃描線生成子連通區(qū)域,轉(zhuǎn)步驟2042執(zhí)行,以此來獲得多個(gè)子連通區(qū)域,若未分組掃描線為空,則說明所有的掃描線全部參與生成了子連通區(qū)域,轉(zhuǎn)步驟2051執(zhí)行即可。
進(jìn)一步的,為了減少計(jì)算量,并在合理的精度范圍內(nèi)獲得子連通區(qū)域,對(duì)子連通區(qū)域進(jìn)行優(yōu)選,將子連通區(qū)域體積小于第三預(yù)設(shè)閾值的剔除掉,第三預(yù)設(shè)閾值在本實(shí)施例中設(shè)為50,也可根據(jù)實(shí)際情況設(shè)置為其他數(shù)值,在此不做限定。子連通區(qū)域的體積為立方體的體積,所述立方體為可包含所有組成子連通區(qū)域的掃描線的最小立方體。
步驟2051,判斷分屬于相鄰兩個(gè)子塊的兩個(gè)子連通區(qū)域的范圍是否有交集,若有交集,則將兩個(gè)子塊的掃描線按照z值排序,對(duì)于每個(gè)z值,在兩個(gè)子塊中各取z-1,z,z+1這三行z值對(duì)應(yīng)的掃描線,形成兩組z值掃描線。
具體的,合并兩個(gè)子塊中的子連通區(qū)域的方法為:將子塊中一個(gè)子連通區(qū)域,和另一個(gè)子塊中每個(gè)子連通區(qū)域逐一進(jìn)行比對(duì),將具有相鄰關(guān)系的子連通區(qū)域的掃描線合并到一起形成父連通區(qū)域。
步驟2051-步驟2053為子連通區(qū)域是否相鄰的判斷方法。
將兩個(gè)子塊的掃描線按照z值排序,然后從小到大依次比較不同z值所對(duì)應(yīng)的兩個(gè)子塊中的掃描線是否相鄰,對(duì)于每個(gè)z值,在兩個(gè)子塊中各取z-1,z, z+1這三行z值對(duì)應(yīng)的掃描線,形成兩組z值掃描線
步驟2052,對(duì)兩組z值掃描線按照y值排序,對(duì)于每個(gè)y值,在兩組z值掃描線中各取y-1,y,y+1這三行y值對(duì)應(yīng)的掃描線,形成兩組y值掃描線。
具體的,對(duì)兩組z值掃描線按照y值排序后,從小到大依次比較不同y值所對(duì)應(yīng)的兩組z值掃描線中的掃描線是否相鄰,對(duì)于每個(gè)y值,在兩組z值掃描線中各取y-1,y,y+1這三行y值對(duì)應(yīng)的掃描線,形成兩組y值掃描線。
步驟2053,若兩組y值掃描線中有相鄰的掃描線,則將兩個(gè)子連通區(qū)域合并,以形成父連通區(qū)域。
步驟2061,獲取父連通區(qū)域的中心點(diǎn),并將中心點(diǎn)利用四面體剖分連接,初始化未標(biāo)記中心點(diǎn),其中,未標(biāo)記中心點(diǎn)包括所有中心點(diǎn)。
具體的,中心點(diǎn)為父連通區(qū)域所外包的最小立方體的中心。四面體剖分的方法具體可參見現(xiàn)有技術(shù),在此不再贅述。經(jīng)過四面體剖分后,會(huì)形成一個(gè)立體網(wǎng)絡(luò),立體網(wǎng)絡(luò)是由若干四面體組成的,其中四面體的每個(gè)端點(diǎn)即為各個(gè)連通區(qū)域的中心點(diǎn)。
步驟2062,判斷未標(biāo)記中心點(diǎn)是否為空,若不為空,則轉(zhuǎn)步驟2063執(zhí)行;若為空,結(jié)束。
具體的,對(duì)父連通區(qū)域進(jìn)行不同顏色標(biāo)記,若未標(biāo)記中心點(diǎn)為空,即不存在未標(biāo)記中心點(diǎn),則說明此時(shí)的中心點(diǎn)全部標(biāo)記過了,應(yīng)結(jié)束流程。若未標(biāo)記中心點(diǎn)不為空,轉(zhuǎn)步驟2063繼續(xù)執(zhí)行。
步驟2063,將未標(biāo)記中心點(diǎn)中所連的邊的數(shù)量最多的中心點(diǎn)設(shè)置為當(dāng)前中心點(diǎn),對(duì)當(dāng)前中心點(diǎn)所在的父連通區(qū)域進(jìn)行顏色標(biāo)記,其顏色要與當(dāng)前中心點(diǎn)有邊連接且標(biāo)記過的父連通區(qū)域的顏色不同。
步驟2064,將所有與當(dāng)前中心點(diǎn)有邊相連的中心點(diǎn)所連接的邊的數(shù)量減1,將當(dāng)前中心點(diǎn)從未標(biāo)記中心點(diǎn)中刪除,轉(zhuǎn)步驟2062執(zhí)行。
進(jìn)一步的,在對(duì)所有父連通區(qū)域進(jìn)行顏色標(biāo)記完成之后,可對(duì)生成的父連通區(qū)域進(jìn)行三維切片顯示。
本實(shí)施例中的三維數(shù)字巖心的連通區(qū)域識(shí)別方法,不僅可以精確獲得三維數(shù)字巖心的連通區(qū)域,而且可以對(duì)三維數(shù)字巖心相鄰連通區(qū)域之間進(jìn)行不同標(biāo)記區(qū)分,為研究人員進(jìn)行分析研究奠定基礎(chǔ)。
實(shí)施例三
本實(shí)施例為裝置實(shí)施例,用于執(zhí)行上述實(shí)施例一中的方法。
圖3為根據(jù)本發(fā)明實(shí)施例三的三維數(shù)字巖心的連通區(qū)域識(shí)別裝置的結(jié)構(gòu)示意圖;如圖3所示,本實(shí)施例提供一種三維數(shù)字巖心的連通區(qū)域識(shí)別裝置,包括:數(shù)據(jù)讀取模塊301、數(shù)據(jù)分塊模塊302、掃描線獲取模塊303、子連通區(qū)域獲取模塊304、父連通區(qū)域獲取模塊305和標(biāo)記模塊306。
其中,數(shù)據(jù)讀取模塊301,用于讀取三維數(shù)字巖心文件,所述三維數(shù)字巖心文件包括能夠表征三維數(shù)字巖心的數(shù)據(jù),其中,三維數(shù)字巖心的數(shù)據(jù)為多個(gè)像素點(diǎn),每個(gè)像素點(diǎn)包括像素值和用于確定像素點(diǎn)位置的三維坐標(biāo),三維坐標(biāo)分別用x,y和z表示;
數(shù)據(jù)分塊模塊302,用于對(duì)三維數(shù)字巖心數(shù)據(jù)進(jìn)行分塊處理,以獲得多個(gè)子塊;
掃描線獲取模塊303,用于對(duì)各子塊的三維數(shù)字巖心數(shù)據(jù)進(jìn)行掃描,以獲取掃描線;
子連通區(qū)域獲取模塊304,用于在各子塊內(nèi)根據(jù)掃描線生成子連通區(qū)域;
父連通區(qū)域獲取模塊305,用于對(duì)子連通區(qū)域進(jìn)行合并處理,以生成父連通區(qū)域;
標(biāo)記模塊306,用于對(duì)各父連通區(qū)域采用不同的顏色進(jìn)行標(biāo)記。
本實(shí)施例是與方法實(shí)施例一對(duì)應(yīng)的裝置實(shí)施例,具體可參見實(shí)施例一中的描述,在此不再贅述。
實(shí)施例四
本實(shí)施例是在實(shí)施例三的基礎(chǔ)上進(jìn)行的補(bǔ)充說明,用于執(zhí)行上述實(shí)施例二中的方法。
圖4為根據(jù)本發(fā)明實(shí)施例四的三維數(shù)字巖心的連通區(qū)域識(shí)別裝置的結(jié)構(gòu)示意圖;如圖4所示,本實(shí)施例提供一種三維數(shù)字巖心的連通區(qū)域識(shí)別裝置,包括:數(shù)據(jù)讀取模塊301、數(shù)據(jù)分塊模塊302、掃描線獲取模塊303、子連通區(qū)域獲取模塊304、父連通區(qū)域獲取模塊305和標(biāo)記模塊306。
其中,掃描線獲取模塊303具體用于:
對(duì)每個(gè)子塊分別進(jìn)行像素點(diǎn)篩選,以獲得優(yōu)選像素點(diǎn),其中,優(yōu)選像素點(diǎn)為像素值小于第一預(yù)設(shè)閾值的像素點(diǎn);
在每個(gè)子塊內(nèi)獲取掃描線的長(zhǎng)度大于第二預(yù)設(shè)閾值的掃描線,所述掃描線的 長(zhǎng)度為x方向上相鄰的優(yōu)選像素點(diǎn)的連線長(zhǎng)度,所述掃描線包括組成掃描線長(zhǎng)度的各個(gè)優(yōu)選像素點(diǎn)。
子連通區(qū)域獲取模塊304具體包括初始化子模塊3041、當(dāng)前掃描線選定子模塊3042和子連通區(qū)域生成子模塊3043。
其中,初始化子模塊3041,用于初始化未分組掃描線,初始化子連通區(qū)域?yàn)榭?,其中,未分組掃描線包括所有的掃描線;
當(dāng)前掃描線選定子模塊3042,用于在未分組掃描線內(nèi)任意選定一條掃描線作為當(dāng)前掃描線,并將當(dāng)前掃描線添加到子連通區(qū)域中,且將當(dāng)前掃描線從未分組掃描線中刪除;
子連通區(qū)域生成子模塊3043,用于在當(dāng)前掃描線y方向和z方向的平面內(nèi)查找是否有相鄰的掃描線,若有,將其添加到子連通區(qū)域中,并將其設(shè)置為當(dāng)前掃描線,且將當(dāng)前掃描線從未分組掃描線中刪除,觸發(fā)子連通區(qū)域生成模塊,若無,保存此時(shí)的子連通區(qū)域,然后設(shè)置子連通區(qū)域?yàn)榭?,判斷未分組掃描線是否為空,若不為空,觸發(fā)當(dāng)前掃描線選定模塊,以獲得多個(gè)子連通區(qū)域。
父連通區(qū)域獲取模塊305,具體用于:
判斷分屬于相鄰兩個(gè)子塊的兩個(gè)子連通區(qū)域的范圍是否有交集,若有交集,則將兩個(gè)子塊的掃描線按照z值排序,對(duì)于每個(gè)z值,在兩個(gè)子塊中各取z-1,z,z+1這三行z值對(duì)應(yīng)的掃描線,形成兩組z值掃描線;
對(duì)兩組z值掃描線按照y值排序,對(duì)于每個(gè)y值,在兩組z值掃描線中各取y-1,y,y+1這三行y值對(duì)應(yīng)的掃描線,形成兩組y值掃描線;
若兩組y值掃描線中有相鄰的掃描線,則將兩個(gè)子連通區(qū)域合并,以形成父連通區(qū)域。
標(biāo)記模塊306具體包括中心點(diǎn)獲取子模塊3061、判斷子模塊3062、標(biāo)記子模塊3063和設(shè)置子模塊3064。
其中,中心點(diǎn)獲取子模塊3061,用于獲取父連通區(qū)域的中心點(diǎn),并將中心點(diǎn)利用四面體剖分連接,初始化未標(biāo)記中心點(diǎn),其中,未標(biāo)記中心點(diǎn)包括所有中心點(diǎn);
判斷子模塊3062,用于判斷未標(biāo)記中心點(diǎn)是否為空,若不為空,則觸發(fā)標(biāo)記子模塊3063;
標(biāo)記子模塊3063,用于將未標(biāo)記中心點(diǎn)中所連的邊的數(shù)量最多的中心點(diǎn)設(shè)置 為當(dāng)前中心點(diǎn),對(duì)當(dāng)前中心點(diǎn)所在的父連通區(qū)域進(jìn)行顏色標(biāo)記,其顏色要與當(dāng)前中心點(diǎn)有邊連接且標(biāo)記過的父連通區(qū)域的顏色不同;
設(shè)置子模塊3064,用于將所有與當(dāng)前中心點(diǎn)有邊相連的中心點(diǎn)所連接的邊的數(shù)量減1,將當(dāng)前中心點(diǎn)從未標(biāo)記中心點(diǎn)中刪除,觸發(fā)判斷子模塊3062。
本實(shí)施例是與方法實(shí)施例二對(duì)應(yīng)的裝置實(shí)施例,具體可參見實(shí)施例二中的描述,在此不再贅述。
雖然已經(jīng)參考優(yōu)選實(shí)施例對(duì)本發(fā)明進(jìn)行了描述,但在不脫離本發(fā)明的范圍的情況下,可以對(duì)其進(jìn)行各種改進(jìn)并且可以用等效物替換其中的部件。尤其是,只要不存在結(jié)構(gòu)沖突,各個(gè)實(shí)施例中所提到的各項(xiàng)技術(shù)特征均可以任意方式組合起來。本發(fā)明并不局限于文中公開的特定實(shí)施例,而是包括落入權(quán)利要求的范圍內(nèi)的所有技術(shù)方案。