SLIC超像素分割算法

news2024/10/7 8:26:45

SLIC超像素分割算法

《SLIC Superpixels》

摘要

超像素在计算机视觉应用中越来越受欢迎。然而,很少有算法能够输出所需数量的规则、紧凑的超级像素,并且计算开销低。我们介绍了一种新的算法,将像素聚类在组合的五维颜色和图像平面空间中,以有效地生成紧凑,几乎均匀的超级像素。我们的方法十分简单,因此非常容易使用(一个单独的参数指定超像素的数量),并且算法的效率使它非常高且实用。实验表明,我们的方法以较低的计算成本产生超像素,同时实现了分割质量等同或优于四种最先进的方法,以边界召回和分割不足误差来衡量。我们还演示了我们的超像素方法与现有方法相比的两个任务的优势,在这两个任务中,超像素已经被证明在性能上比基于像素的方法更优。

1 介绍

超像素为计算局部图像特征提供了一个方便的原语。它们捕获图像[1]中的冗余,并大大降低了后续图像处理任务的复杂性。它们已被证明在**深度估计[2]、图像分割[3,4]、骨骼化[5]、身体模型估计[6]和物体定位[7]**等应用中越来越有用。

超像素要应用在其他任务中,就必须拥有高效率,并产生高质量的分割。不幸的是,大多数最先进的超像素方法都不能满足所有这些要求。正如我们将演示的那样,它们经常受到高计算成本、低质量分割、不一致的大小和形状或包含多个难以调整的参数的影响。

我们在这项工作中提倡的方法,虽然非常简单,但解决了这些问题,并比最先进的方法更有效地产生高质量、紧凑、几乎均匀的超像素[8,9,5,10]。我们提出的算法,简单线性迭代聚类(SLIC)在L定义的5维空间中对像素进行局部聚类分别是CIELAB颜色空间的L, a, b值以及x,y像素坐标。一种新的距离测量强制紧凑和规则的超像素形状,并无缝适应灰度以及彩色图像。SLIC实现简单,易于在实践中应用{唯一的参数指定所需的超像素数。在伯克利基准数据集[11]上的实验表明,SLIC明显比竞争方法更有效,同时通过标准边界召回和分割不足误差测量产生类似或更好的分割质量。

对于许多视觉任务,紧凑且高度一致的超像素尊重图像边界,例如图1中由SLIC生成的超像素。例如,当从基于像素的图切换到超像素时,条件随机场(CRF)等基于图的模型可以看到速度的显著提高[3,7],但松散或不规则的超像素会降低性能。如果超像素是松散的或不规则的,从超像素位置的图像中提取的SIFT等局部特征将变得不那么有意义和有区别,并且在两个或多个超像素的团上学习统计信息可能不可靠。当我们将SLIC超像素的性能与两种视觉任务(物体类别识别和医学图像分割)的竞争方法进行比较时,可以看到这种效果。在这两种情况下,与现有方法相比,我们的方法以更低的计算成本获得了类似或更好的性能

2 背景

我们对现有的图像分割方法进行了简要回顾,并重点关注了生成超像素的适应性。需要注意的是,并非所有算法都是用于这个目的,所以一些分割可能不够紧凑,但我们仍然需要对它们进行讨论。

大体上,我们将超像素算法分为两类,分别是基于图的和基于梯度上升的方法。我们的研究结果见表格1,我们考虑了分割质量、是否能控制分割数目和大小等因素。

3 SLIC分割算法

我们的方法通过基于像素在图像平面上的颜色相似性和接近性聚类像素来生成超级像素。这是在五维**[labxy]空间**中完成的,其中[lab]是CIELAB颜色空间中的像素颜色向量,它被广泛认为是小颜色距离感知均匀的,xy是像素位置。虽然CIELAB空间中两种颜色之间的最大可能距离(假设sRGB输入图像)是有限的,但xy平面中的空间距离取决于图像大小。在这个5D空间中,如果不将空间距离标准化,就不可能简单地使用欧几里得距离。为了在这个5D空间中聚类像素,因此我们引入了一种考虑超像素大小的新的距离度量。使用它,我们在这个5D空间中强制颜色相似性以及像素接近性,以便预期的簇大小及其空间范围大致相等。

3.1 距离测量

输入的参数为超像素的期望像素数量K,对于N像素的图像,每个超像素的近似大小为N/K个像素,对于大小大致相同的超像素,每个网格间隔 S = N / K S=\sqrt{N/K} S=N/K 都有一个超像素中心。

首先,我们选择K个超像素聚类中心,每个超像素的近似面积大概是 S 2 S^2 S2,相应的搜索区域为每个超像素中心周围的2S*2S区域内。

我们利用欧氏距离来进行度量,引入变量m进行调节(m越大表示空间邻近性越强),公式如下:

D s = d l a b + m S d x y D_s=d_{lab}+\frac{m}{S}d_{xy} Ds=dlab+Smdxy

3.2 算法

我们首先采样K个有规律间隔的聚类中心,并将它们移动到对应于3 × 3邻域中最低梯度位置的种子位置。

然后,我们迭代地重复将像素与最近的聚类中心关联并重新计算聚类中心的过程,直到收敛。

在这个过程的最后,可能会留下一些散落的标签,也就是说,在一个较大的段附近有几个像素具有相同的标签,但没有连接到它。尽管这种情况很少见,但尽管采用了空间接近度度量,这种情况还是会出现,因为我们的集群没有显式地强制连通性。尽管如此,我们在算法的最后一步通过用最大的相邻聚类的标签重新标记不相连的段来加强连通性。这一步是O(N)复杂的,所花费的时间不到分割图像所需总时间的10%。伪代码如下所示,很明显复杂度为O(N)

p9iiG0s.png

python代码实现

# 超像素分割 - 获取图像分块的边界 
def get_slic(img_path, mini_area):
    print(img_path)
    # read image
    origianl_img = cv2.imread(img_path)
    img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)  # RGB转灰度图
    reached_pos_list = []  # 获取可移动区域的坐标集合

    # 二值化图像
    for i in range(img.shape[0]):
        for j in range(img.shape[1]):
            if img[i][j] < 5:  # 设定阈值为10(可调整)
                reached_pos_list.append((i, j))
                img[i][j] = 255
                origianl_img[i][j] = (255, 255, 255)
            else:
                img[i][j] = 0
                origianl_img[i][j] = (0, 0, 0)

    print(len(reached_pos_list))
    print(len(img.flatten()))
    img_copy = img.copy()

    # 初始化slic项,超像素平均尺寸20(默认为10),平滑因子20
    slic = cv2.ximgproc.createSuperpixelSLIC(img, region_size=32, ruler=30.0)
    slic.iterate(100)  # 迭代次数,越大效果越好
    mask_slic = slic.getLabelContourMask()  # 获取Mask,超像素边缘Mask==1
    label_slic = slic.getLabels()  # 获取超像素标签
    number_slic = slic.getNumberOfSuperpixels()  # 获取超像素数目
    mask_inv_slic = cv2.bitwise_not(mask_slic)
    img_slic = cv2.bitwise_and(img, img, mask=mask_inv_slic)  # 在原图上绘制超像素边界

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/444924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大四的告诫

