使用Kmeans进行图像聚类

news2024/9/28 17:26:35

Kmeans可以用于与发现聚类相关的其他任务 

4761065a6a4b12273ba86f6f4792c4f7.jpeg

介绍

聚类是一种无监督机器学习技术。这意味着您的数据集没有标签,即与解释变量发现的模式关联的目标变量。

无监督学习是找到看似相似的模式并将它们放入同一个桶中的过程。

最常用的无监督学习算法之一是Kmeans,用于聚类。使用它,可以对常规数据进行聚类,还可以执行其他任务,例如图像中的颜色聚类以及用于进一步分类的降维。

让我们更详细地了解一下。

Kmeans

Kmeans 是一种基于质心的聚类算法。换句话说,当它执行任务时,它将基于每个聚类的中心点和每个数据点与聚类中心的距离做出所有决策。观察与聚类中心之间的距离越小,它属于该聚类的概率就越高。

该算法计算点之间的欧氏距离,而聚类将具有圆形形状,基本上是Kmeans的一个缺点。毕竟,并不是所有模式都会创建圆形形状,对吧?但使用Kmeans进行数据聚类非常简单。您只需将数据集输入算法并定义要使用的聚类数量。其余部分是自动的。

from sklearn.cluster import KMeans
# Number of clusters
n = 3
# Fit and predict clusters
kmeans = KMeans(n_clusters= n).fit_predict(your_data)

现在让我们学习一下我们可以使用Kmeans做的其他有趣事情。

图像聚类

首先要学习的是图像聚类。使用Kmeans,我们实际上可以将图像分离为不同的颜色。看看为此练习创建的这张图片。

178112aad50227a2021b135e7e51acd8.png

接下来,我们可以从matplotlib.image读取图像。创建的对象将是一个三维数组,具有高度、宽度和第三个维度,其中包含像素的颜色红色、绿色和蓝色(RGB)的数量。然后,我们将重塑图像,使其成为Kmeans可解释的像素的平坦数组。

# Read image
image = imread('/content/test_image.png')
# Reshape for KMeans
X = image.reshape(-1,3)

接下来,让我们对其进行聚类。我们可以想象,由于有3种颜色,因此最佳的聚类数量将为3。我们必须尝试一下。

# cluster
kmeans = KMeans(n_clusters = 3).fit(X)

在这里,Kmeans试图识别我们图片中存在的颜色并将它们组合在一起。所以,由于我们看到了红色、绿色和黄色,想法是:

  • 该算法将根据我们的要求创建3个单独的桶。

  • 识别颜色相似的像素,并创建一个平均的“标签”颜色,以将所有相似的色调放入同一个桶中。因此,所有绿色色调放在一起,所有黄色色调放在一起,以此类推。

我们的下一步是获取cluster_centers_,这些是每个桶的“平均颜色标签”,然后使用该新的平均颜色覆盖原始颜色。然后我们将其重塑为原始图像的大小。

# Segmenting the colors
segmented_img = kmeans.cluster_centers_[kmeans.labels_]
segmented_img = segmented_img.reshape(image.shape)

现在让我们将图像并排绘制在一起进行比较。

# Setup figure size
plt.figure(figsize=(18,10))
# clustered image
plt.subplot(121)
plt.imshow(segmented_img)
#original image
plt.subplot(122)
plt.imshow(image)

5e25cf91ec101683b5fd2c4c49122e05.png

3个聚类的图像(左)和原始图像(右)


在这里,我们使用了3个聚类中心点。但是我们可能忘记考虑白色背景了。因此,红色和黄色被粘在一起,放在“橙色”桶下,这是两种颜色之间的混合(平均)颜色。很神奇,不是吗?现在让我们尝试将聚类的中心点设置为4个,再次比较结果。

