SLIC算法介绍

2023-05-16

SLIC(simple linear iterativeclustering),即 简单线性迭代聚类 。
💛它是2010年提出的一种思想简单、实现方便的算法,将彩色图像转化为CIELAB颜色空间和XY坐标下的5维特征向量,然后对5维特征向量构造距离度量标准,对图像像素进行局部聚类的过程。
💛SLIC算法能生成紧凑、近似均匀的超像素,在运算速度,物体轮廓保持、超像素形状方面具有较高的综合评价,比较符合人们期望的分割效果。其实是从k-means算法演化的,算法复杂度是O(n),只与图像的像素点数有关,而与k值无关。而常规的k均值算法的复杂度是O(kni),i为迭代次数。

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


超像素:

💛超像素概念是2003年Xiaofeng Ren提出和发展起来的图像分割技术。
💛是指具有相似纹理、颜色、亮度等特征的相邻像素构成的有一定视觉意义的不规则像素块。
💛它利用像素之间特征的相似性将像素分组,用少量的超像素代替大量的像素来表达图片特征(捕获图像的冗余信息),很大程度上降低了图像后处理的复杂度,所以通常作为分割算法的预处理步骤。
💛已经广泛用于图像分割、姿势估计、目标跟踪、目标识别等计算机视觉应用。需要注意的是,超像素分割算法很可能把同一个物体的不同部分分成多个超像素。

SLC的创新点:

1.SLIC限制聚类时搜索的区域(2Sx2S)————》原K均值算法中,计算的是聚类中心到图像中的每个像素的距离——》把k-means的算法复杂度降为常数,整个算法复杂度为线性
在这里插入图片描述
2.距离度量考虑lab颜色和xy距离,五维数据。 且可以考虑颜色和距离的比重,使超像素更加灵活。

SLIC算法步骤分析:

💚均匀撒k个种子并移动到梯度最小的地方——》为每个像素计算D并分配种子标签——》重新计算聚类中心——》增强区域连通性解决孤立点和超像素过小情况

💛对源文章过程的解析:
step1:初始化聚类中心且用五维数据表示,聚类中心 之间的间隔为S(步长s对像素进行采样,初始化聚类中心)
step2:移动聚类中心到33范围内梯度最低的地方
step3:对每一个像素i,设置label。取label第一个字母l表示label。l表示为每个像素点是属于哪个超像素,初始设置为-1
step4:对每个像素i,设置距离d(i)=正无穷 【ps.因为后面更新的时候,是根据距离数值小的点进行更新】
step5.循环以下过程————对每个聚类中心外循环,在围绕聚类中心的2s
2s范围内的对每个像素i内循环—》如果距离度量值D数值小,就更新d(i)的值,将label(i)设置为所对应的超像素
step6.计算新的聚类中心和先前聚类中心位置之间的残差误差E。迭代直到错误收敛。 【ps.一般迭代10次差不多了】
在这里插入图片描述


1.撒种子。根据图像大小和定义的超像素数目K,将k个超像素中心均匀分布到图像的像素点上。假设图片总共有 N 个像素点,预分割为 K 个相同尺寸的超像素,那么每个超像素的大小为N/ K ,则相邻种子点的距离(步长)近似为S=sqrt(N/K)。

2.调整种子位置。以k为中心的nn(一般n取3,故为33)范围内,将超像素中心移动到这9个点中梯度最小的点上。目的是为了避免超像素点落入噪点或边界处。

3.初始化数据。在每个种子点周围的邻域内为每个像素点分配类标签lable(即该像素点是属于哪个聚类中心的)。做法:取一个数组label,保存每个像素点是属于哪个超像素。dis数据保存像素点到它属于的那个超像素中心之间的距离。

