SLIC超像素分割详解(一):简介

2023-05-16

SLIC超像素分割详解(一)

超像素概念是2003年Xiaofeng Ren提出和发展起来的图像分割技术,是指具有相似纹理、颜色、亮度等特征的相邻像素构成的有一定视觉意义的不规则像素块。它利用像素之间特征的相似性将像素分组,用少量的超像素代替大量的像素来表达图片特征,很大程度上降低了图像后处理的复杂度,所以通常作为分割算法的预处理步骤。已经广泛用于图像分割、姿势估计、目标跟踪、目标识别等计算机视觉应用。几种常见的超像素分割方法及其效果对比如下:


   Graph-based           NCut            Turbopixel          Quick-shift        Graph-cut a        Graph-cut b         SLIC

这里主要介绍的是SLIC(simple linear iterativeclustering),即简单的线性迭代聚类。它是2010年提出的一种思想简单、实现方便的算法,将彩色图像转化为CIELAB颜色空间和XY坐标下的5维特征向量,然后对5维特征向量构造距离度量标准,对图像像素进行局部聚类的过程。SLIC算法能生成紧凑、近似均匀的超像素,在运算速度,物体轮廓保持、超像素形状方面具有较高的综合评价,比较符合人们期望的分割效果。

SLIC主要优点总结如下:1)生成的超像素如同细胞一般紧凑整齐,邻域特征比较容易表达。这样基于像素的方法可以比较容易的改造为基于超像素的方法。2)不仅可以分割彩色图,也可以兼容分割灰度图。3)需要设置的参数非常少,默认情况下只需要设置一个预分割的超像素的数量。4)相比其他的超像素分割方法,SLIC在运行速度、生成超像素的紧凑度、轮廓保持方面都比较理想。

在介绍SLIC之前,插播一下Lab颜色空间的介绍。Lab色彩模型是由亮度(L)和有关色彩的a, b三个要素组成。L表示亮度(Luminosity),L的值域由0(黑色)到100(白色)。a表示从洋红色至绿色的范围(a为负值指示绿色而正值指示品红),b表示从黄色至蓝色的范围(b为负值指示蓝色而正值指示黄色)。Lab颜色空间的优点:1)不像RGBCMYK色彩空间,Lab 颜色被设计来接近人类生理视觉。它致力于感知均匀性,它的 L 分量密切匹配人类亮度感知。因此可以被用来通过修改 a 和 b 分量的输出色阶来做精确的颜色平衡,或使用 L 分量来调整亮度对比。这些变换在 RGB 或 CMYK 中是困难或不可能的。2)因为 Lab 描述的是颜色的显示方式,而不是设备(如显示器、打印机或数码相机)生成颜色所需的特定色料的数量,所以 Lab 被视为与设备无关的颜色模型。3)色域宽阔。它不仅包含了RGB,CMYK的所有色域,还能表现它们不能表现的色彩。人的肉眼能感知的色彩,都能通过Lab模型表现出来。另外,Lab色彩模型的绝妙之处还在于它弥补了RGB色彩模型色彩分布不均的不足,因为RGB模型在蓝色到绿色之间的过渡色彩过多,而在绿色到红色之间又缺少黄色和其他色彩。如果我们想在数字图形的处理中保留尽量宽阔的色域和丰富的色彩,最好选择Lab。

下面描述一下SLIC具体实现的步骤:

1.  初始化种子点(聚类中心):按照设定的超像素个数,在图像内均匀的分配种子点。假设图片总共有 N 个像素点,预分割为 K 个相同尺寸的超像素,那么每个超像素的大小为N/ K ,则相邻种子点的距离(步长)近似为S=sqrt(N/K)

2.  在种子点的n*n邻域内重新选择种子点(一般取n=3)。具体方法为:计算该邻域内所有像素点的梯度值,将种子点移到该邻域内梯度最小的地方。这样做的目的是为了避免种子点落在梯度较大的轮廓边界上,以免影响后续聚类效果。

3.  在每个种子点周围的邻域内为每个像素点分配类标签(即属于哪个聚类中心)。和标准的k-means在整张图中搜索不同,SLIC的搜索范围限制为2S*2S,可以加速算法收敛,如下图。在此注意一点:期望的超像素尺寸为S*S,但是搜索的范围是2S*2S。


