楊 勝,滕奇志
(四川大學 電子信息學院圖像信息研究所,成都610065)
隨著地質石油勘探開發的逐漸深入,石油與天然氣勘探方向開始逐漸由淺轉向深部、由常規油氣藏轉向特殊油氣藏。特別是裂縫性油氣藏,成為地質石油勘探方向的主要研究目標[1]。在裂縫性油氣藏中,研究裂縫的發育程度和分布范圍,對石油和天然氣開采具有重要的意義。通過圖像處理技術,對巖心CT圖像進行處理和分析,是研究巖心裂縫的一種較好的方法。為了計算每條裂縫的相關參數,首先需要將裂縫進行提取,再進行統計分析相關參數。但有些裂縫存在交叉的情況,需要通過算法自動地將交叉裂縫分離。圖1展示了裂縫CT圖像經過閾值分割后,存在交叉裂縫的情況。
從圖1(c)看來,單個交叉裂縫二值圖像在局部上具有直線特征,可以通過提取交叉裂縫的直線部分來將交叉裂縫進行分離。所以針對交叉裂縫分離的問題可以轉換成圖像直線提取的問題。20世紀60年代,Freeman提出了直線檢測準則[2]。通過這個準則,可以檢測出圖像中的直線部分。除此之外,有些學者在此基礎上進一步引入了直線檢測方向優先級的概念[3-4]。方向優先級的引進,提高了直線檢測過程中平滑程度,可以更有利于處理直線交叉的情況。本文基于Freeman鏈碼優先級直線提取算法的思想,對巖心二維CT序列圖像的交叉裂縫進行分離,并在算法基礎上引進了概率優先準則,使算法更好地適用于交叉裂縫的情況。

圖1 二值化處理裂縫CT圖像Fig.1 Crack CT image for binarization
Freeman鏈碼直線提取算法,主要是檢測圖像的直線部分。首先需要對裂縫二值圖進行細化處理,得到裂縫骨架[5-6]。理想情況下,經過圖像細化后得到的骨架是單像素寬度的,單像素寬的裂縫骨架更有利于裂縫骨架的特征提取[7-8]。但在實際情況中,在骨架的轉折處或者交點處,并不能完全實現單像素。所以,要先對骨架圖像進行單像素處理[9],然后再對裂縫骨架進行Freeman鏈碼直線提取。由于巖心裂縫只在局部上具有直線特征,因此在對裂縫骨架進行Freeman鏈碼直線提取后,會造成裂縫骨架的斷開。
本文在提取裂縫骨架直線的基礎上,考慮了裂縫骨架端點附近的梯度信息。根據骨架端點附近的梯度信息,可以使得斷裂的骨架直線合并。合并后便可以得到一條完整的裂縫骨架直線,由此便可以將交叉裂縫中單個裂縫的骨架分別提取出來。得到裂縫的骨架數據后,可以通過骨架平移操作,將完整的裂縫目標提取出來。具體算法流程如圖2所示。

圖2 算法流程Fig.2 Algorithm flow
Freeman鏈碼是用線段的起點加上由八個方向符所構成的一組數列,數列中的值代表著八鄰域中兩像素的相對位置。對于每個像素點來說,其相鄰的點都可以用八方向符中某一個值表示。八方向鏈碼如圖3所示。由此可知,裂縫骨架圖像中,任何一組骨架曲線都可以由一組鏈碼串表示。Freeman直線提取算法,從裂縫骨架的一個點跟蹤到另一個點,一定會對應一組鏈碼序列。

圖3 八鄰域鏈碼Fig.3 Chain code of eight neighborhood
Freeman根據直線在離散平面的特性,提出了直線在離散平面時鏈碼應該遵循的三條準則[2](簡稱Freeman準則):
(1)鏈碼中至多只有2個方向碼,其中一個為主方向,且其值相差1。
(2)若有兩個方向碼,則次級方向碼必單個出現,不能連續出現。
(3)次級方向碼總是盡可能均勻地出現在鏈碼中。
由于裂縫骨架在局部上才完全符合直線特征,故完全依照Freeman準則來提取裂縫是不可行的。本文算法根據裂縫骨架特征,對Freeman準則做出的部分改進如下:
裂縫在全局上的趨勢走向并不像純粹的直線那樣單調,2個方向碼并不能很好地表征一個裂縫在全局上的趨勢走向,故本文算法在Freeman準則基礎上的至多兩個方向碼,額外增加了一個方向碼。其中一個為主方向且另兩個方向碼和主方向的值相差1。另外,在此基礎上增加了每個方向碼出現的概率信息,在對裂縫骨架每個點進行迭代時,更新目前鏈碼中所有方向碼的概率。
統計鏈碼中每個方向碼的概率的好處是:
(1)由于裂縫趨勢走向的不確定性,鏈碼的主方向在每次迭代過程都可能會改變,利用概率信息可以快速得到當前迭代時的主方向。
(2)當鏈碼有3個方向碼時,在某一輪的迭代跟蹤過程中,發現3個方向碼都存在目標點,這時選擇繼續跟蹤概率最大的那個方向碼,保證跟蹤過程盡可能平滑。
如對某個直線L進行跟蹤。當搜索到直線L的第一個像素點時,按照以下方式進行迭代:
(1)當前鏈碼為空時,則按照0~7的方向,逆時針搜索第一個鏈碼值,如圖4(a)所示。
(2)當前鏈碼中只有一個方向D1時,先判斷D1方向是否可以繼續跟蹤。若不能,則尋找另一個鏈碼方向D2,如圖4(b)所示。
(3)當前的鏈碼中有兩個方向D1和D2時,首先跟蹤概率較大的方向,若失敗則繼續跟蹤另一個方向,若兩個方向全部跟蹤失敗,尋找新的方向D3,如圖4(c)所示。
(4)當前的鏈碼中有3個方向D1、D2和D3時,按照從大到小的概率依次跟蹤,如圖4(d)所示。
圖中虛線的含義是,當實線的方向全部不能繼續跟蹤時可以選擇的新方向。

