超像素分割算法研究:SLIC分割算法原理讲解
簡(jiǎn)介:最近項(xiàng)目使用到了超像素分割,因此順道研究了以下SLIC這一算法。超像素分割這類low-level vision問(wèn)題已經(jīng)在CVPR,ICCV這種頂級(jí)會(huì)議上逐漸銷聲匿跡,越來(lái)越流行的learning method漸漸占據(jù)了這些頂級(jí)會(huì)議90%的篇幅。本文講解的SLIC是2010年提出的一種十分簡(jiǎn)單的超分辨分割算法,原理簡(jiǎn)單、便于實(shí)現(xiàn)。
一.SLIC(simple linear iterative clustering)原理分析
初始化種子點(diǎn)(聚類中心):按照設(shè)定的超像素個(gè)數(shù),在圖像內(nèi)均勻的分配種子點(diǎn)。假設(shè)圖片總共有 N 個(gè)像素點(diǎn),預(yù)分割為 K 個(gè)相同尺寸的超像素,那么每個(gè)超像素的大小為N/ K ,則相鄰種子點(diǎn)的距離(步長(zhǎng))近似為S=sqrt(N/K)。
在種子點(diǎn)的n*n鄰域內(nèi)重新選擇種子點(diǎn)(一般取n=3)。具體方法為:計(jì)算該鄰域內(nèi)所有像素點(diǎn)的梯度值,將種子點(diǎn)移到該鄰域內(nèi)梯度最小的地方。這樣做的目的是為了避免種子點(diǎn)落在梯度較大的輪廓邊界上,以免影響后續(xù)聚類效果。
在每個(gè)種子點(diǎn)周圍的鄰域內(nèi)為每個(gè)像素點(diǎn)分配類標(biāo)簽(即屬于哪個(gè)聚類中心)。和標(biāo)準(zhǔn)的k-means在整張圖中搜索不同,SLIC的搜索范圍限制為2S2S,可以加速算法收斂,如下圖。在此注意一點(diǎn):期望的超像素尺寸為SS,但是搜索的范圍是2S*2S。
距離度量。包括顏色距離和空間距離。對(duì)于每個(gè)搜索到的像素點(diǎn),分別計(jì)算它和該種子點(diǎn)的距離。距離計(jì)算方法如下:
其中,dc代表顏色距離,ds代表空間距離,Ns是類內(nèi)最大空間距離,定義為Ns=S=sqrt(N/K),適用于每個(gè)聚類。最大的顏色距離Nc既隨圖片不同而不同,也隨聚類不同而不同,所以我們?nèi)∫粋€(gè)固定常數(shù)m(取值范圍[1,40],一般取10)代替。最終的距離度量D’如下:
由于每個(gè)像素點(diǎn)都會(huì)被多個(gè)種子點(diǎn)搜索到,所以每個(gè)像素點(diǎn)都會(huì)有一個(gè)與周圍種子點(diǎn)的距離,取最小值對(duì)應(yīng)的種子點(diǎn)作為該像素點(diǎn)的聚類中心。
迭代優(yōu)化。理論上上述步驟不斷迭代直到誤差收斂(可以理解為每個(gè)像素點(diǎn)聚類中心不再發(fā)生變化為止),實(shí)踐發(fā)現(xiàn)10次迭代對(duì)絕大部分圖片都可以得到較理想效果,所以一般迭代次數(shù)取10。
增強(qiáng)連通性。經(jīng)過(guò)上述迭代優(yōu)化可能出現(xiàn)以下瑕疵:出現(xiàn)多連通情況、超像素尺寸過(guò)小,單個(gè)超像素被切割成多個(gè)不連續(xù)超像素等,這些情況可以通過(guò)增強(qiáng)連通性解決。主要思路是:新建一張標(biāo)記表,表內(nèi)元素均為-1,按照“Z”型走向(從左到右,從上到下順序)將不連續(xù)的超像素、尺寸過(guò)小超像素重新分配給鄰近的超像素,遍歷過(guò)的像素點(diǎn)分配給相應(yīng)的標(biāo)簽,直到所有點(diǎn)遍歷完畢為止。
二.偽算法描述
/? Initialization ?/ Initialize cluster centers Ck = [lk , ak , bk , xk , yk ]T by sampling pixels at regular grid steps S. Move cluster centers to the lowest gradient position in a 3 × 3 neighborhood. Set label l(i) = ?1 for each pixel i. Set distance d(i) = ∞ for each pixel i.repeat /? Assignment ?/ for each cluster center Ck dofor each pixel i in a 2S × 2S region around Ck do Compute the distance D between Ck and i.if D < d(i) thenset d(i) = Dset l(i) = k end ifend for end for/? Update ?/ Compute new cluster centers. Compute residual error E. until E ≤ threshold三.參考博文
1.https://github.com/laixintao/slic-python-implementation
2.https://blog.csdn.net/zhj_matlab/article/details/52986700
3.https://blog.csdn.net/electech6/article/details/45509779
總結(jié)
以上是生活随笔為你收集整理的超像素分割算法研究:SLIC分割算法原理讲解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux:linux终端命令关闭pyc
- 下一篇: 幅频特性曲线protues_短学期--功