MATLAB中有超像素分割算法superpixels函数,https://ww2.mathworks.cn/help/images/ref/superpixels.html?s_tid=doc_ta#bu1_lce-4,原理就是SLIC超像素分割。
1.SLIC超像素分割论文(翻译版)
https://blog.csdn.net/Fighting_Dreamer/article/details/77170859
2.原理详解
https://blog.csdn.net/electech6/article/details/45509779#commentBox
3.c++代码解读
https://blog.csdn.net/electech6/article/details/45535203
SLIC是基于K-means算法的生成超像素新方法,主要不同:
每次迭代K-means是全部数据在做聚类,其中每个像素必须与所有聚类中心比较。SLIC是超像素中心周围的区域2S×2S中进行类似像素的搜索
算法原理图
初始化聚类中心-------->每个聚类中心:2S*2S区域内对每个像素点进行聚类中心判断(即确定Label)------------->迭代:更新每个聚类中心
距离度量D是重点,由颜色距离和像素距离两部分决定
疑惑很久的部分:每个聚类中心:2S*2S区域内对每个像素点进行聚类中心判断(即确定Label)
对于某个聚类中心Ck:遍历种子(聚类中心)2S*2S内的每个像素点i,计算这个像素点与聚类中心的距离D,如果D<d(i)就把这个像素点的标签打为k。并且更新d(i)=D;下次遍历另一个聚类中心时,可能还会遇见这个点i,要是算出D比上次的D(就是d(i))小,就把这个点i的标签换成现在这个聚类中心的。