劉曉龍,王任偉,陳 超
(內(nèi)江師范學院數(shù)學與信息科學學院,四川 內(nèi)江 641110)
圖片背景的復雜性、目標特征的多樣性、噪聲等因素會影響圖像分割的復雜程度,從而使圖像分割成為圖像處理中的難點?,F(xiàn)有的圖像分割方法眾多,如閾值法、數(shù)學形態(tài)學法、邊緣檢測法、基于區(qū)域處理的方法、蟻群算法、快速自適應狼群優(yōu)化算法[1]與二維最大熵的圖像分割算法[2]等,針對不同的圖像,其分割的效果都比較好,成為了目前比較受歡迎的方法。最常用的一種算法就是蟻群算法,蟻群算法是模擬螞蟻覓食行為的一種優(yōu)化算法,螞蟻在覓食的途中會釋放一種被稱為信息素的化學物質(zhì),如果其中一條路上的信息素比較多,那么后面的螞蟻選擇這條路的概率會很大。
然而,由于圖像分割目的不同的和圖像特征的差異,現(xiàn)有的方法還存在著很多的不足。例如閾值法,雖然這種方法運算速度很快,但是受噪聲的影響程度很大,往往會將噪聲作為目標來處理;邊緣檢測算子往往檢測到的邊緣不連續(xù)或邊緣不準確;數(shù)學形態(tài)學方法可以降低噪聲對圖像的影響程度,但是開、閉、腐蝕、膨脹等運算會造成圖像過于平滑,從而導致分割后圖像的不準確和圖像的細節(jié)丟失[3];傳統(tǒng)的蟻群算法出現(xiàn)停滯和早熟現(xiàn)象的幾率很大[4]。為了解決以上問題,本文提出了一種基于改進蟻群算法的圖像分割方法,改進了蟻群算法中的初始聚類中心、動態(tài)更新信息素濃度和參數(shù)變量等,提高了圖像分割的準確度,得到了理想的圖像分割結果,縮短了算法的運算時間。
閾值分割法就是在圖像處理中利用人為主觀的或者客觀的方法計算出灰度閾值,將灰度值根據(jù)閾值進行劃分,然后將像素進行歸類,這就是閾值分割法的基本思想。簡單地說,其原理就是把圖像的像素分為若干個類。因為閾值分割的實現(xiàn)原理簡單、計算量小、穩(wěn)定性好,所以在運用到圖像分割法時備受青睞。在圖像分割方法中,閾值分割是最早的一種分割方法,也是目前所有圖像分割中應用最廣泛的分割方法。閾值分割的優(yōu)點有很多,不像其他分割方法那么復雜,相對于其他方法來說,其運算速度快,而且它的分割方法是依據(jù)圖像最基本的屬性進行的,具有較高的成功率和可信度,在人工智能領域中運用的比較廣泛。
閾值分割的特點如下:首先,它最適用于圖像中多目標和背景的灰度級不同的情況;其二,閾值分割能夠極好的降低分析和處理步驟的復雜度;其三,閾值分割的方法能夠極大的壓縮數(shù)據(jù)量。閾值分割法在許多的圖像處理情況中都充當了圖像預處理的作用,如圖像分析、特征提取、模式識別等。根據(jù)目標的數(shù)量不同,可以選取單個閾值或多個閾值進行分割。
將圖像進行閾值化的主要目的是將各個像素按照灰度級編排好,通過設定出不同的特征閾值將圖像像素點的集合分為若干類,然后對這些像素集合進行聚類劃分,這樣就能得到每個子集像素與一個現(xiàn)實景物相對應的區(qū)域,并且可以保證各個區(qū)域內(nèi)的屬性達到極高的相似性,不同區(qū)域內(nèi)的屬性差異比較大。
圖像分割中的區(qū)域分割法與其他分割方法有著明顯的不同,其他的分割方法基本上都是基于像素的灰度進行閾值分割,但是區(qū)域分割是一種以區(qū)域作為基礎的分割方法。區(qū)域分割有兩種最主要的方法,一是區(qū)域擴張;二是排斥分割與融合。
區(qū)域擴張有三個步驟,首先是選擇一個適合的擴張起始點,然后確定出一個合理的區(qū)域擴張規(guī)則,最后就是給出停止擴張的條件。區(qū)域擴張法是從擴張點出發(fā),根據(jù)定義好的擴張規(guī)則開始擴張,直到到達停止擴張的條件為止,將圖像的子區(qū)域聚合成更大的區(qū)域的過程。圖像像素的灰度值、紋理和顏色等可以作為擴張出發(fā)點和相鄰區(qū)域的相似性判斷依據(jù)。區(qū)域生長可以是單個像素預期相鄰區(qū)域的灰度特征值相互比較來實現(xiàn)區(qū)域擴張,也可以將圖像分割成若干個小區(qū)域,比較相鄰小區(qū)域的相似性,如果兩個區(qū)域之間的相似性程度較高,就將它們合并。
區(qū)域排斥分割與融合同區(qū)域擴張有很多相似的地方,但區(qū)域排斥與融合是從一組擴張點開始擴張的,而不是一個。首先進行區(qū)域排斥分割,將圖等分成k份,然后將這k個區(qū)域再進行排斥分割,并且也是分割為k份。直到任意的若干份之間滿足相似性準則為止。排斥分割結束之后的結果中,一般會包含滿足相似性規(guī)則的鄰近區(qū)域,將這些區(qū)域進行融合。排斥分割與融合的操作順序是先排斥分割后融合,但是并不一定是所有分割結束后才開始融合。如果第一次分割結束后,有滿足相似性規(guī)則的鄰近區(qū)域的部分,就可以馬上開始融合。這樣的話,排斥分割與融合就可以被視為是“同時”進行的。
在圖像處理和計算機視覺中邊緣檢測是最基本的問題,因為在圖像分割中需要檢測出圖像中亮度變化比較明顯的像素點,而邊緣檢測恰恰就是能夠檢測出亮度變化最明顯的像素點的有效方法。在圖像中,可以通過像素的亮度變化來反映圖像屬性的重要變化。因此,要想將圖片更好的分割出來就需要判斷出像素點的變化規(guī)律。圖像深度上的不連續(xù)、表面方向的不連續(xù)、物質(zhì)特征的變化和背景的變化都是由于像素點亮度的明顯變化所引起的。在計算機視覺中,邊緣檢測是比較常用的算法,在特征向量的提取和區(qū)域分割等領域都有著廣泛的使用。
與邊緣有關的因素比較多,比如視角、像素的亮度和物質(zhì)的差異等,最容易處理的邊緣分割就是處理階梯邊緣。但自然界中所遇到的圖片往往都是不規(guī)則的、模糊的、目標邊緣附近有漫反射的等情況。
圖像邊緣檢測不但減少了較多影響不大的數(shù)據(jù),而且還消除了許多不相關的數(shù)據(jù),只保留了對于圖像比較重要的數(shù)據(jù),這樣就使得算法更簡單、更便于操作。邊緣檢測主要有兩種方法,一種是使用查找的方法,將圖像中一階導數(shù)的最大值和最小值尋找出來,然后利用最大值和最小值檢測圖像的邊界;另一種方法將找圖像二階導數(shù)中的零穿越尋找出來,然后檢測圖像的邊界。
圖像整體光照強度的變化不容易影響基于邊緣的檢測分析,所以許多圖像理解方法都將邊緣檢測分析作為基礎。圖像對比度在邊緣檢測中非常重要,圖像對比度反映了圖像在亮度上的差別,圖像亮度可以使增強圖像的邊界特征更明顯。目標邊界體現(xiàn)了圖像亮度的階梯變化。
通過對相鄰點進行差分處理可以使圖像的亮度變化更加明顯。通過差分處理水平方向上的相鄰點,可以檢測出圖像在垂直方向上的亮度變化,這種算子被稱為水平邊緣檢測算子。垂直算子可以檢測出水平方向的亮度變化,因而垂直邊緣檢測算子檢測的是水平邊緣。在本文中主要運用的是一階邊緣檢測,其中常用的算子如下:
Roberts邊緣檢測算子:一種最簡單的算子,是一種通過局部差分來尋找邊緣的算子,也可以說是用兩像素之差近似梯度的變化值來進行邊緣檢測的算子。
Prewitt邊緣檢測算子:這是一種一階微分算子,它是一種先求出圖像上下左右相鄰點的灰度差,再求出灰度差的極限值,再用極限值來檢測邊緣的一種算子。Prewitt算子的基本原理就是建立一個水平方向的邊緣檢測和一個垂直方向的邊緣檢測。
Sobel邊緣檢測算子:這是一種一階離散型差分算子,主要用來計算圖像像素亮度函數(shù)的梯度近似值,能夠?qū)ο袼匚恢玫挠绊戇M行加權,還引入了局部平均的算法,這樣就能夠很好地去除噪聲的影響。
蟻群算法是一種通過觀察螞蟻覓食行為而提出的仿生進化算法。在螞蟻覓食的時候,有多條路徑可以到達食物源,在最開始的時候,各條路徑上是沒有信息素的,因此剛開始螞蟻行走的路徑是隨機的,螞蟻在行走過程中會不斷釋放信息素來標識自己所行走的路線,隨著時間的推移,走在最短路徑上的螞蟻最先到達食物源,同時,在最短路徑上的螞蟻也最先將食物原路運回到出發(fā)點,螞蟻經(jīng)過的路徑上都會釋放出這種信息素,隨著時間的延長,該激素會不斷揮發(fā)。因為螞蟻在覓食的行徑路上會不停地釋放信息素,信息素濃度較高的那條路對后面的螞蟻的影響就越大,后面的螞蟻選擇該路徑的概率就越大,這樣就會使這條路上的螞蟻越來越多,信息素濃度也會變得越來越大。因此使得“信息素濃度”與“螞蟻數(shù)量”之間形成了正反饋的關系。最終,通過的螞蟻數(shù)量最多并且信息素濃度最高的那條路徑就是最短路徑。
圖像當中包含了目標、背景、邊界和噪聲等,要切割圖片,就先要對圖片進行分類,而分類的關鍵就是找出圖片中目標之間具有區(qū)別的特征量。圖像目標和圖像背景主要是靠像素灰度來區(qū)別的,所以依據(jù)像素灰度的不同進行聚類劃分是比較有效的。灰度在邊界點和噪音點很可能會發(fā)生突變,這種突變反映出邊界點與背景、目標區(qū)域區(qū)別的重要特征。先計算出灰度差閾值,再將各像素與灰度差閾值進行對比,如果比閾值小,那么就是我們所要提取的周邊像素的特征。
首先,將原始圖像G的每個像素g視為一只螞蟻,因為每只螞蟻都被視為以灰度、梯度和鄰域為特征的三維向量,因此,圖像分割就轉化為了具有不同特征的螞蟻搜索食物源的過程,若任何兩個像素gi到g的距離為dij,則dij為
其中,螞蟻的維數(shù)用m表示,這里m等于3,q是加權因子。
設r是像素灰度值聚類的半徑,φ作為螞蟻釋放的信息素,則
其中,gi選擇到gj路徑的概率為Piji,β(t)是啟發(fā)式引導函數(shù),α和β分別是對螞蟻選擇路徑的影響因子。表示為可行路徑,則有
螞蟻在移動過程中,各路徑上的信息素濃度會發(fā)生變化,通過一次循環(huán),每條路徑上信息素濃度都會發(fā)生變化,通過下式調(diào)整
△dij其中,ρ表示為路徑上已有信息素的衰減程度,△dij表示為每次循環(huán)路徑上的增量,△αkij表示第k只螞蟻在該次循環(huán)的路徑上所留下的信息素,不同路徑上的信息素的濃度會隨時間發(fā)生變化,每次循環(huán)之后路徑上的信息素也會不斷更新。
從上面?zhèn)鹘y(tǒng)蟻群算法的圖像分割模型可以看出,雖然傳統(tǒng)蟻群算法已經(jīng)被證明是一種有效的解決圖像分割的方法,但是還存在以下的不足[5]:
1)限于局部最優(yōu)解。對算法的解來說,傳統(tǒng)蟻群算法尋找的是一個有效的局部最優(yōu)解,而求解得到的不是全局最優(yōu)解。
2)求解算法中的停滯問題。算法開始時收斂速度很快,在算法求解的過程當中,迭代到特定的次數(shù)后,螞蟻也會在某個或某些局部最優(yōu)解的鄰域附近發(fā)生停滯。
3)搜索時間較長。盡管和其他算法相比,傳統(tǒng)的蟻群算法在迭代次數(shù)和解的質(zhì)量上都有一定的優(yōu)勢,但目前計算機的運算速度還不理想,搜索的時間還很長。雖然隨著計算機計算性能的提高、蟻群算法的并行性在一定程度上可以緩解這一問題,但是對于規(guī)模大且復雜的圖像分割模型,這還是一個急需解決的難題。
先用命令imread讀取原圖像,然后用命令rgb2gray將圖像轉化為灰度數(shù)字圖像并得到灰度圖像矩陣,將圖像中的每個像素Xi(i=1,2,…,N)看作是一只螞蟻,所以每只螞蟻都是具有灰度特征的一維矢量,圖像分割的過程就轉化成了具有不同特征矢量的螞蟻 i(i=1,2,…,N)尋找食物源的過程,而食物源即是圖像分割的最佳閾值T,如圖1所示。
圖1 改進的蟻群算法流程圖
改進的蟻群算法步驟如下:第一步,初始化相關參數(shù),確定信息素重要程度參數(shù)α,確定啟發(fā)式因子參數(shù)β,獲取最大螞蟻數(shù)目x,確定聚類半徑r,確定揮發(fā)系數(shù)ρ,確定信息素隨時間變化的系數(shù),初始化類集合中所有像素灰度值總和m為0,初始化類集合中所有像素個數(shù)為n為0,確定食物源中心(初始聚類中心)c為128;第二步,計算每只螞蟻i到食物源中心c的距離;第三步,更新類集合中每只螞蟻i與食物源c之間的距離di;第四步,計算t時刻每只螞蟻i在路徑上放置的信息濃度τi;第五步,計算每只螞蟻i與聚類中心c的相似度;第六步,更新類中每只螞蟻i的信息素濃度τi;第七步,更新每只螞蟻i與聚類中心c的相似度;第八步,計算每只螞蟻i到閾值集合的概率;Pi第九步,計算類間每只螞蟻i的灰度值的平均值得到最佳閾值T。
步驟一:初始化閾值。
為了減少大量無關的計算,加快算法的運行進程,初始閾值的設置只要合理即可,因此本文將初始閾值設置為256灰度級圖像中最大像素值256的一半,即初始化閾值(即食物源中心)c為128
c=128
步驟二:計算每只螞蟻i到食物源中心c的距離。
根據(jù)歐氏距離公式計算每只螞蟻i到實物源中心c的距離dj
步驟三:更新類集合中每只螞蟻i與食物源c之間的距離dj。
如果di小于等于螞蟻的聚集半徑r,則dj等于di
步驟四:計算t時刻每只螞蟻i在路徑上放置的信息濃度τi。
計算t時刻每只螞蟻i到初始食物中心c的路徑上的信息素濃度τi,若螞蟻i到初始閾值c的距離di小于等于r,則τi等于1,否則τi等于0
步驟五:計算每只螞蟻i與初始食物中心c的相似度ηi。
如果螞蟻i到初始食物中心c的距離di為0,那么螞蟻i與初始食物中心c的相似為1,否則螞蟻i與初始食物中心c的相似度ηi為
步驟六:更新類中每只螞蟻i的信息素濃度。
如果螞蟻i到初始食物中心c的距離di小于等于螞蟻的聚集半徑r,則將信息素濃度更新為(ρ是揮發(fā)系數(shù)),并記錄下位于螞蟻聚集半徑r內(nèi)的像素個數(shù)n
其中,參數(shù)ρ的設置起了至關重要的作用,可以使用以下方式設置合適參數(shù)值,精調(diào)諧參數(shù)[6]:對參數(shù)ρ使用小范圍的數(shù)值調(diào)諧獲得較好的數(shù)值,即ρ=0.9。
步驟七:更新每只螞蟻i與初始食物中心c的相似度。
如果螞蟻i與食物中心c的距離di小于螞蟻的聚集半徑r,那么新相似度等于原來的相似度
步驟八:計算每只螞蟻i到閾值集合的概率pi。
其中,α是與信息素濃度相關的重要程度參數(shù),β是啟發(fā)式因子參數(shù),是路徑集合。算法中參數(shù)α、β的設置起了非常重要的作用,決定了整個算法的收斂速度和搜索性能,可以使用粗調(diào)諧參數(shù)設置合適參數(shù)值,對參數(shù)α和β采用大范圍的數(shù)值調(diào)諧以獲得理想的值,即α=1,β=10。
步驟九:計算類間所有像素的灰度值的平均值T。
其中,如果pi小于p0,那么螞蟻i就會被歸為新的閾值集合內(nèi),所有歸入到新的閾值領域的閾值集合表示為。
通過一次迭代,每個類中的信息激素濃度都會發(fā)生變化。為了得到全局優(yōu)化的結果,降低算法的收斂速度,本文采用自適應調(diào)整信息激素濃度的方法為
式中:ρ是信息素隨時間變化的系數(shù);n是di≤r的時的像素數(shù)量;m是所有的像素總數(shù);△τi是通過一次迭代后路徑上信息素的改變量。
一般以固定的數(shù)值作為停止條件,但這樣會有很大的局限性和不確定性。比如設定的數(shù)值太小,那么會造成優(yōu)化不夠充分,可能得不到全局最優(yōu)解。如果設定的數(shù)值太大,會使運算速度減慢,極大地降低了運算效率。因此想出了動態(tài)自適應的方法來控制循環(huán),如下:
當上式滿足ε=0.01時,算法終止,反之繼續(xù)運行尋找最優(yōu)閾值。
本文采用Matlab R2014a進行仿真實驗。實驗取用了四張像素的卡通圖像分別記為原始圖像1、原始圖像2、原始圖像3、原始圖像4,分別為圖2到圖5的第一張圖。為了分析并驗證提出的改進蟻群算法的實際效果,采用了邊緣檢測算法、傳統(tǒng)蟻群算法、改進后的蟻群算法對4張原始圖片進行分割,分割的效果如圖2、圖3、圖4、圖5所示,其中,第2張圖片為對原始圖像進行Roberts邊緣檢測算子的分割結果,第3張圖片為對原始圖像進行Sobel邊緣檢測算子的分割結果,第4張圖片為對原始圖像進行Prewitt邊緣檢測算子的分割結果,第5張圖片為傳統(tǒng)蟻群算法(基本蟻群算法)的分割結果,第6張圖片為改進后蟻群算法的分割結果。前2種方法大體可以將目標圖像從背景中分割出來,但是在細微方面,卡通人物的分割效果不是很好,本文的方法能將圖像的細節(jié)部分分割的更加準確。
圖2 分割圖像結果1
圖2 分割圖像結果1
圖3 分割圖像結果2
圖4 分割圖像結果3
圖5 分割圖像結果4
為了體現(xiàn)改進后蟻群算法的優(yōu)越性,可以通過圖像的信息熵和算法的運算時間來客觀地分析和比較[7-8]。將圖像信息熵H,運算時間t(單位為s)作為實驗的結果來進行評判。圖像信息熵是一種圖像信息統(tǒng)計量,它反映了圖像信息量的多少,分割后的圖像信息熵值越大,說明圖像從源圖像得到的信息量越大,分割得到的圖像細節(jié)越豐富,分割后的總效果越好,本文中信息熵定義為
表1 邊緣檢測法(prewitt算子)
表2 邊緣檢測法(sobel算子)
表3 邊緣檢測法(roberts算子)
表4 傳統(tǒng)蟻群算法
表5 改進后的蟻群算法
從表1到表5得出本文改進蟻群算法的信息熵值最大,這說明了此算法從原始圖像中得到的信息量最大,分割效果最好,從運算時間上比較,本文所提出的算法運行時間更少,更加高效。
通過改進螞蟻信息素濃度的更新、初始聚類中心和參數(shù)的設置,提高了蟻群算法對圖像分割的精準度,獲得較好的圖像分割效果。從運算時間來看,本文改進后的蟻群算法比邊緣檢測算法縮短了大約58%,比傳統(tǒng)蟻群算法縮短了大約3%,極大地提高了運算效率。蟻群算法已經(jīng)越來越多地應用到圖像處理中,如何能更好的改進此算法并將其應用到實際問題中,將會是未來主要的研究方向。