简单线性迭代聚类SLIC的原理及opencv实现

来源:互联网 发布:linux telnet命令 端口 编辑:程序博客网 时间:2024/05/19 09:41

简单线性迭代聚类(SLIC)是在 K-Means 聚类算法的基础上扩展而来的,是一种简单而高效的构建超像素的方法。SLIC 算法有两个参数K和m,K为超像素个数,m为超像素紧凑程度。将颜色向量和位置向量结合到一起,构成5维空间向量[l,a,b,x,y]。对于 N 个像素的图像,每个超像素约有 N/J 个像素点,那么每个超像素的网格宽度为 S = √N/J,再由S来选定K个初始聚类中心,然后计算每个聚类中心和它2S2S范围内的像素之间的距离,并把每个像素对应的最小距离的聚类中心作为该像素的标签,也就是标签表明该像素属于哪个聚类中心。其中,距离的测量公式为:
这里写图片描述
其中,dlab表示第k个聚类中心与第i个像素点的颜色距离,dxy表示第k个聚类中心与第i个像素点的空间距离,而Ds是颜色距离和归一化的空间距离的和。公式中的变量m用来权衡颜色相似度和空间临近性的影响。m越大,空间影响越大,超像素更紧凑;m越小,颜色影响越大,超像素更贴合图像边缘。
这里写图片描述

SLIC作者的源码:SLIC作者源码
前期看代码时,总想把作者源码中算法重要部分提取出来,直接用opencv实现,从而方便用opencv下一步处理,所以实现了以下代码:opencv实现分割的输出
这样就可以用opencv直接处理SLIC分割超像素,并在代码中加入了一个时间类。

原创粉丝点击