52、基于K 均值聚类实现基于颜色的分割(matlab)

news2025/1/11 11:39:24

1、K 均值聚类实现基于颜色的分割原理及流程

K 均值聚类是一种常用的聚类算法,通过将数据点分配到 K 个簇中,每个簇的中心代表簇的平均值来实现聚类的目的。

基于颜色的分割的原理是利用像素的颜色信息来对图像进行分割。首先需要将图像的每个像素点表示为一个特征向量,可以选择 RGB 颜色空间中的颜色分量作为特征向量。然后将这些特征向量作为输入数据,使用 K 均值聚类算法来对图像进行分割。

流程如下:

  1. 初始化 K 个聚类中心,可以随机选择 K 个像素点的颜色作为初始聚类中心。
  2. 对每个像素点计算其到每个聚类中心的距离,将其分配到距离最近的聚类中心所代表的簇中。
  3. 更新每个聚类的中心,即计算每个簇中所有像素点的平均值,并将该平均值作为新的聚类中心。
  4. 重复步骤 2 和 3 直到满足停止条件,如聚类中心不再发生变化或达到指定的迭代次数。
  5. 最终得到 K 个簇,每个簇代表一个颜色分割区域。

通过 K 均值聚类算法实现基于颜色的分割可以将图像分成具有相似颜色的区域,从而实现图像的分割和聚类任务。

2、 K 均值聚类实现基于颜色的分割说明

1)方案

使用 K 均值聚类自动分割颜色

2)简介

聚类是一种分离对象组的方法。K 均值聚类将每个对象视为在空间中有一个位置。它将对象划分为若干分区,使每个簇中的对象尽可能彼此靠近,并尽可能远离其他簇中的对象。

使用 imsegkmeans 函数将图像像素按值分成一个颜色空间内的若干个簇。  

RGB 和 L*a*b* 颜色空间中执行图像的k 均值聚类,以显示使用不同颜色空间如何改进分割结果。

3、读取图片(彩色图片)

代码

he = imread("CT1.png");
imshow(he)
title("H&E Image")

视图效果

4、用 K 均值聚类对 RGB 颜色空间的颜色进行分类

1)说明

在 RGB 颜色空间中使用 k 均值聚类将图像分割成三个区域。对于输入图像中的每个像素,imsegkmeans 函数返回一个对应的簇标签。
将标注图像叠加显示在原始图像上。
标注图像将白色、浅蓝-紫色和浅粉色区域组合在一起,这是不正确的由于 RGB 颜色空间合并了每个通道(红、绿、蓝)内的亮度和颜色信息,因此两种不同颜色的较亮版本比这两种颜色的较暗版本更接近,也更难分割。

代码

numColors = 3;
L = imsegkmeans(he,numColors);
B = labeloverlay(he,L);
imshow(B)
title("K均值聚类效果")

视图效果

 

 5、将图像从 RGB 颜色空间转换为 L*a*b* 颜色空间

1)说明

使用 rgb2lab 函数将图像转换为 L*a*b* 颜色空间。

L*a*b* 颜色空间将图像的光度和颜色分开。这使得按颜色分割区域变得更加容易并且与亮度无关。颜色空间也更符合人类对图像中不同的白色、蓝-紫色和粉色区域的视觉感知。
L*a*b* 颜色空间是从 CIE XYZ 三色值派生的。L*a*b* 空间包含光度层 L*、色度层 a*(表示颜色落在沿红-绿轴的位置)和色度层 b*(表示颜色落在沿蓝-黄轴的位置)。所有颜色信息都在 a* 和 b* 层。


代码

lab_he = rgb2lab(he);

 6、用 K 均值聚类对基于 a*b* 空间的颜色进行分类

1)说明

仅使用颜色信息分割图像,请将图像限制为 lab_he 中的 a* 和 b* 值。
将图像转换为 single 数据类型,以便于 imsegkmeans 函数使用。使用 imsegkmeans 函数将图像像素分成三个簇。将 NumAttempts 名称-值参数的值设置为使用不同的初始簇质心位置重复聚类三次,以避免拟合局部最小值。

2)imsegkmeans()基于 K 均值聚类的图像分割

语法

