燕 楊 1,2,王云吉 2
(1.長春師范學院計算機科學與技術學院,吉林長春 130032;2.吉林大學通信工程學院,吉林長春 130022)
分水嶺算法是基于形態學的圖像分割方法,其分割特點為定位精確和分割圖像邊緣準確,在圖像分割領域得到了廣泛的應用。在許多實際情況下,我們要分割圖像,但無法從背景圖像中獲得有用信息。分水嶺算法在這方面往往是有效的,該算法可以將圖像中的邊緣轉化為“山脈”,將均勻區域轉化為“山谷”以便分隔目標。分水嶺算法先計算灰度圖像的梯度,讓亮度值低的點(山谷)、山脊對應的邊緣(山頭)同時形成,然后從指定點開始持續“灌注”盆地,直到這些區域鏈接在一起。這種方法產生的標記可以把各個區域合并到一起,合并后的區域又通過“聚集”的方式進行分割,好像圖像被“填充”起來一樣。與指示點相連的盆地就為指示點“所擁有”,從而得到被分割成相應的標記區域的圖像。分水嶺算法允許用戶來標記目標某個部分為目標,或背景的某個部分為背景。用戶也可以通過畫一條簡單的線,告知分水嶺算法把這些點組合起來。分水嶺算法就會通過“擁有”邊沿定義的山谷來分割圖像。
分水嶺算法定位精確且分割細致,對微弱的物體邊緣響應比較敏感,能確保得到目標區域封閉連續邊緣。但物體表面一些細微的灰度變化以及圖像中的噪聲干擾等因素皆會導致對圖像過度分割的產生,從而產生過多無用的邊緣信息。
本文在對分水嶺算法進行了深入的研究的基礎上針對其過分割的問題提出改進:使用區域合并方法限制允許出現的區域的數目,這樣不僅可以有效地抑制過分割問題,還能較好地分割出圖像中的目標區域,以達到提取圖像有效邊緣信息的目的。
分水嶺分割方法是基于拓撲理論的形態學分割方法,它的基本概念是將圖像看成地形學上被水覆蓋的自然地貌,圖像中的每一點像素的灰度值表示這一點海拔的高度,其中每一個局部極小值和它所影響的區域稱為集水盆,集水盆的邊界形成了分水嶺[1];其思想和形成可以通過模擬“溢流”的過程來說明:首先,在各個極小區域的底部打一個小孔,讓水從孔中溢出,慢慢浸沒極小區域周圍的區域,這樣各個極小區域所波及的范圍就是相應的集水盆,各個不同區域的水相連時的邊界,就是想要獲取的分水嶺[2]。
分水嶺的經典算法是L.Vincent提出的模擬沉浸算法,其計算過程是一個迭代標注過程。在這個算法中兩個步驟,分別是排序過程和淹沒過程[3];首先對各個像素的灰度級進行低到高排序,然后在從低到高實施浸沒的過程中,對各個局部極小值在h階-高度的影響域采用FIFO(先進先出)結構來進行判斷和標注[4]。
設hmin和hmax是灰度圖像I的最低灰度和最高灰度,Th(I)表示灰度值小于等于閾值h的所有像素,即Th(I)={p|I(p)≤h}。M1,M2,…,MR為圖像中的局部最小點,即低洼。C(Mi)表示與低洼Mi相對應的集水盆地。Ch(Mi)表示C(Mi)的一個子集,它由該集水盆地中灰度值小于等于h的所有像素組成,即Ch(Mi)=C(Mi)∩Th(I)。minh(I)表示灰度值等于h的所有局部最小值。
令C[h]表示所有集水盆地中灰度值小于等于閾值h的像素集合,即:
那么,C[hmax]就是所有集水盆地的并集。顯然,C[h-1]是Th(I)的一個子集。
假設已經得到閾值h-1下的C[h-1],現在需要從C[h-1]獲得C[h]。若Y為包含于Th(I)的一個連通成分,則Y與C[h-1]的交集有以下三種可能:(1)Y∩C[h-1]為空;(2)Y∩C[h-1]不為空且包含C[h-1]中的一個連通分量;(3)Y∩C[h-1]不為空且包含C[h-1]中的多個連通分量。
于是,C[h]就包含對C[h-1]中的各集水盆地在水平h下擴展得到的區域以及水平h下新出現的低洼。模擬沉浸法將C[hmin]初始化為Thmin(I),從最小灰度hmin開始,逐灰度級由C[h-1]構造出C[h],直到hmax,此時,得到的C[hmax]就是所需標記的集水盆地。其他不屬于任何一個集水盆地的點就是分水線點,通過在圖像中求C[hmax]的補集可以得到[5]。
利用上述傳統方法經常會因為噪聲的干擾和梯度的局部不規則性影響而造成過度分割。如對圖1使用傳統算法得到的實驗結果如圖2所示,圖2中的過度分割產生了很多無關的邊緣信息,過多的無關信息讓結果沒有意義。

