SLIC聚类算法
参考博客:图像处理: 超像素(superpixels)分割 SLIC算法
原理
超像素概念是2003年Xiaofeng Ren提出和发展起来的图像分割技术,是指具有相似纹理、颜色、亮度等特征的相邻像素构成的有一定视觉意义的不规则像素块。它利用像素之间特征的相似性将像素分组,用少量的超像素代替大量的像素来表达图片特征,很大程度上降低了图像后处理的复杂度,所以通常作为分割算法的预处理步骤。
常见的超像素分割方法包括: Graph-based 、NCut 、Turbopixel 、 Quick-shift 、 Graph-cut a、Graph-cut b 以及 SLIC 。
SLIC算法
其中,SLIC(simple linear iterativeclustering),即 简单线性迭代聚类 。 它是2010年提出的一种思想简单、实现方便的算法,将彩色图像转化为CIELAB颜色空间和XY坐标下的5维特征向量,然后对5维特征向量构造距离度量标准,对图像像素进行局部聚类的过程。SLIC聚类不但可以处理RGB图像,还能兼容处理灰度图.
SLIC主要优点:
- 生成的超像素如同细胞一般紧凑整齐,邻域特征比较容易表达。这样基于像素的方法可以比较容易的改造为基于超像素的方法。
- 不仅可以分割彩色图,也可以兼容分割灰度图。
- 需要设置的参数非常少,默认情况下只需要设置一个预分割的超像素的数量。
- 相比其他的超像素分割方法,SLIC在运行速度、生成超像素的紧凑度、轮廓保持方面都比较理想。
效果图
经过观察发现,在迭代至第10轮后,分割效果基本不再发生变化。
核心思想**
利用CIE-Lab 颜色空间来表示图像颜色信息,需要颜色空间转换。对应着图像中的每个像素,将其用一个由CIE-Lab 颜色空间和像素坐标组成的 5 维向量{ L,a,b,x,y} 表示。通过向量距离来度量两个像素的相似性.
其中,像素相似性将与向量距离成反比。
算法步骤
基本流程
算法首先生成K个种子点,然后在每个种子点的周围空间里搜索距离该种子点最近的若干像素,将他们归为与该种子点一类,直到所有像素点都归类完毕。然后计算这K个超像素里所有像素点的平均向量值,重新得到K个聚类中心,然后再以这K个中心去搜索其周围与其最为相似的若干像素,所有像素都归类完后重新得到K个超像素,更新聚类中心,再次迭代,如此反复直到收敛。
具体步骤
-
初始化图像分割块。根据超参数生成K个种子点,计算种子点到所有像素的梯度值,搜索每个种子点周围空间里距离该点的最近的像素点。将各个像素分类。
步距设置为:\(S=\sqrt{\frac{N}{K}}\) 。N是像素边,K是种子点个数
-
初始化聚类中心。将所有像素归类,计算领域内像素与种子间的距离,取最小距离作为聚类中心。
距离计算公式如下:
其中,\(N_S=S=\sqrt{\frac{N}{K}}\)。最后一步有一个归一化的作用。因为LAB是图像的空间信息,而XY表示的是像素的空间信息,因此我们需要归一化以统一量纲。
-
计算聚类中心到领域内所有像素点的距离。刷新原有的K个聚类重心点,再以刷新后的收敛中心点去搜索其周围与其相似度最高的点。
-
重新聚类,更新每个像素点所属的图像块,将同一个图像块的像素点取平均,得到新的聚类中心。
-
重复前面的步骤,直到两次聚类中心的距离小于某个阈值。
算法评价
优点:
-
聚类结果紧凑整齐且邻域特征明显。
-
可处理彩色图和灰度图
-
只需一个超参数。
-
运行速度较快。
缺点:
因为对边缘的保持使用位置限制,导致超像素和图像边缘的契合度变差。