SLIC超像素分割

SLIC(simple linear iterativeclustering) ,即简单线性迭代聚类。将彩色图像转化为CIELab颜色空间和XY坐标下的5维特征向量,然后对5维特征向量构造距离度量标准,对图像像素进行局部聚类的过程。SLIC算法能生成紧凑、近似均匀的超像素。其实质是将K-means算法用于超像素聚类。复杂度是O(NKI), 其中,N是图像的像素数,K是聚类数,I是迭代次数。

SLIC的具体实现的步骤:

(1)将图像转换为CIELab颜色空间;
(2)初始化K个种子点(聚类中心),在图像上平均洒落K个点,K个点均匀的占满整幅图像;
(3)对种子点在内的nXn(一般为3X3)区域计算每个像素点梯度值,选择值最小(最平滑)的点作为新的种子点,这一步主要是为了防止种子点落在了轮廓边界上;
(4)对种子点周围2S*2S的方行区域内的所有像素点计算距离度量,S=sqrt(N/K), N是图像的像素个数;
(5)每个像素点都可能被几个种子点计算距离度量,选择其中最小的距离度量对应的种子点为其聚类中心。

from skimage.segmentation import slic, mark_boundaries
from skimage import io

img = io.imread('./data/coffee.png')
segments = slic(img, n_segments=400, compactness=30)
out = mark_boundaries(img,segments)
io.imsave('./data/coffee_result.png', out)
coffee.png
coffee_result.png

你可能感兴趣的:(SLIC超像素分割)