4.  距离度量。包括颜色距离和空间距离。对于每个搜索到的像素点,分别计算它和该种子点的距离。距离计算方法如下:


其中,dc代表颜色距离,ds代表空间距离,Ns是类内最大空间距离,定义为Ns=S=sqrt(N/K),适用于每个聚类。最大的颜色距离Nc既随图片不同而不同,也随聚类不同而不同,所以我们取一个固定常数m(取值范围[1,40],一般取10)代替。最终的距离度量D'如下:


由于每个像素点都会被多个种子点搜索到,所以每个像素点都会有一个与周围种子点的距离,取最小值对应的种子点作为该像素点的聚类中心。

5.  迭代优化。理论上上述步骤不断迭代直到误差收敛(可以理解为每个像素点聚类中心不再发生变化为止),实践发现10次迭代对绝大部分图片都可以得到较理想效果,所以一般迭代次数取10。

6.  增强连通性。经过上述迭代优化可能出现以下瑕疵:出现多连通情况、超像素尺寸过小,单个超像素被切割成多个不连续超像素等,这些情况可以通过增强连通性解决。主要思路是:新建一张标记表,表内元素均为-1,按照“Z”型走向(从左到右,从上到下顺序)将不连续的超像素、尺寸过小超像素重新分配给邻近的超像素,遍历过的像素点分配给相应的标签,直到所有点遍历完毕为止。

 

参考文献:

[1]  Achanta,Radhakrishna, et al. Slic superpixels. No. EPFL REPORT 149300. 2010.

[2] Achanta,Radhakrishna, et al. "SLIC superpixels compared to state-of-the-artsuperpixel methods." Pattern Analysis and Machine Intelligence, IEEETransactions on 34.11 (2012): 2274-2282.

 -------------------------

