(華北水利水電大學(xué)電力學(xué)院 河南 鄭州 450045)
超像素SLIC(simple linear iterativeclustering)即簡單的線性迭代聚類[1][2],是2003年提出和發(fā)展起來的圖像分割技術(shù),是指具有相似紋理、顏色、亮度等特征的相鄰像素構(gòu)成的有一定視覺意義的不規(guī)則像素塊。它利用像素之間特征的相似性將像素分組,用少量的超像素代替大量的像素來表達圖片特征,很大程度上降低了圖像后處理的復(fù)雜度,所以通常作為分割算法的預(yù)處理步驟。已經(jīng)廣泛用于圖像分割、目標(biāo)跟蹤、目標(biāo)識別等計算機視覺應(yīng)用。
SLIC是一種思想簡單、實現(xiàn)方便的算法[3],將彩色圖像轉(zhuǎn)化為CIELAB顏色空間和XY坐標(biāo)下的5維特征向量,然后對5維特征向量構(gòu)造距離度量標(biāo)準(zhǔn),對圖像像素進行局部聚類的過程。SLIC算法能生成緊湊、近似均勻的超像素,在運算速度,物體輪廓保持、超像素形狀方面具有較高的綜合評價,比較符合人們期望的分割效果。
K-means算法是經(jīng)典聚類算法之一,其優(yōu)化目標(biāo)函數(shù)是以各個數(shù)據(jù)到其聚類中心的距離,通過目標(biāo)函數(shù)達到最優(yōu)值進行迭代計算,是一種動態(tài)聚類算法,當(dāng)計算得到聚類中心達到穩(wěn)定亦或達到最小值算法停止,但其缺點是精度不高,其初始的聚類中心的選取對結(jié)果影響較大,因此直接使用K-means算法對圖像分割并不能達到理想的結(jié)果,如果在圖像處理中圖像的紋理變化不明顯,甚至無法達到準(zhǔn)確分割圖像的目的。而在于SLIC算法的結(jié)合過程中較大程度的改善這個問題,結(jié)果如下圖1所示。

圖一從左到右分別是:原圖、K-means聚類算法處理后圖片、經(jīng)典SLIC算法處理后圖片、SLIC算法優(yōu)化后處理圖片、聚類算法與超像素優(yōu)化算法結(jié)合后處理圖片
首先,論文提到圖像信息是取自于CIELAB空間而不是RGB空間,在論文中有相關(guān)的描述如下:CIELAB(color space is widely considered as perceptually uniform for small color space)。我們實際編程測試時也發(fā)現(xiàn)在相同的參數(shù)下,很明顯CIELAB空間的分割效果明顯要比RGB空間的規(guī)則很多。這個可以從LAB空間的球形模型得到闡釋。但是也不是說RGB空間的結(jié)果就完全不行,我們?nèi)绻m當(dāng)?shù)恼{(diào)大M參數(shù)的值,也能獲得不錯的結(jié)果。唯一不同的時,使用LAB空間在時間和空間上會稍微多一點。
根據(jù)以往研究,RGB2XYZ、RGB2LAB、DoRGBtoLABConversion三個函數(shù)[4][5],這是RGB空間轉(zhuǎn)換為LAB空間的算法,XYZ空間只是作為兩者轉(zhuǎn)換的中間體存在的,以往研究中采用了double類型數(shù)據(jù)來保存轉(zhuǎn)換的結(jié)果,這是嚴(yán)格意義上的轉(zhuǎn)換,但是在實際工程應(yīng)用中其運算時間將會隨著圖片的像素數(shù)的增加,其運算時間將會很大程度上的增加。8倍于原始圖像數(shù)據(jù)的額外的內(nèi)存占用在很多場景下將會無法使用,以及浮點計算的硬件屏障都會大大增加其運算時間,須想辦法降低這個內(nèi)存占用和復(fù)雜度。后續(xù)的編碼也證明這種轉(zhuǎn)換的精度損失對于結(jié)果的影響是完全在可以接受的范圍內(nèi)的。
在初始化聚類中心這一步驟,對應(yīng)的函數(shù)在GetKValues_LABXYZ函數(shù)中或者GetLABXYSeeds_ForGivenStepSize函數(shù)中,按照提供圖片的超像素的大小或者超像素的個數(shù)來均勻的分布取樣的XY位置和LAB的值,用vector來保存這些值,但是并沒有使用到vector的其高級特性,如果直接自己動態(tài)的分配內(nèi)存,在很多方面都有著特別的靈活性,而且封裝的東西效率很多情況下并不如意。從速度方面考慮,不使用源代碼中的double類型來保存中心點的坐標(biāo)而使用整形,在最后實驗結(jié)果證明可行。在GetKValues_LABXYZ最后,為了避免初始中心點落入圖像的邊緣或者噪音點,進行了一次重定位操作,即取初始中心點周邊3*3領(lǐng)域梯度值最小的那個像素為新的中心點。
在圖像梯度值這一步驟中,其原理為圖像的邊緣算法,對應(yīng)于源代碼的DetectLabEdges函數(shù),這里是在LAB空間的邊緣檢測,其為浮點計算。實際運用中,計算這個邊緣信息只用L通道的信息就足夠,L為圖像的亮度,表明一個像素的強度信息。鑒于前面使用的整形的數(shù)據(jù),這里給出一個簡單的單通道的邊緣計算方式,還支持In-Place操作,以及對圖像四周的一圈像素也進行計算。
通過聚類的方式迭代計算新的聚類中心,這里是優(yōu)化過程。迭代計算聚類中心是超像素分割的核心,而迭代的核心就是計算距離,因為SLIC的聚類的數(shù)據(jù)源是LAB和XY的綜合體,而LAB和XY各自的取值范圍不同,如果直接采用歐式距離計算,則會產(chǎn)生非常混亂的效果,因此,本文提出了如下三個計算公式:
