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主要优点:

  1. 生成的超像素如同细胞一般紧凑整齐,邻域特征比较容易表达。这样基于像素的方法可以比较容易的改造为基于超像素的方法。
  2. 不仅可以分割彩色图,也可以兼容分割灰度图。
  3. 需要设置的参数非常少,默认情况下只需要设置一个预分割的超像素的数量。
  4. 相比其他的超像素分割方法,SLIC在运行速度、生成超像素的紧凑度、轮廓保持方面都比较理想。

效果图

经过观察发现,在迭代至第10轮后,分割效果基本不再发生变化。

核心思想**

利用CIE-Lab 颜色空间来表示图像颜色信息,需要颜色空间转换。对应着图像中的每个像素,将其用一个由CIE-Lab 颜色空间和像素坐标组成的 5 维向量{ L,a,b,x,y} 表示。通过向量距离来度量两个像素的相似性.

其中,像素相似性将与向量距离成反比。

算法步骤

基本流程

算法首先生成K个种子点,然后在每个种子点的周围空间里搜索距离该种子点最近的若干像素,将他们归为与该种子点一类,直到所有像素点都归类完毕。然后计算这K个超像素里所有像素点的平均向量值,重新得到K个聚类中心,然后再以这K个中心去搜索其周围与其最为相似的若干像素,所有像素都归类完后重新得到K个超像素,更新聚类中心,再次迭代,如此反复直到收敛。

具体步骤

  1. 初始化图像分割块。根据超参数生成K个种子点,计算种子点到所有像素的梯度值,搜索每个种子点周围空间里距离该点的最近的像素点。将各个像素分类。

    步距设置为:\(S=\sqrt{\frac{N}{K}}\) 。N是像素边,K是种子点个数

  2. 初始化聚类中心。将所有像素归类,计算领域内像素与种子间的距离,取最小距离作为聚类中心。

距离计算公式如下:

\[d_c=\sqrt{(l_j-l_i)^2+(a_j-a_i)^2+(b_j-b_i)^2} \]

\[d_s=\sqrt{(x_j-x_i)^2+(y_j-y_i)^2} \]

\[D'=\sqrt{(\frac{d_c}{N_c})^2+(\frac{d_s}{N_s})^2} \]

其中,\(N_S=S=\sqrt{\frac{N}{K}}\)。最后一步有一个归一化的作用。因为LAB是图像的空间信息,而XY表示的是像素的空间信息,因此我们需要归一化以统一量纲。

  1. 计算聚类中心到领域内所有像素点的距离。刷新原有的K个聚类重心点,再以刷新后的收敛中心点去搜索其周围与其相似度最高的点。

  2. 重新聚类,更新每个像素点所属的图像块,将同一个图像块的像素点取平均,得到新的聚类中心。

  3. 重复前面的步骤,直到两次聚类中心的距离小于某个阈值。

算法评价

优点:

  1. 聚类结果紧凑整齐且邻域特征明显。

  2. 可处理彩色图和灰度图

  3. 只需一个超参数。

  4. 运行速度较快。

缺点:

因为对边缘的保持使用位置限制,导致超像素和图像边缘的契合度变差。

posted @ 2020-05-18 23:06  少年笔谈  阅读(1534)  评论(1编辑  收藏  举报