4.更新数据。对每一个超像素中心x,在其2s*2s范围内搜索;如果点到超像素中心x的距离(五维)小于点到它原来属于的超像素中心的距离,说明这个点属于超像素x。(新距离小于旧距离,则点属于新范围。更新dis,更新label)----》每个像素必须与所有聚类中心比较,通过引入距离测量D值。**【期望的超像素尺寸为SS,但是搜索的范围是2S2S】【由于每个像素点都会被多个种子点搜索到,所以每个像素点都会有一个与周围种子点的距离,取最小值对应的种子点作为该像素点的聚类中心。】**

5.计算。对每一个超像素中心,重新计算它的位置(属于该超像素的所有像素的位置中心)以及lab值。

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

后处理步骤:

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

关键步骤:

4和5【用到了k-means算法的思想】
💛步骤4相当于:知道超像素点,然后再给定一系列像素点。将像素点分类到某一超像素类中。
💛步骤5相当于:计算某类超像素类中,像素点的中心,然后让超像素点移动到刚才计算出来的中心位置。
💛迭代相当于:再让所有像素点分到某一超像素圈圈中,然后重新计算像素点中的中心,移动超像素中心到刚才的中心。然后重复。

注意:SLIC和K-means的区别是SLIC加快了计算速度,即,进行步骤4时只计算超像素中心有限范围内的点。


Lab彩色空间介绍:

L:亮度。值域为0(黑)~100(白)
a:从洋红色至绿色的范围。(a为负数指代绿色,a为正数指代品红色)
b:从黄色至蓝色的范围。(b为负数指代蓝色,b为正数指代黄色)

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

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


距离的度量:

如果直接将l,a,b,x,y拼接成一个矢量计算距离,当超像素的大小变化时,x,y的值可以取到非常大 ,比如如果一张图10001000,空间距离可以达到1000Sqr(2),而颜色距离最大仅10*Sqr(2),导致最终计算得到的距离值中,空间距离ds权重占比过大。

所以需要进行归一化,除以最大值即超像素点的初始宽度S,将值映射到[0,1]。

而颜色空间距离也会给到一个固定的值m来调节颜色距离与空间距离的影响权重,m取值范围为[1,40]。

最终距离公式为D。

在这里插入图片描述
m还允许我们权衡颜色相似性和空间邻近度之间的相对重要性。
当m时,(空间距离的权重越大)空间邻近性更重要,得到的超像素更紧凑(规则)
当m时,(颜色距离权重更大)超像素更紧密的附着到图像边界,但具有较小的规则尺寸和形状(不规则)


可改进的点

1.撒种子步骤,原来是根据图像大小和超像素数目均匀撒的。
💛改:在初始种子点的n*n(一般n取3)个邻域内寻找更优的像素进行撒种子——计算邻域内所有像素的梯度值,把梯度值最小的像素点设置为新的超像素种子点——避免种子点落入轮廓或边界上

2.更新种子点步骤,原来是在updaye_clusters函数中根据当前超像素的所有归属像素来更新位置。
💛改:迭代引入滤波——去除超像素归属范围内与中心点在颜色空间上差异过大的像素点,用剩下的像素点更新聚类中心

3.SLIC的多次迭代中,对每一块超像素都进行迭代。
💛改:有些超像素块在迭代多次后变化不大了,所以可以设置一个准则,即本次迭代后的效果与上一次差别不大,则之后就不对此区域进行迭代。nChanges会在迭代过程中变化 ,如果nChanges小于阈值 则说明当前的超像素块 与 上一次迭代后变化不大 则直接跳出本次迭代
文章:Compact Watershed and Preemptive SLIC: On improving trade-offs of superpixel segmentation algorithms

double preemptive_thresh_iteration = 0.01;		//设置的迭代阈值

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

SLIC算法介绍 的相关文章

  • C++类详解(public、private、protected)

    二 C 43 43 类的声明 类使用class关键字声明 xff0c 声明方法如下 xff1a class 类名 xff1a public 公有成员 int num private 私有成员 int age protected 保护成员 i
  • linux下网络通信(udp通信协议详解)

    一 udp通信简介 udp是User Datagram Protocol的简称 xff0c 中文名是用户数据报协议 udp协议位于osi模型中的传输层 xff0c 它是一种面向无连接的协议 udp协议并不保证数据一定能够到达对端 xff0c
  • 广播地址、组播地址、网关和子网掩码

    一 IP地址分类 IP地址一共32位 xff0c 由两部分组成 xff0c 网络号和主机号 网络号标识当前设备处于Internet的哪一个网络 xff0c 主机号标识当前设备属于该网络中的那一台主机 IP地址一共分为5类 xff1a 地址分
  • URL格式

    一 URL基本格式 一个完整的url包含方案 用户名 密码 主机名 端口 路径 参数 查询和片段 xff0c 格式如下 xff1a lt scheme gt lt user gt lt password gt 64 lt host gt l
  • c++构造函数和析构函数

    一 构造函数和析构函数的特点 构造函数和析构函数是一种特殊的公有成员函数 xff0c 每一个类都有一个默认的构造函数和析构函数 xff1b 构造函数在类定义时由系统自动调用 xff0c 析构函数在类被销毁时由系统自动调用 xff1b 构造函
  • linux下常用压缩命令

    一 tar命令 tar命令用来打包一个目录 xff0c 它支持三种格式 xff1a tar bz2 34 和 gz 34 1 1 压缩 tar cvf 文件名 tar 文件目录 打包成 tar文件 tar jcvf 文件名 tar bz2
  • 用vscode开发autojs,输出窗口不显示任何输出结果

    我的情况是 xff1a 我vscode开发autojs 程序 xff0c 之前在一切正常的情况下 xff0c 输出窗口可以正常显示程序运行结果 xff0c 右侧红圈里可以选择我连接的手机型号 如下图 xff1a 但是现在出现问题 xff1a
  • ubuntu开机没有ens33解决方法

    最近重新安装了VMware xff0c 使用之前的ubuntu镜像 xff0c 发现只有一个lo网卡 xff0c 没有ens33 xff0c 虚拟机无法获取ip地址 xff0c samba服务器也无法正常使用 root 64 ubuntu
  • ubuntu下arm-none-eabi-gcc安装

    一 下载安装包 下载地址 xff1a https launchpad net gcc arm embedded 43 download 选择linux版本下载 xff1a gcc arm none eabi 5 4 2016q3 20160
  • 2.4G-WiFi连接路由器过程

    一 概述 WiFi的数据通信基于802 11协议进行 xff0c 无线AP在工作时会定时向空中发送beacon数据包 xff0c 基站 xff08 STA xff09 从beacon中解析出AP的名称 加密方式等信息 xff0c 从而发起连
  • STM32f103时钟树详解

    一 概述 stm32有四种时钟信号源 xff0c HSE 高速外部时钟 HSI xff08 高速内部时钟 xff09 LSE xff08 低速外部时钟 xff09 LSI xff08 低速内部时钟 xff09 HSE通常接8M晶振 xff0
  • 头文件重复包含

    一 头文件重复包含问题分析 1 问题重现 举例说明 假设在某个C 43 43 头文件 或 源文件 中 xff0c 包含了A h和B h两个头文件 xff1a span class token macro property span clas
  • Netty 学习(六)实现自定义协议通信

    目录 前言一 通信协议设计通用协议自定义协议网络协议需要具备的要素1 魔数2 协议版本号3 序列化算法4 报文类型5 长度域字段6 请求数据7 状态8 校验字段9 保留字段 二 Netty 实现自定义通信协议Netty 中编解码器分类 三
  • ABB机器人与上位机进行Socket通信的RAPID代码实现(服务端)

    文章目录 前言1 实现的功能2 建立Socket通信2 1 ABB机器人的IP地址 xff1a 2 2 SocketAccept的说明 3 服务端接发信息3 1 核心代码3 2 CurrentPos函数 4 完整代码5 实现效果 前言 本文
  • ros使用自定义消息时,编译不成功,在Cmake中报错.

    在使用自定义消息时 xff0c 按照教程添加依赖和cmakelist文件后 xff0c 保证几条Cmake语句顺序无误的情况下 xff0c 考虑msg文件夹的位置 xff0c 应在功能包的第一级目录中
  • C语言加强--韦老师公开课

    目录 1 变量与指针 摘要 xff1a 普通变量 指针变量所占的内存空间大小 xff0c 变量在内存中的分配方式 xff08 首地址要求 长度 分配长度与实际使用长度区别 需要填充字节数 全局与局部变量在内存中的位置 xff09 xff1b
  • 大小端转换(一篇文章了解所有情况下的大小端转换方法)

    总述 xff1a 字节间字节内大端低地址的数据放在高字节位域 xff1a 先从低地址对应数据字节的高bit开始分配小端低地址的数据放在低字节位域 xff1a 先从低地址对应数据字节的低bit开始分配 注释 xff1a 对于大小端的几个结论
  • C语言程序内存四区——栈区,堆区,全局区,代码区

    1 全局区 xff1a 全局区比较特殊 xff0c 里面还分成了全局变量区 xff0c 静态变量区 xff0c 常量区 全局变量区用来存放全局变量 xff0c 静态变量区用来存放带有static修饰的变量 xff08 包括静态局部变量和静态
  • Linux 用户和组

    用户和组 前言一 查看用户二 基本操作1 添加用户2 查看3 修改密码4 切换用户5 其他6 登出 前言 一个用户可以属于多个组 xff0c 并且拥有这些组的权限 一 查看用户 输入命令 cat span class token opera
  • pip 清华镜像

    pip 清华镜像 一 地址二 使用 一 地址 https pypi tuna tsinghua edu cn simple 二 使用

