郭昕剛,王 佳,屈諾希,程 超
(長春工業(yè)大學計算機科學與工程學院,吉林長春130000)
圖像分割是一種將圖像分成各具特性互不重疊的技術(shù)過程,它是人工智能和計算機視覺中最基礎(chǔ)的預處理手段,圖像分割的好壞會直接決定圖像融合和圖像識別的精度[1]。在文獻[2]中,Ren等人首次提出了超像素的概念,其目的是為了將具有相似顏色和輪廓等低級語義信息的像素歸為一類,以便于將點集問題轉(zhuǎn)成區(qū)域集問題[3],來降低計算量,改善后續(xù)工作的處理效率?,F(xiàn)階段,很多人將超像素方法和邊緣檢測算法結(jié)合在一起,構(gòu)成具有較好邊界粘附性的超像素分割圖[4]。文獻[11]中所提出的Canny SLIC算法就是利用Canny算子檢測出來的邊緣信息,來進行SLIC超像素分割的,從中可以看出Canny算子檢測出來的邊緣信息能夠決定超像素與圖像邊界之間的粘附性。而邊緣檢測,也是圖像處理中最重要的過程之一。許多傳統(tǒng)的邊緣檢測算法在科研中也會被經(jīng)常使用,像Sobel、Prewitt、Canny等。其中最常使用的是Canny邊緣檢測算法[5],此算法與其它傳統(tǒng)的邊緣檢測算法相比,其性能各方面都是最好的,并且許多領(lǐng)域的研究專家都在Canny算子的基礎(chǔ)上提出了各種改進的邊緣檢測算法。如Er-sen li對圖像梯度幅值的計算和OTSU邊緣自動閾值選取的方法做出了改進,在一定程度上取得了良好的成果[6]。而對于傳統(tǒng)的Canny SLIC算法,使用的傳統(tǒng)的Canny邊緣檢測算子抗噪能力較差,易將弱邊緣信息識別成噪聲,從而導致Canny SLIC算法產(chǎn)生的分割圖中部分邊緣的粘附性變差。
為此,本文提出了一種基于梯度方向的Canny SLIC圖像分割算法。它是把利用邊緣和噪聲在梯度方向上的差異而改進的Canny算子和SLIC算法相結(jié)合,來保護圖像的弱邊緣信息并提取出完整的輪廓,最后再使用六邊形來描繪超像素,從而生成令人滿意的超像素分割圖。
1986年,Canny提出了Canny邊緣檢測算法和最佳邊緣檢測的三個評估指標:低出錯率、最優(yōu)定位和最小響應[7]。傳統(tǒng)的Canny邊緣檢測算法分為四步:
第一步是圖像去噪。由于Canny算法對噪聲十分敏感,所以為了防止噪聲引起錯誤檢測,要先使用二維高斯函數(shù)來消除噪聲。
(1)
在(1)式中:σ為高斯濾波器的參量,它是用來控制濾波器模糊圖像的程度。σ越小,濾波器定位性越好、信噪比越低。反之,濾波器定位性越差,信噪比越高。因此,要結(jié)合實際情況,合理選擇σ。
第二步是計算梯度特性。在圖像中,邊緣可以指向各個方向,因此傳統(tǒng)的Canny邊緣檢測算法采用邊緣差分算子來計算2×2鄰域內(nèi)各像素點的水平和垂直方向的梯度,從而獲取梯度的幅值圖像G和方向圖像θ。其中,點(m,n)處的水平偏導數(shù)Gx(m,n)和垂直偏導數(shù)Gy(m,n)采用Solbel算子來計算,公式如下
Gx(m,n)
(2)
Gy(m,n)
(3)
故此時點(m,n)處梯度的幅值和方向可由下式得出
(4)
(5)
其中θ∈{0°,45°,90°,135°},分別代表水平、垂直和兩個對角線等四個方向。由于邊緣灰度值變化明顯,所以通過計算圖像中所有像素點的梯度特性,可以得出可能的邊緣點。
第三步是非最大約束。它是一種只保留局部最大值的細化邊緣的方法。通常通過第二步得出來的梯度邊緣不止有一個像素寬,而是有多個像素寬,所以為了精確定位目標邊緣并保證每條邊的寬度為1像素,便采用非最大約束(NMS)來細化邊緣。在梯度幅值G中,為了計算更加準確,Canny算法會沿著種子點周圍八個梯度方向進行線性插值。
如果G(m,n)的強度大于梯度方向上的兩個插值結(jié)果,那就將點(m,n)標記為邊緣候選點。反之,就標記為非邊緣點。最終,通過NMS就能得到一個候選邊緣圖p。
第四步是滯后閾值。Canny邊緣檢測算法中最關(guān)鍵的環(huán)節(jié)是用滯后閾值檢測和連接邊緣,而使用滯后閾值要先選取高低兩個臨界值。在Canny算法進行完第三步非最大約束后,會產(chǎn)生候選邊緣圖p。在圖p中,如果像素點的梯度幅值超過高臨界值,則將此點標記為邊緣點;而如果像素點的梯度幅值低于低臨界值,則將此點標記為非邊緣點;而對于梯度幅值處于高低臨界值之間的像素點,就標記為邊緣候選點。最后,再根據(jù)邊緣之間的連通性,判斷此像素點的相鄰像素點中是否有邊緣點,若有,就把此點記為邊緣點。反之,記為非邊緣點。
2.2.1 SLIC
在2010年,Achanta和Shaji提出了SLIC超像素算法[8][9]。它復雜度低,實現(xiàn)簡單,速度快,被廣泛應用于圖像分割中。其實質(zhì)是一種局部的Kmeans聚類方法[10]。但它與kmeans聚類算法有所不同:SLIC算法只在每個聚類中心周圍2S×2S的區(qū)域內(nèi)搜索相似的像素點,而kmeans算法是在全局內(nèi)搜索相似的像素點。圖1、2展示了上述兩算法在搜索區(qū)域上的差別。
圖1 SLIC算法 圖2 kmeans算法
其次,SLIC算法將像素分組到一個五維的特征空間中,并將其分解成一個五維特征向量[l,a,b,x,y]。其中[l,a,b]是CIELAB顏色空間的分量,[x,y]是像素點的空間坐標。而在SLIC中,兩個像素之間的相似度是由它們之間的向量距離D來衡量的(D與相似度成反比)。其計算公式如下
(6)
(7)
(8)
2.2.2 傳統(tǒng)的Canny SLIC
傳統(tǒng)的Canny SLIC算法能夠?qū)?nèi)容敏感的輪廓信息給標注出來[11],產(chǎn)生保持較好邊界的超像素。首先它通過Canny算法檢測出圖像中的邊緣信息,然后在歐式距離中增加一個函數(shù)G(pi,cj)用來判斷某一像素是否為邊緣像素。若cj到pi的路徑中存在任何邊緣像素,則G(pi,cj)就等于邊緣像素對應的梯度值gl之和;反之,G(pi,cj)等于[]。相應數(shù)學公式定義如下:
(9)
(10)
在(9)式中r是歸一化常數(shù),能決定Canny邊緣檢測在D(pi,cj)中的相對貢獻量。其余變量皆為上文所述。在(10)式中,l(pi,cj)表示像素pi到cj的路徑中所有像素構(gòu)成的集合。G(l)則表示:如果l是邊緣像素,G(l)等于l點的梯度值;反之,G(l)等于0。
與傳統(tǒng)SLIC算法的步驟相比,Canny SLIC要先使用Canny邊緣檢測做初始化處理,計算出所有像素點的梯度值,然后隨機選取j個聚類中心,并以固定長度S來初始化每個聚類的中心cj。其次,為了不讓中心點選在較大邊緣或噪聲點處,選取中心點8鄰域范圍內(nèi)梯度值最小的點來作為新的中心點。緊接著設(shè)置兩個數(shù)組d(pi)和l(pi)分別用來存放像素點到聚類中心的最小距離和最小距離對應的中心類別標簽,并分別將其初始化為0和∞。最后在每個中心點cj周圍2S×2S區(qū)域內(nèi)為每個像素點pi分類,如果D(pi,cj)小于d(pi),就把D(pi,cj)賦值給d(pi),并將此聚類中心的標簽j存放到l(pi)中,重復迭代此過程,直至所有像素點pi被正確分類。
傳統(tǒng)的Canny SLIC算法是在傳統(tǒng)的Canny邊緣檢測算子的基礎(chǔ)上實現(xiàn)的,但傳統(tǒng)的Canny邊緣檢測算法存在很多缺陷。比如滯后雙閾值的選取,若通過人工來選取,很容易將雙閾值定高或定低,從而導致部分幅值低的弱邊緣被忽略。所以本文采用一種基于梯度方向的Canny邊緣檢測算法來改進Canny SLIC算法[12],從而使其對弱邊緣的分割精度更加完善。
在Canny邊緣檢測算法中,描述一個像素點的特性除了梯度的幅值之外,還有一個重要的信息量——梯度的方向。邊緣像素的梯度方向,通常是指向邊緣的法線方向,而干擾噪聲是沒有固定的方向。所以基于梯度方向的Canny算法能夠更好地識別弱邊緣區(qū)域,進而讓Canny SLIC算法能夠更好地分割出弱邊緣區(qū)域。
圖3 兩種算法的比較(矩形框出了兩種算法的部分區(qū)別)
3.1.1 算法原理
基于梯度方向的Canny算法它是在中心點的8鄰域范圍內(nèi),來進行邊緣檢測的(如圖4)。首先,在此算法中定義兩個參量Sm和Am。Sm是每個中心點0與其8鄰域內(nèi)各個像素點的連線,其數(shù)學表示為:Sm={(0,m)/m=1,….,8}。結(jié)合圖4,可以輕松理解:當中心點0與其鄰域內(nèi)某一點都處于同一類的邊緣上時,其連接Sm也處于此類的邊緣上。而Am表示中心點0與其鄰域內(nèi)某一點m的連線Sm的法線方向與此兩點的梯度均值方向的夾角的絕對值,此參量能夠辨識邊緣點和噪聲點的方向。當中心點0與其鄰域內(nèi)某一點都處在同一邊緣上時,Am的幅度值就會小于一個較小的值T;反之,對于敏感的噪聲點,其方向不固定,故Am的值就會很大。
圖4 基于梯度方向的Canny算法的原理圖
基于梯度方向的Canny算法工作流程如下:
1) 先搜索通過非最大約束得到的邊緣候選圖p,然后判斷p中任意一點p(m,n)的8鄰域內(nèi)有無其它邊緣候選點,若無,轉(zhuǎn)到第6步,否則:
3) 繼續(xù)在點p(m,n)的3×3鄰域內(nèi),搜尋沒有被記為邊緣點的邊緣候選點,并求其對應的Amt值。如果存在Amt 4) 將通過上述幾步獲取的鄰域中心p(m,n)及滿足Amt 5) 如果mt的3×3鄰域范圍內(nèi)有邊緣候選點,但是此點沒有被記為邊緣點,那就把該點記為邊緣點,然后再以該點為新的中心繼續(xù)連接,直到全部的中心點的3×3鄰域范圍內(nèi)沒有被標記的邊緣候選點,執(zhí)行第2步; 6) 繼續(xù)搜尋圖p,直到找到新的邊緣候選點,如果該點沒有被記為邊緣點,執(zhí)行第2步,否則再繼續(xù)搜尋其它點,直到不再有新的未被標記為邊緣點的邊緣候選點出現(xiàn)為止,算法結(jié)束。 基于梯度方向的Canny邊緣檢測算法,可以充分的將圖像中的弱邊緣區(qū)域識別出來,并有效的區(qū)分出弱邊緣點與噪聲點。將此算法與SLIC算法結(jié)合,能夠使SLIC具有更好的邊界約束力,進而分割出更加完整地超像素分割圖,且分割精度得到進一步提高。此外,本文將傳統(tǒng)的Canny SLIC算法中的參數(shù)r定義成某一聚類所對應的所有像素點的梯度值之和,公式如下 (11) 其中n為聚類中心cj的類別j,G(pi,cj)為式(10)所述。 基于梯度方向的Canny SLIC算法實現(xiàn)步驟如下: 1) 先在原始圖片上使用基于梯度方向的Canny 算法,計算出所有像素的梯度值和邊緣點;然后使用復數(shù)運算將檢測到的邊緣點從二維降至一維,來提高判斷某一像素點是否為邊緣點的速度; 3) 初始化兩個列表,分別用來存放像素點到聚類中心的最小距離和最小距離對應的中心類別標簽: 對每個像素設(shè)置類別數(shù)組l(pi)=-1; 對每個像素設(shè)置距離數(shù)組d(pi)=∞; 重復 4) 分組步驟: for每一個聚類中心cjdo for每一個像素點pi在中心點cj周圍2s×2s區(qū)域內(nèi)do 計算cj和pi之間的距離; if D(pi,cj) d(pi)=D(pi,cj) l(pi)=j end end end 迭代 計算并修正聚類中心cj; 計算并修正新聚類中心位置與先前聚類中心位置之間的殘差誤差E; Until E<=設(shè)定閾值。 實驗結(jié)果是在win7系統(tǒng)和matlab平臺上實現(xiàn)的,實驗所采用的數(shù)據(jù)集為公開數(shù)據(jù)集BSDS500,本節(jié)將從超像素分割圖和評價指標來分析本文算法。 圖5展示了本文算法在不同的超像素數(shù)量k和顏色權(quán)重m下的分割結(jié)果。圖像結(jié)果表明,本文算法與其它超像素算法一樣,m越大,超像素之間就越規(guī)整,m越小,超像素之間就越緊湊,對圖像邊界的依附性就越好。 圖5 基于梯度方向的Canny SLIC算法分割結(jié)果 圖5中,超像素數(shù)量k=[200,800,1000],顏色權(quán)重m=[8,10]。按列來:(a) k=200的分割結(jié)果;(b) k=800的分割結(jié)果;(c) k=1000的分割結(jié)果。 將基于梯度方向的Canny SLIC算法與傳統(tǒng)的Canny SLIC算法和SLIC算法,在BSDS500數(shù)據(jù)集的500幅圖像進行了分割比較。圖6是本文算法與傳統(tǒng)的Canny SLIC算法和SLIC算法的部分比較圖,舍棄傳統(tǒng)的正方形采用六邊形來描繪圖像,其可以使超像素更加貼合邊緣。從圖中可以看出傳統(tǒng)的Canny SLIC算法由于傳統(tǒng)的Canny邊緣檢測將弱邊緣點識別成噪聲,所以導致部分弱邊緣欠分割;而改進的Canny SLIC算法能將圖像中的弱邊緣點與噪聲點較準確地分割出來,使分割精度更加貼合真值(groundTruth)。 圖6 三種算法的超像素分割結(jié)果圖(K=600,m=10) 圖6中,(a)為本文算法分割結(jié)果;(b)為本文算法分割圖的部分放大圖;(c)為傳統(tǒng)的Canny SLIC算法分割結(jié)果;(d)為SLIC算法分割結(jié)果。 超像素分割圖是從人的視覺上來反映分割結(jié)果的優(yōu)劣程度,而超像素分割方法的性能指標是從有效性上來反應圖像分割結(jié)果的優(yōu)劣程度[15]。為了檢驗本文算法的分割有效性,采用常用的性能評價指標邊緣召回率BR和欠分割錯誤率UE[16]。BR表示超像素分割邊界在一個小鄰域內(nèi)檢測到的真值邊界的分數(shù),其數(shù)學定義如下 (12) 其中,b(s)表示所用算法產(chǎn)生的超像素邊緣分割結(jié)果,b(g)表示手工分割的邊緣真值,函數(shù)I(·)是用來判斷算法產(chǎn)生的超像素邊界點是否在b(g)中的像素θ的區(qū)域內(nèi),A(·)表示每塊超像素分割區(qū)域的面積。 而UE是用來衡量算法生成的超像素超出超像素真值范圍的程度,其數(shù)學表示為 (13) 其中,A(·)表示每塊超像素區(qū)域的面積,gm表示手工分割的邊緣真值,Sn為生成的超像素塊。本文算法的兩種分割性能的評價標準如圖6:通過圖6可以看出基于梯度方向的Canny SLIC算法對測試庫中的數(shù)據(jù)集分割效果是準確的。 圖7 邊界召回率BR(A)和欠分割錯誤率UE(B)的趨勢圖 圖7中,BR越高,UE越小,分割結(jié)果越貼合邊界。 本文提出的基于梯度方向的Canny SLIC算法,能夠很好地解決弱邊緣區(qū)域的邊界依附性以及超像素形狀規(guī)則問題。它通過基于梯度方向的Canny邊緣檢測算法,得到包含弱邊緣信息的清晰邊緣像素點,然后使用復數(shù)運算將檢測到的邊緣點從二維降至一維,來提高SLIC判斷某一像素點是否為基于梯度方向的Canny算法檢測出來的邊緣點的速度,最后將邊緣強度加入到歐式距離中,進行聚類。實驗數(shù)據(jù)表明,本文算法與傳統(tǒng)算法相比有效地提高了圖像弱邊緣信息的分割精度,為圖像分割的進一步發(fā)展奠定了基礎(chǔ)。3.2 基于梯度方向的Canny SLIC的算法實現(xiàn)
4 實驗結(jié)果分析
4.1 實驗結(jié)果圖分析
4.2 評價指標
5 總結(jié)