L = imsegkmeans(I,k) 通过执行 k 均值聚类将图像 I 分割成 k 个簇,并在 L 中返回分割后带标签的输出。

[L,centers] = imsegkmeans(I,k) 还返回簇质心位置 centers

L = imsegkmeans(I,k,Name,Value) 使用名称-值参数来控制 k 均值聚类算法的各个方面。

代码

ab = lab_he(:,:,2:3);
ab = im2single(ab);
pixel_labels = imsegkmeans(ab,numColors,"NumAttempts",4);
%标注图像叠加显示在原始图像上。新标注图像将白色、蓝紫色和粉色染色组织区域更清晰地区分开来。
figure(2)
B2 = labeloverlay(he,pixel_labels);
imshow(B2)
title("聚类四次")

视图效果

 7、创建按颜色分割 H&E 图像的图像

使用 pixel_labels,按颜色分离原始图像中的对象,从而产生三个掩膜图像

1)掩膜图像1代码

figure(3)
mask1 = pixel_labels == 1;
cluster1 = he.*uint8(mask1);
imshow(cluster1)
title("按颜色分割 H&E 图像1");

视图效果

2)掩膜图像2代码 

figure(4)
mask2 = pixel_labels == 2;
cluster2 = he.*uint8(mask2);
imshow(cluster2)
title("按颜色分割 H&E 图像2");

视图效果

3)掩膜图像3代码  

figure(5)
mask3 = pixel_labels == 3;
cluster3 = he.*uint8(mask3);
imshow(cluster3)
title("按颜色分割 H&E 图像3");

视图效果

8、总结

基于K均值聚类实现基于颜色的分割的步骤可以总结为:

  1. 读取图像:首先需要使用MATLAB中的imread函数读取要进行颜色分割的图像。

  2. 特征向量表示:将图像中的每个像素点表示为一个特征向量,通常选择在RGB颜色空间中的颜色分量作为特征向量。

  3. 初始化聚类中心:随机选择K个像素点的颜色作为初始聚类中心。

  4. 分配像素点到簇:计算每个像素点到每个聚类中心的距离,并将其分配到距离最近的聚类中心所代表的簇中。

  5. 更新聚类中心:计算每个簇中所有像素点的平均值,并将该平均值作为新的聚类中心。

  6. 重复更新和分配直到满足停止条件:重复步骤4和5直到聚类中心不再发生变化或达到指定的迭代次数。

  7. 可视化分割结果:根据最终的聚类中心,将图像的像素点重新分配颜色,从而实现基于颜色的图像分割。

在MATLAB中,可以使用自带的kmeans函数来实现K均值聚类,具体操作可以参考MATLAB官方文档和相关教程。

9、源代码

代码

%% K 均值聚类实现基于颜色的分割
%使用 K 均值聚类自动分割颜色。
%聚类是一种分离对象组的方法。K 均值聚类将每个对象视为在空间中有一个位置。它将对象划分为若干分区,使每个簇中的对象尽可能彼此靠近,
%并尽可能远离其他簇中的对象。使用 imsegkmeans 函数将图像像素按值分成一个颜色空间内的若干个簇。 RGB 和 L*a*b* 颜色空间中执行图像的
%k 均值聚类,以显示使用不同颜色空间如何改进分割结果。
%% 读取图片(彩色图片)
he = imread("CT1.png");
imshow(he)
title("H&E Image")
%% 用 K 均值聚类对 RGB 颜色空间的颜色进行分类
%在 RGB 颜色空间中使用 k 均值聚类将图像分割成三个区域。对于输入图像中的每个像素,imsegkmeans 函数返回一个对应的簇标签。
%将标注图像叠加显示在原始图像上。
%标注图像将白色、浅蓝-紫色和浅粉色区域组合在一起,这是不正确的。由于 RGB 颜色空间合并了每个通道(红、绿、蓝)内的亮度和颜色信息,因此两种不同颜色的较亮版本比这两种颜色的较暗版本更接近,也更难分割。
numColors = 3;
L = imsegkmeans(he,numColors);
B = labeloverlay(he,L);
imshow(B)
title("K均值聚类效果")
%% 将图像从 RGB 颜色空间转换为 L*a*b* 颜色空间
%使用 rgb2lab 函数将图像转换为 L*a*b* 颜色空间。
%L*a*b* 颜色空间将图像的光度和颜色分开。这使得按颜色分割区域变得更加容易并且与亮度无关。颜色空间也更符合人类对图像中不同的白色、蓝-紫色和粉色区域的视觉感知。
%L*a*b* 颜色空间是从 CIE XYZ 三色值派生的。L*a*b* 空间包含光度层 L*、色度层 a*(表示颜色落在沿红-绿轴的位置)和色度层 b*(表示颜色落在沿蓝-黄轴的位置)。所有颜色信息都在 a* 和 b* 层。
lab_he = rgb2lab(he);
%% 用 K 均值聚类对基于 a*b* 空间的颜色进行分类
%仅使用颜色信息分割图像,请将图像限制为 lab_he 中的 a* 和 b* 值。
%将图像转换为 single 数据类型,以便于 imsegkmeans 函数使用。使用 imsegkmeans 函数将图像像素分成三个簇。将 NumAttempts 名称-值参数的值设置为使用不同的初始簇质心位置重复聚类三次,以避免拟合局部最小值。