# cluster
kmeans = KMeans(n_clusters = 4).fit(X)
segmented_img = kmeans.cluster_centers_[kmeans.labels_]
segmented_img = segmented_img.reshape(image.shape)
# Setup figure
plt.figure(figsize=(18,10))
# clustered image
plt.subplot(121)
plt.imshow(segmented_img)
plt.title('Reconstructed image with 4 clusters')
#original image
plt.subplot(122)
plt.imshow(image)
plt.title('Original Image');

779f9cf67e7a48766e3149f0b697b98e.png

4个聚类的图像(左)和原始图像(右)

·  END  ·

HAPPY LIFE

f337a675b5bfa7f0982564635e6ee7d9.png

本文仅供学习交流使用,如有侵权请联系作者删除

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

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

相关文章

冠达管理:紧盯必要性 追问合理性 再融资问询透露监管新动向

在“活泼资本市场,提振出资者决心”一系列办法落地之后,再融资市场整体已明确收紧,但审阅尺度、相关细则还有待进一步观察。有接受采访的投行人士指出,现在存量项目仍在持续推进,监管审阅要点已在问询环节有较为充沛的…

2.7 PE结构:重定位表详细解析

重定位表(Relocation Table)是Windows PE可执行文件中的一部分,主要记录了与地址相关的信息,它在程序加载和运行时被用来修改程序代码中的地址的值,因为程序在不同的内存地址中加载时,程序中使用到的地址也…

单月打造8个10w+,情感类视频号如何爆火?

上月,腾讯公布了2023年Q2财报,其中,较为亮眼的是微信视频号的广告收入。据财报显示,二季度视频号用户使用时长与去年同期相比几乎翻倍,广告收入超过30亿元。作为微信生态的核心组件,视频号的内容生态呈现出…

C/C++浮点数向零舍入 2019年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C浮点数向零舍入 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 C/C浮点数向零舍入 2019年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 输入一个单精度浮点数&#…

09-JVM垃圾收集底层算法实现

上一篇:08-JVM垃圾收集器详解 1.三色标记 在并发标记的过程中,因为标记期间应用线程还在继续跑,对象间的引用可能发生变化,多标和漏标的情况就有可能发生。 这里我们引入“三色标记”来给大家解释下,把Gcroots可达性…

uni-app动态tabBar,根据不同用户展示不同的tabBar

1.uni框架的api实现 因为我们用的是uni-app框架开发,所以在创建项目的时候直接创建uni-ui的项目即可,这个项目模板中自带了uni的一些好用的组件和api。 起初我想着这个效果不难实现,因为官方也有api可以直接使用,所以我最开始尝试…

DeeTune:基于 eBPF 的百度网络框架设计与应用

作者 | 百度APP云原生技术研发组 导读 随着云计算的技术的不断迭代演进,百度内部服务逐渐搬迁到云环境中,部署成本和效率取得明显收益,但一些可观测能力的短板和缺失逐渐显露,传统的方式往往通过植入代码进行修改来实现&#xff0…

esp-hosted 方案介绍

esp-hosted SDK esp-hosted 方案介绍 esp-hosted 方案主要为 Linux 或者 MCU 提供无线连接功能(WiFi 或者 BT/BLE) esp-hosted 解决方案包含了 esp-hosted FG 和 esp-hosted NG 两套方案 与传统 WiFi 网卡的区别在于 ESP 设备端需要烧录固件&#xff0…

RGMII 与 GMII 转换电路设计

文章目录 前言一、RGMII 接口的信号说明二、RGMII 发送的 FPGA 实现方案1. OPPOSITE_EDGE 模式2. SAME_EDGE 模式三、使用 FPGA 实现 RGMII 接口前言 RGMII 是 IEEE802.3z 标准中定义的千兆媒体独立接口(Gigabit Medium Independent Interface)GMII 的一个替代品。相较于 GM…

详解Redis之Lettuce实战

摘要 是 Redis 的一款高级 Java 客户端,已成为 SpringBoot 2.0 版本默认的 redis 客户端。Lettuce 后起之秀,不仅功能丰富,提供了很多新的功能特性,比如异步操作、响应式编程等,还解决了 Jedis 中线程不安全的问题。 …

