热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

并行计算SLIC超像素算法(一)大致描述

SLIC算法是simplelineariterativecluster的简称,该算法用来生成超像素(superpixel)。目录基本思

SLIC算法是simple linear iterative cluster的简称,该算法用来生成超像素(superpixel)。

目录

基本思想

实现SLIC算法

1.图像的预处理

2.初始化聚类中心

3.优化初始聚类中心

4. 计算像素点与聚类中心的距离

5.像素点分类

6.重新计算聚类中心

7.迭代4~6的过程

8.聚类优化




基本思想

将图像从RGB颜色空间转换到CIE-Lab颜色空间,对应每个像素的(L,a,b)颜色值和(x,y)坐标组成一个5维向量V [L, a, b, x, y ],两个像素的相似性即可由它们的向量距离来度量,距离越大,相似性越小。


实现SLIC算法


1.图像的预处理

将图像从 RGB 颜色空间转换到 CIE-Lab 颜色空间,Lab颜色空间更符合人类对颜色的视觉感知。这个空间里的距离能反映人感觉到的颜色差别,相关计算更为准确。

Lab 颜色空间同样具有三个通道,分别是 l,a,b,其中 l 代表亮度,数值范围为 [0, 100],a 表示从绿色到红色的分量,数值范围为[-128, 127],b表示蓝色到黄色的分量,数值范围为[-128, 127]。

RGB 和 LAB 间没有直接的转换公式,需要将 RGB 转为 XYZ 颜色空间再转为 LAB,具体代码见下一篇中完整代码。


2.初始化聚类中心

根据参数确定超像素的数目,也就是需要划分为多少个区域。假设图片有 N 个像素点,预计分割成 K 个超像素,每个超像素大小为 N/K。相邻中心距离为 S = Sqr(N/K),得到 k 个聚类的坐标。

 

 注:推导相邻中心的距离:

N个像素点可以看作整个图形的面积为N,要分成K个小正方形。每个小正方形的面积就为 N/K。那么小正方形的边长为 Sqr(N/K)。所以相邻中心的距离也为 Sqr(N/k)。


3.优化初始聚类中心

在聚类中心的 3 * 3 邻域内选择梯度最小的像素点作为新的聚类中心。

把图像看成二维离散函数,梯度也就是这个函数的求导,当相邻像素值有变化就会存在梯度,而在边缘上的像素点的梯度最大。将聚类中心挪到梯度最小的地方可以避免其落到边缘轮廓上,影响聚类效果。

计算一个点 (i, j) 的像素梯度公式为:


4. 计算像素点与聚类中心的距离

在聚类中心距离为 S 的区域内,2S * 2S 的领域内计算像素点与每个聚类中心的距离。

这里的距离使用的是欧式距离,总距离 由 dc颜色距离与 ds空间距离两部分组成。公式如下:

 

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

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

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

距离公式即变成了

 当m越大,颜色空间除以m后的值越小,即空间距离的权重越大,生成的像素会更为形状规则,当m越小,颜色距离权重更大,超像素会在边缘更为紧凑,而形状大小较为不规则。


5.像素点分类

标记每个像素点的类别为距离其最小的聚类中心的类别。


6.重新计算聚类中心

计算属于同一个聚类的所有像素点的平均向量值,重新得到聚类中心 。


7.迭代4~6的过程

直到旧聚类中心与新聚类中心的距离小于一定阈值或者达到一定迭代次数,一般来说,当迭代次数到达10,算法能够达到收敛。


8.聚类优化

迭代到最后,可能会出现与聚类中心不属于同一连通域的孤立像素点,可以使用到连通算法将其分配到最近的聚类标签。


推荐阅读
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • [论文笔记] Crowdsourcing Translation: Professional Quality from Non-Professionals (ACL, 2011)
    Time:4hoursTimespan:Apr15–May3,2012OmarZaidan,ChrisCallison-Burch:CrowdsourcingTra ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文将介绍由密歇根大学Charles Severance教授主讲的顶级Python入门系列课程,该课程广受好评,被誉为Python学习的最佳选择。通过生动有趣的教学方式,帮助初学者轻松掌握编程基础。 ... [详细]
author-avatar
好天气
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有