圖4 跟蹤示意圖Fig.4 Tracing diagram
若圖像中分布有很多噪聲,Freeman直線檢測算法在跟蹤的過程中,也可以直接去除圖像中的毛刺和噪聲[10]。通過設置一個鏈碼閾值長度,一輪迭代完成后,判斷當前鏈碼串的長度是否大于該閾值長度,大于閾值長度則說明該鏈碼串是合格的鏈碼串,而小于閾值長度,則說明這個鏈碼串是噪聲應當舍棄,繼續掃描下一個骨架點,開始下一個鏈碼串的跟蹤過程。每次迭代完成后,都記錄已跟蹤過的點,若重新跟蹤到標記跟蹤過的點則直接跳過,直至所有的骨架點都掃描完畢,結束本次跟蹤過程。實驗結果如圖5所示。

圖5 Freeman鏈碼直線提取Fig.5 Line extraction for Freeman chain code
由上述可知,在對裂縫骨架進行鏈碼跟蹤之后,會出現裂縫骨架斷裂的情況,這時需進行骨架合并計算。裂縫骨架是否可以合并和裂縫骨架端點之間的距離及骨架的偏轉角有關。設第L k條骨架的首尾端點為L k(x1,y1),L k(xm,y m),根據公式(1):

可獲得裂縫骨架的偏轉角θL k。判斷骨架L k和L k+i是否可以合并的充要條件是:偏轉角滿足公式(2),骨架端點間的距離滿足公式(3):

其中,di s t函數代表兩坐標點間的距離,α、β分別代表骨架偏轉角閾值和骨架端點距離閾值。當裂縫骨架經過跟蹤算法處理后的兩條裂縫骨架滿足裂縫合并的充要條件時,便可將二者進行合并,具體算法如下:
(1)搜索到還未處理過的裂縫骨架L k,轉步驟(2);若檢測到全部裂縫骨架已經處理,則轉到步驟(3)。
(2)判斷裂縫骨架L k和L k+i是否滿足合并的充要條件。若滿足,則將兩條裂縫骨架合并為一條裂縫骨架L k,并將L k+i設置為另一條未處理過的裂縫骨架,重復步驟(2),否則轉到步驟(1)。
(3)結束裂縫骨架合并算法。
在上節裂縫骨架完成Freeman鏈碼直線提取的基礎上,進行骨架合并。實驗結果如圖6所示。

圖6 骨架合并Fig.6 Skeleton merging
由圖6結果可知,最終得到是一條線性單像素寬度的裂縫骨架,并不能完全覆蓋真實的裂縫區域。所以,需要通過一定的算法提取整個裂縫目標。通過對裂縫骨架平移后,與裂縫二值圖像求交集操作,可以將完整的裂縫目標提取出來。裂縫骨架平移方向上的選擇和裂縫骨架鏈碼的主方向呈90°關系,并且由于細化的裂縫骨架處于裂縫二值圖的中軸,所以骨架的平移方向是兩個互補的方向。算法實現過程如下:
(1)將方向平移間隔變量n1和n2初始化為1。
(2)掃描一條裂縫骨架L k,將L k的坐標數據拷貝到P。根據裂縫骨架鏈碼的主方向求出平移方向,轉到步驟(3),若完成所有裂縫骨架平移后,轉到步驟(5)。
(3)將P所有坐標拷貝后,向平移方向平移n1個間隔,并且與裂縫細化之前的二值圖相比較。若重合度達80%,則將平移后的坐標數據更新到裂縫骨架L k中,n1自加1,重復步驟(3),否則轉到步驟(4)。
(4)將P中所有坐標拷貝后,向另一方向平移n2個間隔,并與裂縫二值圖相比較。若重合度達80%,將平移后的坐標數據更新到裂縫骨架L k,n2自加1,重復步驟(4),否則轉到步驟(1)。
(5)結束裂縫骨架平移算法。
通過上節的裂縫骨架提取裂縫,完整目標結果如圖7所示。

圖7 裂縫完整目標提取Fig.7 Extraction of crack complete target
為了驗證本文算法的正確性,取4組真實的巖心CT圖像作為實驗數據,實驗結果如圖8所示。其中圖8(a)表示在真實環境下存在交叉裂縫的巖心CT圖像;圖8(b)是將圖8(a)經過閾值分割、去噪等形態學操作提取裂縫的結果;圖8(c)是由本文算法對圖8(b)處理的結果。

圖8 實驗結果Fig.8 Experimental result
由上述實驗結果可知,本文算法能夠在不影響裂縫本身特征的情況下將交叉裂縫進行分離,并且分離結果符合現實預期結果,為后續裂縫統計參數分析提供更可靠的數據支撐。
傳統裂縫提取算法在遇到交叉裂縫的情況下,無法進行有效的處理。為此本文提出了一種基于Freeman鏈碼的交叉裂縫分離算法。該算法加入了概率統計的因素,使追蹤裂縫的過程更加平滑;使用距離約束達到去除圖像噪聲的效果;對分割錯誤的裂縫進行了合并處理,減少了過分割情況的出現。實驗結果表明,基于Freeman鏈碼的交叉裂縫算法對交叉裂縫的分割有著良好的效果,且算法計算量小、抗噪性強,適于圖像的實時處理,并為巖心地質裂縫的參數計算提供了更加精密的計算方式。