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