ab = lab_he(:,:,2:3);
ab = im2single(ab);
pixel_labels = imsegkmeans(ab,numColors,"NumAttempts",4);
%标注图像叠加显示在原始图像上。新标注图像将白色、蓝紫色和粉色染色组织区域更清晰地区分开来。
figure(2)
B2 = labeloverlay(he,pixel_labels);
imshow(B2)
title("聚类四次")
%% 创建按颜色分割 H&E 图像的图像
%使用 pixel_labels,按颜色分离原始图像中的对象,从而产生三个掩膜图像
figure(3)
mask1 = pixel_labels == 1;
cluster1 = he.*uint8(mask1);
imshow(cluster1)
title("按颜色分割 H&E 图像1");

figure(4)
mask2 = pixel_labels == 2;
cluster2 = he.*uint8(mask2);
imshow(cluster2)
title("按颜色分割 H&E 图像2");

figure(5)
mask3 = pixel_labels == 3;
cluster3 = he.*uint8(mask3);
imshow(cluster3)
title("按颜色分割 H&E 图像3");


工程文件

https://download.csdn.net/download/XU157303764/89494538

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

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

相关文章

如何用CSS样式实现一个优雅的渐变效果?

CSS渐变效果 CSS渐变(Gradients)是一种让两种或多种颜色平滑过渡的视觉效果,广泛应用于网页背景、按钮、边框等,以创造丰富的视觉体验。CSS提供了线性渐变(Linear Gradients)和径向渐变(Radial…

性能之巅的巴比达内网穿透访问单位的web管理系统

在这个数字化飞速发展的时代,作为一名IT部门的小主管,我经常面临着一项挑战:如何在外网环境下高效、安全地访问我们单位内部部署的Web管理系统。这不仅仅是关乎我个人的工作效率,更是影响到整个团队能否快速响应市场需求的关键。直…

GPT-4o首次引入!全新图像自动评估基准发布!

目录 01 什么是DreamBench? 02 与人类对齐的自动化评估 03 更全面的个性化数据集 04 实验结果 面对层出不穷的个性化图像生成技术,一个新问题摆在眼前:缺乏统一标准来衡量这些生成的图片是否符合人们的喜好。 对此,来自清华大…

高级运维工程师讲述银河麒麟V10SP1服务器加固收回权限/tmp命令引起生产mysql数据库事故实战

高级运维工程师讲述银河麒麟V10SP1服务器加固收回权限/tmp命令引起生产MySql数据库事故实战 一、前言 作为运维工程师经常会对生产服务器进行安全漏洞加固,一般服务厂商、或者甲方信息安全中心提供一些安全的shell脚本,一般这种shell脚本都是收回权限&…

Websocket在Java中的实践——自动注册端点

大纲 依赖自动注册端点端点测试 在 《Websocket在Java中的实践——握手拦截器》中我们使用握手拦截器实现了路径解析的工作。这个过程略显复杂,因为路径解析这样比较底层的工作应该由框架来解决,而不应该交由开发者来做。本文介绍的自动注册端点的功能就…

开箱即用的fastposter海报生成器

什么是 fastposter ? fastposter 海报生成器是一款快速开发海报的工具。只需上传一张背景图,在对应的位置放上组件(文字、图片、二维码、头像)即可生成海报。 点击代码直接生成各种语言 SDK 的调用代码,方便快速开发。 软件特性&…

2024高考录取分数线一览表(含一本线、二本线、专科线)

2024年全国各地的高考录取分数线已经全部公布,查大学网(www.chadaxue.com)为大家整理全国31个省市高考录取分数线汇总,包括本科批(一本分数线线和二本分数线)、专科批和特殊类招生控制分数线汇总&#xff0…

ArcGIS中将测绘数据投影坐标(平面坐标)转地理坐标(球面经纬度坐标)

目录 前言1.测绘数据预览1.1 确定带号1.2 为什么是对Y轴分带,而不是对X轴分带? 2 测绘数据转shp2.1 添加数据2.2 显示XY数据2.3 添加经纬度字段2.4 计算经纬度 3.shp数据重投影4.总结 前言 最近在刚好在做一个小功能,将测绘数据转为经纬度坐标…

2024年值得信赖的在线代理IP服务商

在当今的网络世界中,代理IP服务成为了许多企业和个人在进行网络数据处理、多账号管理等任务时不可或缺的工具。然而,面对市场上众多的代理IP服务商,如何挑选出真正值得信赖的服务商成为了一大难题。作为专业的测评团队,我们近期对…

cuda编码入门学习笔记

在日常深度学习和科学计算中,使用图形处理器(GPU)进行加速是一个常见的做法。CUDA (Compute Unified Device Architecture) 是英伟达公司提供的用于GPU编程的平台和编程模型。同时它是一种并行计算模型,允许开发人员使用标准C语言对GPU进行编程。CUDA的核心思想是将任务分解为…

React+TS前台项目实战(二十一)-- Search业务组件封装实现全局搜索

文章目录 前言一、Search组件封装1. 效果展示2. 功能分析3. 代码详细注释4. 使用方式 二、搜索结果展示组件封装1. 功能分析2. 代码详细注释 三、引用到文件,自行取用总结 前言 今天,我们来封装一个业务灵巧的组件,它集成了全局搜索和展示搜…

关于vs code中Live Server插件安装后无法打开的问题

一、问题情况 安装好Live Server插件之后,点击open with live server只会出现界面右下角落的提示,但是不会跳转到浏览器的页面:如下所示: 二:解决步骤 1、首先进行扩展设置,默认将浏览器的设置为chrome浏览…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于改进目标级联分析法的交直流混联系统发电-备用分布式协同调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

MFC扩展库BCGControlBar Pro v35.0新版亮点 - 工具栏、菜单全新升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。 BCGControlBar专业版 v35.0已全新发布了,这个版本改进类Visual Studio 2022的视觉主题、增强对多个…

昇思25天学习打卡营第11天 | ResNet50迁移学习

内容介绍: 在实际应用场景中,由于训练数据集不足,所以很少有人会从头开始训练整个网络。普遍的做法是,在一个非常大的基础数据集上训练得到一个预训练模型,然后使用该模型来初始化网络的权重参数或作为固定特征提取器…

算法力扣刷题记录 二十三【151.翻转字符串里的单词】

前言 字符串篇,继续。 记录 二十三【151.翻转字符串里的单词】 – 一、题目阅读 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词…

【Python报错】已解决 ModuleNotFoundError: No module named ‘transformers‘

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 ModuleNotFoundError: No module named ‘transformers’ 是一个常见的错误,它表明你的Python环境中没有安装t…

2023阿里巴巴全球数学竞赛决赛中的LLM背景题解析(应用与计算数学部分第2题)...

早点关注我,精彩不错过! 最近闹得沸沸扬扬的姜萍事件果真又成了世界就是个草台班子的有力论据。无论真相如何,各自心怀鬼胎,自有策略的合作看起来就一定是一场场的闹剧。 无意作过多评论,也绝不妄下言论,就…

Unity之自定义Text组件默认属性值

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity之自定义Text组件默认属性值 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取!…

硬件实用技巧:刚挠板pcb是什么

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140060334 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…