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

简介: 说明如何使用 K 均值聚类自动分割颜色。聚类是一种分离对象组的方法。K 均值聚类将每个对象视为在空间中有一个位置。它将对象划分为若干分区,使每个簇中的对象尽可能彼此靠近,并尽可能远离其他簇中的对象。您可以使用 函数将图像像素按值分成一个颜色空间内的若干个簇。此示例在 RGB 和 L*a*b* 颜色空间中执行图像的 k 均值聚类,以显示使用不同颜色空间如何改进分割结果。


一、前言
此示例说明如何使用 K 均值聚类自动分割颜色。
聚类是一种分离对象组的方法。K 均值聚类将每个对象视为在空间中有一个位置。它将对象划分为若干分区,使每个簇中的对象尽可能彼此靠近,并尽可能远离其他簇中的对象。您可以使用 函数将图像像素按值分成一个颜色空间内的若干个簇。此示例在 RGB 和 Lab 颜色空间中执行图像的 k 均值聚类,以显示使用不同颜色空间如何改进分割结果。
二、实现步骤
步骤 1:读取图像
在 中读取,这是一个带有苏木精和曙红染色组织 (H&E) 的图像。这种染色方法有助于病理学家区分染成蓝-紫色和粉红色的组织类型。
1.png
步骤 2:用 K 均值聚类对 RGB 颜色空间的颜色进行分类
在 RGB 颜色空间中使用 k 均值聚类将图像分割成三个区域。对于输入图像中的每个像素, 函数返回一个对应的簇标签。
将标注图像叠加显示在原始图像上。标注图像将白色、浅蓝-紫色和浅粉色区域组合在一起,这是不正确的。由于 RGB 颜色空间合并了每个通道(红、绿、蓝)内的亮度和颜色信息,因此两种不同颜色的较亮版本比这两种颜色的较暗版本更接近,也更难分割。
2.png
步骤 3:将图像从 RGB 颜色空间转换为 L
ab 颜色空间
Lab* 颜色空间将图像的光度和颜色分开。这使得按颜色分割区域变得更加容易并且与亮度无关。颜色空间也更符合人类对图像中不同的白色、蓝-紫色和粉色区域的视觉感知。

Lab 颜色空间是从 CIE XYZ 三色值派生的。Lab 空间包含光度层 L、色度层 a(表示颜色落在沿红-绿轴的位置)和色度层 b(表示颜色落在沿蓝-黄轴的位置)。所有颜色信息都在 a 和 b* 层。

使用 函数将图像转换为 Lab* 颜色空间。

步骤 4:用 K 均值聚类对基于 ab 空间的颜色进行分类
要仅使用颜色信息分割图像,请将图像限制为 中的 a 和 b 值。将图像转换为 数据类型,以便于 函数使用。使用 函数将图像像素分成三个簇。将 名称-值参数的值设置为使用不同的初始簇质心位置重复聚类三次,以避免拟合局部最小值。

将标注图像叠加显示在原始图像上。新标注图像将白色、蓝紫色和粉色染色组织区域更清晰地区分开来。
3.png
步骤 5:创建按颜色分割 H&E 图像的图像
使用 ,您可以按颜色分离原始图像 中的对象,从而产生三个掩膜图像。
4.png
5.png
6.png
步骤 6:分割核
簇 3 中仅包含蓝色对象。请注意,有深蓝色和浅蓝色对象。您可以使用 Lab 颜色空间中的 L 层来分离深蓝色和浅蓝色。细胞核为深蓝色。
L* 层包含每个像素的亮度值。提取此簇中像素的亮度值,并使用 函数用全局阈值对其设置阈值。掩膜 给出了浅蓝色像素的索引。
复制蓝色对象的掩膜 ,然后从掩膜中删除浅蓝色像素。将新掩膜应用于原始图像并显示结果。只有深蓝色细胞核可见。
7.png

目录
相关文章
|
Python
利用Python计算两点之间的距离
利用Python计算两点之间的距离
1505 0
halcon的灰度变换(图像增强)
halcon的灰度变换(图像增强)
962 1
|
存储 网络协议 安全
阿里云服务器2核8G、4核16G、8核32G选型参考:经济型、通用算力型和通用型选择参考
2核8G、4核16G、8核32G配置是用户关注度比较高的热门配置,在阿里云服务器的实例规格中,这些配置一般有经济型e、通用算力型u1、通用型g7和通用型g8y等多种实例规格,虽然配置相同,但是这些实例规格之间的性能和价格差别是很大的,因此,我们有必要弄清楚他们之间的差别,这样才能根据自己的需求选择最适合自己的实例。本文将为您详细解析这些实例规格的性能、价格及应用场景,以供参考和选择。
阿里云服务器2核8G、4核16G、8核32G选型参考:经济型、通用算力型和通用型选择参考
|
小程序 JavaScript
微信小程序(二十三)微信小程序左上角返回按钮触发事件
返回上一页按钮只会触发上一页的onShow生命周期函数,并不会触发onLoad函数。 因此我们需要在onShow函数中做一些设置: 大概是操作流程,从日程页跳转至实验列表页,再点击实验列表页 左上角的返回键,返回日程页重新获取页面数据。 我这里直接上代码: 实验列表页代码:
1354 0
微信小程序(二十三)微信小程序左上角返回按钮触发事件
|
SQL 安全 数据库连接
【Qt运行流程详解】从启动到事件循环的深入解读
【Qt运行流程详解】从启动到事件循环的深入解读
1333 3
|
移动开发 数据可视化 前端开发
制作酷炫可视化大屏利器--分享10种比较流行的开源免费的图表库
制作酷炫可视化大屏利器--分享10种比较流行的开源免费的图表库
1199 0
|
C++
[Halcon&定位] 解决Roi区域外的模板匹配成功
[Halcon&定位] 解决Roi区域外的模板匹配成功
443 0
|
JSON API 图形学
Unity 接入高德开放API - 天气查询
Unity 接入高德开放API - 天气查询
762 1
Unity 接入高德开放API - 天气查询
|
存储 监控 安全
JVM垃圾回收器介绍和对比
JVM垃圾回收器介绍和对比
483 0
|
API 计算机视觉
Opencv实战案例——模板匹配实现银行卡号识别(附详细介绍及完整代码下载地址)(二)
Opencv实战案例——模板匹配实现银行卡号识别(附详细介绍及完整代码下载地址)
507 0
Opencv实战案例——模板匹配实现银行卡号识别(附详细介绍及完整代码下载地址)(二)