&#x1f442; LOCK OUT - $atori Zoom/KALONO - 单曲 - 网易云音乐 &#x1f442; 喝了一口星光酒&#xff08;我只想爱爱爱爱你一万年&#xff09; - 木小雅 - 单曲 - 网易云音乐 其实不是很希望这篇文章火&#xff0c;不然就更卷了。。 从大一开始&#xff0c;每天10小时…

ccf b类及以上会议(准备)

SoCCACM Symposium on Cloud Computing http://dblp.uni-trier.de/db/conf/cloud/ SimLess: simulate serverless workflows and their twins and siblings in federated FaaS.Pisces: efficient federated learning via guided asynchronous training论文截止时间&#xff1a…

实现自定义dialog样式

1定义弹出的dialog样式 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"vertical"android:layout_width"match_parent"a…

3. 排序

3. 排序 3.1 总纲 3.2 Comparable与Comparator接口介绍 由于我们这里要讲排序&#xff0c;所以肯定会在元素之间进行比较。规则的。在实际应用中&#xff0c;我们往往有需要比较两个自定义对象大小的地方。而这些自定义对象的比较&#xff0c;就不像简单的整型数据那么简单&a…

Python轻量级Web框架Flask(7)——翻页功能/多表操作

1、使用paginate实现分页&#xff1a; 基础指令&#xff08;新建对象&#xff09; 基础指令&#xff08;使用对象属性&#xff09; 2、几种类型的表操作&#xff1a; 一对一&#xff1a;例如一个人只能有一张身份证。一对多&#xff1a;例如班级和学生&#xff08;一个班级…

苦中作乐 ---竞赛刷题 完结篇(25分)

&#xff08;一&#xff09;目录 L2-014 列车调度 L2-024 部落 L2-033 简单计算器 L2-042 老板的作息表 L2-041 插松枝 &#xff08;二&#xff09;题目 L2-014 列车调度 火车站的列车调度铁轨的结构如下图所示。 两端分别是一条入口&#xff08;Entrance&#xff09;轨道…

Java分布式事务(十二)

文章目录 🔥Hmily实现TCC分布式事务_项目搭建🔥Hmily实现TCC分布式事务实战_公共模块🔥Hmily实现TCC分布式事务_集成Dubbo框架🔥Hmily实现TCC分布式事务_项目搭建 创建父工程tx-tcc 设置逻辑工程 <packaging>pom</packaging>创建公共模块 创建转出银行…

分析 | 通过 NFTScan 率先捕获 NFT 投资趋势

NFT 市场信息高度动态且机会稍纵即逝&#xff0c;了解市场第一信息对于 NFT 的参与者来说都是至关重要的。所以市场主体参与者必须密切关注各种渠道&#xff0c;努力获取最新一手 NFT 信息&#xff0c;这对参与者抓住先机和获益至关关键&#xff0c;若信息滞后&#xff0c;容易…

【流畅的Python学习笔记】2023.4.21

此栏目记录我学习《流畅的Python》一书的学习笔记&#xff0c;这是一个自用笔记&#xff0c;所以写的比较随意 特殊方法&#xff08;魔术方法&#xff09; 不管在哪种框架下写程序&#xff0c;都会花费大量时间去实现那些会被框架本身调用的方法&#xff0c;Python 也不例外。…

【Python】matplotlib设置图片边缘距离和plt.lengend图例放在图像的外侧

一、问题提出 我有这样一串代码&#xff1a; import matplotlib.pyplot as plt plt.figure(figsize (10, 6)) " 此处省略代码 " legend.append("J") plt.legend(legend) plt.xlabel(recall) plt.ylabel(precision) plt.grid() plt.show()我们得到的图像…

KMP算法原理原来这么简单

我觉得这句话说的很好&#xff1a; kmp算法关键在于&#xff1a;在当前对文本串和模式串检索的过程中&#xff0c;若出现了不匹配&#xff0c;如何充分利用已经匹配的部分&#xff0c;来继续接下来的检索。 暴力解决字符串匹配 暴力解法就是两层for循环,每次都一对一的匹配&…

面试官:“请描述一下Android系统的启动流程”

作者&#xff1a;OpenGL 前言 什么是Android启动流程呢&#xff1f;其实指的就是我们Android系统从按下电源到显示界面的整个过程。 当我们把手机充好电&#xff0c;按下电源&#xff0c;手机会弹出相应启动界面&#xff0c;在等了一段时间之后&#xff0c;会弹出我们熟悉的主…

AI数据标注工程师这个职业怎么样?

本篇文章主要讲解ai数据标注工程师这个职业的具体情况和相关的职业前景 作者&#xff1a;任聪聪 日期&#xff1a;2023年4月18日 数据是ai的灵魂&#xff0c;自然界中相对应的数据都活多少存在不准确、杂乱、无效等属性&#xff0c;需要人为进行收集、整理、分类和处理。其中ai…

Linux 内核原理摘录

文章目录 一、Linux 内核设计与实现1、进程管理&#xff08;1&#xff09;调度2、内核数据结构&#xff08;1&#xff09;kfifo 3、中断 一、Linux 内核设计与实现 本章主要用来摘录《Linux 内核设计与实现》一书中学习知识点&#xff0c;其基于 Linux 2.6.34 。 1、进程管理 …

PowerShell install go+caddy+filebrowser+nssm 实现部署文件系统

filebrowser filebrowser 是一个使用go语言编写的软件&#xff0c;功能是可以通过浏览器对服务器上的文件进行管理。可以是修改文件&#xff0c;或者是添加删除文件&#xff0c;甚至可以分享文件&#xff0c;是一个很棒的文件管理器&#xff0c;你甚至可以当成一个网盘来使用。…

找高清视频素材,就上这6个网站。

推荐6个高清视频素材库&#xff0c;免费下载&#xff0c;建议收藏~ 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库可以找到设计、办公、图片、视频、音频等各种素材。视频素材就有上千个&#xff0c;全部都很高清&#xff0c;站内可以按标签分类查找…

某医院访问医保系统慢流量分析案例

背景 我们已将NetInside流量分析系统部署到某市人民医院的机房内&#xff0c;使用流量分析系统提供实时和历史原始流量。本次分析重点针对访问外网医保系统性能进行分析&#xff0c;以供安全取证、性能分析、网络质量监测以及深层网络分析。 分析时间 报告分析时间范围为&am…

【Linux】进程间通讯

前提知识 进程间具有独立性 &#xff0c;现在我们要打破独立性&#xff0c;去通讯&#xff0c;所以 通讯的成本一定很高。 又时候又需要多进程协同完成某种业务内容 &#xff0c;例如以前&#xff1a; cat file | grep “hello",这就是两个进程之间的通讯。 通讯的本质就是…

【一文学会MQTT协议和mosquitto】

一文学会MQTT协议和mosquitto 一.、MQTT的基本概念二、mosquittomosquitto基本概念常用API 三、MQTT测试EMQX 一.、MQTT的基本概念 MQTT是一种基于发布/订阅模式的协议&#xff0c;其中发布者发布消息&#xff0c;订阅者订阅感兴趣的主题&#xff08;topic&#xff09;&#x…

QGIS--开发OpenSCENARIO动态场景(二)--安装插件

1.下载并安装ad_map&#xff08;无需构建&#xff09;&#xff1a; 1&#xff09;ad_map插件&#xff1a; https://github.com/carla-simulator/map/releases 下载第一个&#xff1a;ad_map_access_qgis.zip 2&#xff09;导入插件&#xff1a; 从MenuBar的Plugins >…