算法流程梳理如下:
原文下载:http://www.kev-smith.com/papers/SLIC_Superpixels.pdf
1、初始化:
- 通过对图像像素进行抽样,初始化k个聚类中心C_k ,步长为初始化聚类大小S,即将图像分为k个网格,取每个网格中心为初始聚类中心;
- 初始化每个像素点的标签lable为-1,每个像素点与聚类中心的距离distance为无穷大。
2、对初始化的聚类中心进行移动:
在该聚类中心相邻的8个像素点中,找到最小梯度方向,并将该点设为新的聚类中心,直至聚类中心不再变化。
3、Assignment Step
对每个聚类中心点C_k ,考虑以该点为中心的2S*2S的邻域范围中的所有像素点,计算每个点与C_k的距离D
(其中,m为设置的色彩与空间成分的比重参数)
如果D'<'distance(i),则赋值distance(i)= D,赋值该点标签lable为k值。
4、更新聚类中心
对k个聚类中心点进行更新,找到所有标签lable值为k的点,求其平均值,得到新的聚类中心。
5、计算剩余误差
计算剩余误差E,通过迭代3、4两步,直至E满足条件为止。
6、后处理步骤
用连通性将独立点归至超像素。
理解
在计算某点属于哪一超像素时,第一次考虑时,在C1的域中,会得到它属于超像素C1,但是当在C2的域中考虑时,会得到该点更可能归属于C2,那么该点就应该属于超像素C2。这样,计算完之后,大多数点都归属于最可能的超像素中。