SLIC算法是simple linear iterative cluster的简称,该算法⽤来⽣成超像素(superpixel)。检索式
基本思想
算法⼤致思想是这样的,将图像从RGB颜⾊空间转换到CIE-Lab颜⾊空间,对应每个像素的(L,a,b)颜⾊值和(x,y)坐标组成⼀个5维向量V[L,a,b,x,y],两个像素的相似性即可由它们的向量距离来度量,距离越⼤,相似性越⼩。 算法⾸先⽣成K个种⼦点,然后在每个种⼦点的周围空间⾥搜索距离该种⼦点最近的若⼲像素,将他们归为与该种⼦点⼀类,直到所有像素点都归类完毕。然后计算这K个超像素⾥所有像素点的平均向量值,重新得到K个聚类中⼼,然后再以这K 个中⼼去搜索其周围与其最为相似的若⼲像素,所有像素都归类完后重新得到K个超像素,更新聚类中⼼,再次迭代,如此反复直到收敛。怎么样,是不是感觉很像K-means聚类算法。
该算法接受⼀个参数K,⽤于指定⽣成的超像素数⽬。设原图有N个像素,则分割后每块超像素⼤致有N/K个像素,每块超像素的边长⼤致为S=[N/K]^0.5,开始我们每隔S个像素取⼀个聚类中⼼,然后以这个聚类中⼼的周围2S*2S为其搜索空间,与其最为相似的若⼲点即在此空间中搜寻。这⾥有⼀个问题,
毛小芳为了避免所选的聚类中⼼是边缘和噪声这样的不合理点,算法做了改进,在3*3的窗⼝中将聚类中⼼移动到梯度最⼩的区域,梯度定义为
布莱克斯科尔斯
G(x,y)=[V(x+1,y)-V(x-1,y)]^2+[V(x,y+1)-V(x,y-1)]^22010ema
这样就可以避免上⾯所说的情况。
因为L,a,b在CIE-Lab颜⾊空间,L,a,b的⼤⼩有限制,⽽图像尺⼨则没有限制,如果图⽚的尺⼨⽐较⼤,会造成衡量向量距离时空间距离(x,y)的影响过⼤,所以需要调制空间距离(x,y)的影响,所以需要对x,y进⾏normalize。改进向量距离的度量如下:秦之声文华奖
d_lab=[(Lk-Li)^2+(ak-ai)^2+(bk-bi)^2]^0.5
d_xy=[(Xi-Xk)^2+(Yk-Yi)^2]^0.5
Ds=d_lab+(m/S)*d_xy
泰州师专附属实验中学
m⽤来调整d_xy的权值,⼀般为1-20,在算法中设置为10。
最后可能出现⼀些⼩的区域d被标记为归属某⼀块超像素但却与这块超像素没有连接,这就需要把这块⼩区域d重新归类为与这块⼩区域d连接的最⼤的超像素中去,以保证每块超像素的完整。
算法流程
来看看效果吧: