数字图像处理
本篇包括以下算法的原理部分:
- 简单线性迭代聚类(SLIC)
SLIC
代码详见 Learn-DIP 仓库中对应的文件。
除了使用一般的聚类算法(如 K-Means)分割图像外,使用超像素进行区域分割也是常用的算法。
超像素的思想是,通过将像素组合到比各个像素更有感知意义的原始区域来取代标准的像素网格,主要目的是减少计算的开销,并通过减少不相关的细节来提高分割算法的性能。
超像素就是要用很少的像素来表示一张图片,但超像素表示的一个重要的需求就是对边界的附着性,在超像素图像中,必须保持我们感兴趣的区域,也就是不同显著的前景区域直接有明确的边界,不然就会影响我们对图片内内容的理解。
在超像素领域比较经典的算法就是 简单线性迭代聚类(SLIC) 法。SLIC 观测通常使用颜色量和空间坐标构成的 5 维向量作为计算的单元。以 RGB 颜色空间为例:
其中 表示像素的三个颜色分量, 则是像素的空间坐标。令 表示所需要的像素总数。则初始化超像素中心 为对图像以间距 单位的规则网络取样得到。初始的聚类中心要移动到每个中心周围 3x3 邻域的最小梯度位置,后续通过多步计算优化该位置,具体的算法如下:
- 初始化:以规则网络步长 对图像取样,计算初始的超像素聚类中心 。将聚类的中心移动至 3x3 邻域中最小梯度的位置,对于图像中每个像素位置 ,设置标签 和距离 。
- 将样本分配给聚类中心:对于每个聚类中心 。在一个关于 的 2sx2s 邻域中,计算 与每个像素 之间的距离 ,然后对于每个 ,若 ,则令 和 。
- 更新聚类中心:令 表示图像中具有标记 的像素集,更新 ,
其中 是集合 中的像素数, 和前面的表示一致。
- 收敛性计算:计算当前步骤和前述步骤中平均向量之间的差的欧几里得范数。计算残差,当小于某个值时,停止循环。否则回到步骤 2。
- 后处理超像素区域:将每个区域 中的所有像素替换成他们的平均值
伪代码的表述如下:
1 | /∗ Initialization ∗/ |
关于其中距离 的计算,有很多种方法,下面介绍一种经典的距离计算方法:由于我们使用的单元是像素点空间和颜色的集合,直接使用欧式距离是没有意义的,因为不同的坐标系的轴尺度不同,并且是不相关的。所以空间和颜色距离必须分开处理。
其中 和 是 的最大期望。最大空间距离应对应于取样间隔,即 而通常 会被设置为一个常数。