图像分割是图像处理,计算机视觉领域里非常基础,非常重要的一个应用。今天介绍一种高效的分割算法,即 simple linear iterative clustering (SLIC) 算法,顾名思义,这是一种简单的迭代聚类算法,这个算法发表于 2012 年的 PAMI 上。

SLIC 算法有几个关键点,

1: 图像分割块的初始化,每一个图像块都是一个聚类,聚类的中心称为 superpixel,聚类的个数 k 是人为设定的,SLIC 算法先将图像分成大小大小一致的图像 patch,假设图像的像素个数为 N, 需要分割的图像 patch 个数为 k, 那么每个 patch 的大小为 S×S,S=N/k−−−−√

2:聚类中心的初始化,在划分好的图像块里,随机采样一个点作为聚类的中心,为了避免采样的初始点是噪声或者是在边缘部分,算法做了一点变化,在采样点附近 3×3 的区域计算临近像素点的梯度,选择临近点中梯度最小的点为聚类中心。

3: 计算像素点到聚类中心的距离,图像分好块,选择好了每一个图像块的聚类中心,接下来就是计算图像中每一个像素点离聚类中心的距离了,这里与通常的聚类算法不一样,一般的聚类算法会计算像素点离每一个聚类中心的距离,换句话说,每一个聚类中心都要和所有的像素点计算距离,这个明显是费时,而且也是没有必要的,SLIC 算法简化了这一步,只计算每个聚类中心周围 2S×2S 范围类的像素点与该聚类中心的距离,这样可以节省很多的运算时间。

为了可以衡量距离,这个算法考虑了 空间距离 和 颜色距离 两种:

dc=(lj−li)2+(aj−ai)2+(bj−bi)2−−−−−−−−−−−−−−−−−−−−−−−−−−√

ds=(xj−xi)2+(yj−yi)2−−−−−−−−−−−−−−−−−√

D′=(dcm)2+(dsS)2−−−−−−−−−−−√

算法最后衡量距离的形式如下所示:

D=(dc)2+(dsS)2m2−−−−−−−−−−−−−√

在 CIELAB 颜色空间中,论文中提到 m 的取值范围大概是 [1, 40]

4:重新聚类,计算完距离之后,每一个像素点都会更新自己所属的图像块,将同一个图像块的像素点取平均,得到新的聚类中心,然后再重复前面的步骤,直到两次聚类中心的距离小于某个阈值。算法的流程图如下所示:

给出一段Python 的代码:

# import the necessary packages
from skimage.segmentation import slic
from skimage.segmentation import mark_boundaries
from skimage.util import img_as_float
from skimage import io
import matplotlib.pyplot as plt # load the image and convert it to a floating point data type
image = img_as_float(io.imread("image.jpg")) # loop over the number of segments
for numSegments in (100, 200, 300):
# apply SLIC and extract (approximately) the supplied number
# of segments
segments = slic(image, n_segments = numSegments, sigma = 5) # show the output of SLIC
fig = plt.figure("Superpixels -- %d segments" % (numSegments))
ax = fig.add_subplot(1, 1, 1)
ax.imshow(mark_boundaries(image, segments))
plt.axis("off") # show the plots
plt.show()