欢迎志同道合的朋友关注 微信公共号:计算机视觉life,分享【算机视觉\机器学习\人工智能】领域的信息、技术;分享生活中的感悟。新的一年,一起成长~


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SLIC超像素分割详解(一):简介 的相关文章

  • 【飞控开发高级教程6】疯壳·开源编队无人机-AI语音控制

    COCOFLY教程 疯壳 无人机 系列 AI语音控制 图1 一 AI 语音控制 cocofly 支持 AI 语音控制 xff0c 具体的使用方法和 视觉追踪 中的追踪图形码类似 xff0c 都是通过 cocobit 编程板结合微信小程序或者
  • [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结

    感谢面试群 S 北京 陈磊 的整理分享 基础篇 xff1a 操作系统 计算机网络 设计模式 一 xff1a 操作系统 1 进程的有哪几种状态 xff0c 状态转换图 xff0c 及导致转换的事件 2 进程与线程的区别 3 进程通信的几种方式
  • 利用python语言制作简单的音乐播放器

    from tkinter import from tkinter import filedialog from pygame locals import import time import pygame import sys pygame
  • 小四轴——空心杯电机引起的电源干扰

    问题 用STM32做了一个微型四轴的飞控 xff0c 使用的是空心杯电机 xff0c 使用一个MOS管驱动 xff0c 但是现在电机只要运行起来 xff0c 就会产生非常大的干扰 xff0c 直接导致STM32复位或不运行 经过换电容 xf
  • PX4开发(1):ubuntu下pixhawk开发环境搭建

    1 介绍 之前买了个330的四轴 xff0c 最近想利用起来 xff0c 所以买了个pixhawk来玩 pixhawk是开源的 xff0c 所以想看看能不能在其基础上开发出什么 要做开发首先要配置环境 xff0c 由于官方推荐在linux环
  • μC/OS-II 要点分析 ------ PendSV_Handler

    首先贴出今天要与大家分享的内容源码 xff08 位于内核源码的 os cpu a asm 中 xff09 xff1a PendSV Handler CPSID I MRS R0 PSP CBZ R0 PendSV Handler Nosav
  • PX4开发(2):QGroundControl的使用及电调校准——准备起飞

    1 介绍 上一节把固件烧写好了 xff0c 接下来进行传感器的校准了 xff0c 传感器校准要使用官方的地面站 xff0c 也就是QGC QGroundControl xff0c 官网下载点击这里 安装好QGC后打开 xff0c 然后将pi
  • Linux驱动开发04:块设备驱动和网络设备驱动

    介绍 因为块设备驱动和网络设备驱动实际中用得较少 xff0c 所以只给出驱动模板 xff0c 我也没有具体测试 xff0c 等到实际用到是再研究吧 xff0c 溜了溜了 块设备驱动模板 span class hljs keyword str
  • 支撑程序员的三种精神

    我注意到有三种精神指引着软件开发人员的灵魂 伟大的艺术家精神 xff0c 可信赖的员工精神和自私的实用主义精神 伟大的艺术家精神 如果你听到一种声音说 你不能这样画 xff0c 然后 xff0c 你继续这样画 xff0c 这种反对的声音就会
  • docker数据迁移

    docker数据迁移 前言 开发服务器随着docker运行服务的变多 xff0c docker目录占用磁盘空间也在逐渐变大 xff0c 终于在最近磁盘彻底占满导致容器启动不起来并提示 34 no device space left 34 为
  • 超好看的个人主页官网源码+带动态特效

    正文 这款个人主页源码感觉是我有史以来见过最好看的 xff0c 功能和页面也比较多 xff0c 简约又不失格调 官网带动态特效视频源码 xff0c 修改主页文件即可 程序 wwvwd lanzouw com i6RWe0ag8gde 图片
  • A2W、W2A、A2T、T2A的使用方法

    1 A2W和W2A 在 Window核心编程 xff0c 多字节和宽字节之间转换比较麻烦的 xff0c MultiByteToWideChar函数和WideCharToMultiByte函数有足够多的参数的意义让我们去理解 那么使用ATL的
  • C语言中int到float的强制类型转换

    最近在看一本名为的书 由于我所看过的计算机理论方面的书较少 xff0c 加上自己大学期间一直也不用功 xff0c 所以对于计算机的工作原理以及程序的工作方式我始终只知甚少 xff0c 印象也十分模糊 不过 xff0c 应该说我碰到了一本好书
  • MFC中如何将焦点设置到指定控件上

    MFC中如何将焦点设置到指定控件上 需求 xff1a 窗口打开的时候就将焦点 xff08 光标 xff09 设置到某个指定的控件上去 实现方法 xff1a 设置焦点需要用到setFocus这个方法 xff08 几乎任何编程环境都这样VC x
  • _tcschr、_tcsrchr

    tcschr tcsrchr 好处 xff1a 是可以不管是用unicode 编码还是其他 代码都不用改 C 43 43 标准库函数提供了字符和字符串的操作函数 xff0c 并提供了其UNICODE版本 xff0c 如 xff1a 1 tc
  • vc++ 6.0编译后生成的文件

    vc 43 43 6 0编译后生成的文件 程序在编译后 在目标路径下会生成多个文件 Debug文件夹 exe ilk obj pch pdb idb pdb cpp dsp ncb plg exe 是生成的可执行文件 ilk 当选定渐增型编
  • 除了pid还有什么控制算法,类似pid算法还有哪些

    什么是专家PID xff1f 他和传统的PID有什么区别 xff1f PID是智能控制啊 比如要控制一个水管的水流量 通过流量计 开关阀 让PID来控制开关阀的开关大小使水流量正确 专家PID记得是PID的高级设置 某些个场合一般的PID无
  • c++编译错误:invalid new-expression of abstract class type

    error invalid new expression of abstract class type UserdataActionI 原因 xff1a 出现这个错误原因是new 了一个抽象类出错 xff0c 说明父类 xff08 接口 x
  • Servlet jsp跳转到Servlet 出现404错误的路径设置方法

    jsp跳转到Servlet 出现404错误的路径设置方法 解决一 xff1a 最近又遇到了这种问题 xff0c 百度了好久 xff0c 发现有人说要在action的路径里面写Servlet文件的绝对路径 xff0c 比如说 xff0c 单独

随机推荐