圖1 原圖像

圖2 使用傳統分水嶺分割算法得到的結果
利用區域合并的方法來限制出現的區域的數目可以有效解決該問題。控制過度分割,我們將標記作為基礎。本文以Opencv中的函數cvWatershed(const Mat&image,Mat&markers)為例進行說明。markers即是輸入矩陣也是輸出矩陣,大小與image大小相同。使用該函數時,在markers矩陣中粗略指定兩種以上區域,該區域為1個點以上的連通點集,并用不同的正整數(1,2,3…)標記。這些區域可以用cvFindContour(),和cvDrawContour()標記。用戶或算法可以通過畫一條簡單的線,有效地告知分水嶺算法把這些點組合起來。markers矩陣其他區域為0。調用cvWatered()函數后,markers矩陣中所有為0的部分被重新標記為正整數,或為-1,-1代表筑起來的壩。
標記是圖像的連通分量,分為內部標記和外部標記,內部標記與目標體相關,外部標記與背景相關。圖像中存在的許多隱含的極小值是導致圖2過度分割的原因之一,因為這些區域都很小,所以這些值中有很多是沒有意義的細節。此時將圖像用平滑濾波器過濾,將這些對圖像產生影響的極小的無關細節降到最少,然后假定在這種情況下,把內部標記定義成:(1)區域中的點組成的一個連通分量;(2)這個連通分量中點的相同灰度值;(3)被海拔更高的點包圍起來的區域,然后對經過平滑處理后的圖像進行分水嶺分割,并將這些得到的分水線定義成外部標記,將定義局部最小值為內部標記。這時,沿著分水線的點就是相對理想的背景選擇點,因為這些點都經過了相鄰的標記間的最頂點。
外部標記有效地將圖像分割成包含一個唯一內部標記和部分背景的單獨區域,并對這些單獨的區域依次使用分水嶺分割算法,這個操作在求得平滑后圖像的梯度之后進行。使用這種方法得到的結果如圖3所示,與圖2相比較效果明顯改善,原圖像中的樓體、路燈、樹枝、車輛都相對圖2獲得更多、更有意義的邊緣提取結果。

圖3 使用改進分水嶺分割算法得到的結果
本文利用區域合并改進了分水嶺的傳統算法,實現了既可以有效地抑制噪聲,又達到了增強圖像的目的,解決了兩者之間平衡的矛盾,得到了相對較好的效果。我們的實驗樣本圖像從彩色風景圖像、彩色建筑物圖像、彩色人臉圖像中選取,在這些圖像中實施本文算法抑制過分割效果較為明顯,但在醫學圖像等灰度圖像中算法效果有待進一步改善。
[1]徐奕奕,劉智琦,劉琦.基于改進的分水嶺算法圖像分割方法研究[J].計算機仿真,2011(9):272-274.
[2]周小紅,蔚立磊,王國權.基于分水嶺算法的圖像分割方法研究[J].計算機仿真,2009(5):255-258.
[3]韓明.基于單目視覺的顆粒粒度現場檢測技術研究[D].綿陽:西南科技大學,2011.
[4]吳德.基于圖像處理的膠囊檢測系統的研究[D].廣州:廣東工業大學,2011.
[5]GaryBradski,Adrian Kaebler.學習OpenCV[M].于仕琪,劉瑞禎,譯.北京:清華大學出版社,2009:328.