机器学习:simple linear iterative clustering (SLIC) 算法的更多相关文章

  1. 实现SLIC算法生成像素画

    前言 像素风最早出现在8bit的电子游戏中,受制于电脑内存大小以及显示色彩单一, 只能使用少量像素来呈现内容,却成就了不少经典的像素游戏.随着内存容量与屏幕分辨率的提升,内存与显示媒介的限制不再是问题 ...

  2. 论文解读(SCGC))《Simple Contrastive Graph Clustering》

    论文信息 论文标题:Simple Contrastive Graph Clustering论文作者:Yue Liu, Xihong Yang, Sihang Zhou, Xinwang Liu论文来源 ...

  3. STA 463 Simple Linear Regression Report

    STA 463 Simple Linear Regression ReportSpring 2019 The goal of this part of the project is to perfor ...

  4. 《机器学习实战》基于朴素贝叶斯分类算法构建文本分类器的Python实现

    ============================================================================================ <机器学 ...

  5. 神经网络与机器学习 笔记—LMS(最小均方算法)和学习率退火

    神经网络与机器学习 笔记-LMS(最小均方算法)和学习率退火 LMS算法和Rosenblatt感知器算法非常想,唯独就是去掉了神经元的压制函数,Rosenblatt用的Sgn压制函数,LMS不需要压制 ...

  6. 基于机器学习和TFIDF的情感分类算法,详解自然语言处理

    摘要:这篇文章将详细讲解自然语言处理过程,基于机器学习和TFIDF的情感分类算法,并进行了各种分类算法(SVM.RF.LR.Boosting)对比 本文分享自华为云社区<[Python人工智能] ...

  7. 机器学习---用python实现最小二乘线性回归算法并用随机梯度下降法求解 (Machine Learning Least Squares Linear Regression Application SGD)

    在<机器学习---线性回归(Machine Learning Linear Regression)>一文中,我们主要介绍了最小二乘线性回归算法以及简单地介绍了梯度下降法.现在,让我们来实践 ...

  8. 机器学习课程-第8周-聚类(Clustering)—K-Mean算法

    1. 聚类(Clustering) 1.1 无监督学习: 简介 在一个典型的监督学习中,我们有一个有标签的训练集,我们的目标是找到能够区分正样本和负样本的决策边界,在这里的监督学习中,我们有一系列标签 ...

  9. Spark2.0机器学习系列之1: 聚类算法(LDA)

    在Spark2.0版本中(不是基于RDD API的MLlib),共有四种聚类方法:      (1)K-means      (2)Latent Dirichlet allocation (LDA)  ...

随机推荐

  1. 应用程序之UITableView的编辑模式

    cell分层结构 效果展示 代码实现 一.cell的分层结构 二.效果展示 三.代码实现 // // ViewController.m // 01-TableView的删除实现 // // Creat ...

  2. 转:DDR中端接技术基本概念

    DDR中端接技术基本概念  版权声明:转载请注明出处:http://blog.csdn.net/lg2lh https://blog.csdn.net/lg2lh/article/details/90 ...

  3. Bootstrp--一个导航面板切换的实用例子

    <!--导航区开始--> <ul class="nav nav-tabs nav-stacked" role="tablist"> &l ...

  4. jdk并发工具包之锁

    1.cynchronized扩展:可重锁入ReentrantLock ReentrantLock是通过cas算法实现的 RenntrantLock lock=new ReentrantLock(); ...

  5. 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。

    // 第一种方法 // ConsoleApplication10.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include < ...

  6. 链接脚本使用一例2---将二进制文件 如图片、MP3音乐、词典一类的东西作为目标文件中的一个段

    参考文章: <程序员的自我修养——链接.转载与库> P68 这里介绍两种方法,实现将将一张图片作为二进制可执行程序的一个段,其中第一种方法在我之前的博客中已经有所介绍,不过,那是采用的是交 ...

  7. FreeRTOS在神舟IV号开发板的应用demo

    下面一个可以直接编译运行的例子,FreeRTOS的版本是V7.1.0,芯片是STM32F107VCT6,使用的开发环境是Keil uVision5. 这里例子创建了四个任务,每个任务控制一个LED的亮 ...

  8. 目标检测之vibe---ViBe(Visual Background extractor)背景建模或前景检测

    ViBe算法:ViBe - a powerful technique for background detection and subtraction in video sequences 算法官网: ...

  9. Unity编辑器扩展之RequireComponent等详解

    RequireComponent的使用: 当你添加的一个用了RequireComponent组件的脚本,需要的组件将会自动被添加到game object(游戏物体).这个可以有效的避免组装错误.举个例 ...

  10. win7激活附带激活软件

    链接: https://pan.baidu.com/s/1i46yoHR 密码: 7k6y