Python中的依赖管理是什么? - 易智编译EaseEditing

Python中的依赖管理是指管理和跟踪项目所依赖的外部软件包或库的过程。 在Python项目中,通常会使用许多第三方库或模块来实现特定的功能,而依赖管理就是确保这些库可以正确地安装、更新和卸载,以确保项目的可靠性和稳定性。 以下是Python中…

正则表达式使用总结

一、字符匹配 普通字符:普通字符按照字面意义进行匹配,例如匹配字母 "a" 将匹配到文本中的 "a" 字符。 元字符:元字符具有特殊的含义,例如 \d 匹配任意数字字符,\w 匹配任意字母数字字符&#xf…

Market Insight:中国低代码/零代码市场典型供应商名录(2023)发布

Market Insight:典型供应商名录根据厂商调研、行业用户点评、研究团队评估来综合确定。典型供应商名录的入围者拥有值得客户信赖的能力,这种能力可以表现在产品与技术、服务能力、市场力等其中的一项或多项。典型供应商名录的入围者可以是市场领导者&…

Exception_json反序列化失败_JSONException

TokenGroup tokenGroup JSONObject.parseObject(tokenGroup1, TokenGroup.class);com.alibaba.fastjson.JSONException: create instance error, null, public com.daikin.snapshot.controller.auth.token.TokenGroup 解决方法: 在反序列化失败的实体类添加无参构造方法

学习笔记|回顾(1-12节课)|应用模块化的编程|添加函数头|静态变量static|STC32G单片机视频开发教程(冲哥)|阶段小结:应用模块化的编程(上)

文章目录 1.回顾(1-12节课)2.应用模块化的编程(.c .h)Tips:添加函数头创建程序文件三步引脚定义都在.h文件函数定义三步bdata位寻址变量的使用 3.工程文件编写静态变量static的使用完整程序为:demo.c:seg_led.c:seg_led.h: 1.回顾(1-12节课) 一、认识单…

数字化新零售营销模式如何落地?数字化新零售营销功能推荐

​通过科技手段,针对对线下零售店面的客户进行消费行为、频次等的分析,并进一步整合线上线下资源,实现实体零售的效率充分化,便是目前很火的新零售营销模式,能够将实体门店与数字化技术进行有机结合,通过为…

在Photoshop上标小图标的操作记录

1、做小图标 收集背景图 的背景的rgb值 把这个rgb值记下来,上面的背景要用。 2、统一图标大小 宽度、高度,都设置成1.52 3、把图标往地图上拖 拖到背景图上,可以用上下左右键调整位置 4、在图片上写字 右键这个,就可以写字了。…

SpringBoot / Vue 对SSE的基本使用(简单上手)

一、SSE是什么? SSE技术是基于单工通信模式,只是单纯的客户端向服务端发送请求,服务端不会主动发送给客户端。服务端采取的策略是抓住这个请求不放,等数据更新的时候才返回给客户端,当客户端接收到消息后,…

异步编程 - 06 基于JDK中的Future实现异步编程(中)_CompletableFuture源码解析

文章目录 CompletableFuture 类图结构CompletionStage接口属性resultstackasyncPool 方法CompletableFuture<Void>runAsync(Runnable runnable)CompletableFuture<U> supplyAsync(Supplier<U>supplier)CompletableFuture<U> supplyAsync(Supplier<U…

【java】【SSM框架系列】【一】Spring

目录 一、简介 1.1 为什么学 1.2 学什么 1.3 怎么学 1.4 初识Spring 1.5 Spring发展史 1.6 Spring Framework系统架构图 1.7 Spring Framework学习线路 二、核心概念&#xff08;IoC/DI&#xff0c;IoC容器&#xff0c;Bean&#xff09; 2.1 概念 2.2 IoC入门案例 …