随机推荐

  • requests库将cookieJar对象转换为cookies字典

    requests库将cookieJar对象转换为cookies字典 转字典转cookieJar 使用requests获取的resposne对象 xff0c 具有cookies属性 该属性值是一个cookieJar类型 转字典 cookies
  • mybatis-generator-core插件无法下载解决办法

    mybatis generator core插件无法下载解决办法 前言一 解决办法二 插件可用 前言 maven mybatis generator core插件无法下载 一 解决办法 二 插件可用
  • idea 去绿色波浪线

    idea 去绿色波浪线 如图 如图
  • stop-writes-on-bgsave-error

    redis RDB持久化配置 RDB持久化 配置 stop writes on bgsave error 选项 如果 61 yes xff1a redis 会创建一个新的后台进程dump rdb 假设 xff1a 创建快照 xff08 硬盘
  • px4_simple_example和uorb机制

    px4 simple app PX4 Autopilot src exampes px4 simple app xff0c 这个程序是用c语言调用orb API和poll机制订阅和发布通讯数据 xff0c 但是这个例子并不是既有接收又有发送
  • 四旋翼无人机硬件基础

    四旋翼无人机硬件基础 材料分析无刷电机型号转速 电子调速器作用规格四轴专用电调 xff1f 电调编程 xff1f 螺旋桨机制 规格 飞行控制器原理作用四轴 字四轴十字 电池锂电池 xff1f 电池容量电池片数放电能力插头类型T插XT60JS
  • AndroidStudio NDK开发环境配置及示例

    AndroidStudio NDK开发环境配置及示例 版本说明 版本作者日期备注0 1loon2020 8 26初稿 目录 文章目录 AndroidStudio NDK开发环境配置及示例版本说明目录一 Android Studio NDK环
  • Onvif协议学习:10、获取音视频流

    Onvif协议学习 xff1a 10 获取音视频流 文章目录 Onvif协议学习 xff1a 10 获取音视频流1 原理简介2 编码流程3 VLC播放RTSP视频4 准备FFmpeg库5 示例代码 原文链接 xff1a https blog
  • (ROS)RLException: [display_mrobot_with_camera.launch] is neither a launch file等一系列错误解决办法

    前提 xff1a 运行 roslaunch mrobot description display mrobot chassis urdf launch 有误 错误1 xff1a rviz直接打不开 错误显示 xff1a RLExceptio
  • 9款好用的SSH客户端软件推荐

    9款好用的SSH客户端软件推荐 文章目录 9款好用的SSH客户端软件推荐MobaXtermXshellTermiusPuTTYSimpleRemoteZOC TerminalFinalshellJuiceSSHServerCat SSH客户
  • 几款数据库连接工具

    几款数据库连接工具 文章目录 几款数据库连接工具1 前言2 Navicat3 DBeaver4 DataGrip5 phpMyAdmin 1 前言 我目前使用sqlite3和mysql数据库比较多 xff0c 所以对数据库客户端的需求主要是
  • win10文件资源管理器右键卡死现象解决方案大全

    win10文件资源管理器右键卡死现象解决方案大全 文章目录 win10文件资源管理器右键卡死现象解决方案大全一 右键桌面卡死 xff0c 过了许久都未反应二 右键文件夹或文件卡死2 1 方案12 2 方案22 3 方案3 xff08 靠谱
  • CLion常用插件及c文件模板配置

    CLion常用插件及c文件模板配置 文章目录 CLion常用插件及c文件模板配置1 常用插件2 模板2 1 c源文件模板 xff1a xff08 使用文件模板 xff09 2 2 c头文件模板 xff1a xff08 使用文件模板 xff0
  • Windows下安装及卸载程序可用的添加和删除当前路径到环境变量的bat脚本以及如何和inno setup结合使用的实例

    文章目录 1 安装bat脚本 install bat 将当前路径添加到环境变量中 2 卸载bat脚本 uninstall bat 搜索当前路径并删除 3 inno setup添加安装和卸载时执行上述bat脚本4 安装到 C盘权限不足问题处理
  • 浏览器播放rtsp视频流:4、jsmpeg+go实现局域网下的rtsp视频流web端播放

    文章目录 1 前言2 资料准备3 兼容性及适用性说明4 jsmpeg架构5 基于以上架构的go方案可行性分析6 编译和结果展示 xff08 编译坑点 xff09 7 最后 1 前言 之前的rtsp转webrtc的方案存在如下缺陷 xff1a
  • TCP套接字编程实例(一)

    TCP套接字编程实例 xff08 一 xff09 TCP套接字编程第一部分我们先用单线程简单实现客户端的 发 和服务器的 收 话不多说 xff0c 直接上代码 1 Client部分 xff1a include include include
  • Vm虚拟机扩展Ubuntu系统磁盘空间

    Vm虚拟机扩展Ubuntu系统磁盘空间 前言 一般我们在安装虚拟机时都会选择默认的20G磁盘空间 xff0c 但是一旦需要搭建一两个交叉编译环境后 xff0c 20G的空间就无法满足了 xff0c 我就是出现了这样的情况 xff0c 所以也
  • Qt添加菜单栏和工具栏

    Qt添加菜单栏和工具栏 版本说明 版本作者时间备注0 1loon2018 10 24初稿 目录 文章目录 Qt添加菜单栏和工具栏版本说明目录一 需求与目的二 详细说明三 最后 一 需求与目的 一般常规的PC软件都会有主窗口 xff0c 主窗
  • Qt关于tabwidget的使用及注意事项

    Qt关于tabwidget的使用及注意事项 版本说明 版本作者日期备注0 1loon2018 11 12初稿 目录 文章目录 Qt关于tabwidget的使用及注意事项版本说明目录一 需求和目的二 了解QTabWIDget类及用法1 详细描
  • SLIC算法介绍

    SLIC xff08 simple linear iterativeclustering xff09 xff0c 即 简单线性迭代聚类 x1f49b 它是2010年提出的一种思想简单 实现方便的算法 xff0c 将彩色图像转化为CIELAB