scikit-image 中的 slic() 函数是一个功能强大且非常实用的工具,用于生成超像素(superpixels)。它的核心思想是对图像像素在五维空间(颜色信息 LAB 和空间位置 x, y)中进行 K-Means 聚类,从而将图像分割成多个紧凑且边界贴合的小区域-8。这些由 slic() 生成的超像素,正是你之前提到的“色块化处理”的绝佳起点,为后续的艺术风格化或图像分析提供了高质量的原子单位-7。
下面,我们从核心参数、高级功能到实战代码,一步步把它说透。
🔧 核心参数与基础用法
slic() 函数最核心的几个参数直接决定了分割效果。理解和调整它们是使用这个工具的第一步。
| 参数 | 类型 | 默认值 | 作用与调整建议 |
|---|---|---|---|
image | ndarray | 无 | 输入图像。可以是灰度图或彩色图-4。 |
n_segments | int | 100 | 期望生成的超像素数量。值越大,超像素越细小,分割越精细;值越小,超像素越大,色块感越强-4-7。 |
compactness | float | 10.0 | 控制超像素的形状规则程度。值越大,算法越强调空间邻近性,生成的超像素形状会更紧凑、更规整;值越小,越强调颜色相似性,超像素形状会更贴合图像的实际边缘,但也可能更不规则-4-7。 |
sigma | float | 0 | 高斯平滑参数。在对图像进行聚类前,先用这个参数对图像进行高斯平滑。较大的 sigma 会模糊图像细节,使颜色更平滑,从而让超像素更容易形成大块区域-4。 |
start_label | int | 0 | 输出标签数组的起始编号。如果你的标签图需要从1开始(比如在后续处理中需要将0作为背景),可以设置 start_label=1-1-2-3。 |
enforce_connectivity | bool | True | 是否强制连通性。如果设为 True,算法会将同一标签但空间不连通的小区域合并或重新分配,确保每个超像素都是一个连通的像素块。 |
convert2lab | bool | True | 是否转换到 LAB 颜色空间。LAB 空间更符合人类对颜色差异的感知,在该空间进行聚类通常能获得更好的分割效果。一般保持默认 True 即可-4。 |