基于像素特征的kmeas聚类的图像分割方案

news2024/9/28 20:47:01

kmeans聚类代码

将像素进行聚类,得到每个像素的聚类标签,默认聚类簇数为3

def seg_kmeans(img,clusters=3):
    img_flat=img.reshape((-1,3))
    # print(img_flat.shape)

    img_flat=np.float32(img_flat)
    criteria=(cv.TERM_CRITERIA_MAX_ITER+cv.TERM_CRITERIA_EPS,20,0.5)
    flags=cv.KMEANS_RANDOM_CENTERS
    ret,labels,centers=cv.kmeans(data=img_flat,K=clusters,bestLabels=None,criteria=criteria,attempts=10,flags=flags)
    return labels

为显示分割后的图像,将标签进行颜色映射,下述代码中,将第一类标签映射为绿色,第二类标签映射为蓝色,第三类标签映射为红色等:

def img_res(labels):
    color = np.uint8([[255, 0, 0],
                      [0, 0, 255],
                      [0, 255, 0],
                      [255,255,0]])
    res = color[labels.flatten()]  # 像素映射
    result = res.reshape((img.shape))
    return result

为探究不同聚类簇数的影响,分别采用聚类簇数clusters为2、3、4进行结果显示

RGB颜色模型下的聚类效果

HSV颜色模型下的聚类效果

完整源码

import cv2 as cv
import matplotlib.pyplot as plt
import os
import numpy as np

def img_read(pattern=cv.IMREAD_GRAYSCALE):#默认显示灰度图
    path=os.path.abspath(".")
    img_path=path+r"\data\twins.jpg"
    img=cv.imread(img_path,pattern)
    return img

def seg_kmeans(img,clusters=3):
    img_flat=img.reshape((-1,3))
    # print(img_flat.shape)

    img_flat=np.float32(img_flat)
    criteria=(cv.TERM_CRITERIA_MAX_ITER+cv.TERM_CRITERIA_EPS,20,0.5)
    flags=cv.KMEANS_RANDOM_CENTERS
    ret,labels,centers=cv.kmeans(data=img_flat,K=clusters,bestLabels=None,criteria=criteria,attempts=10,flags=flags)
    return labels

def img_res(labels):
    color = np.uint8([[255, 0, 0],
                      [0, 0, 255],
                      [0, 255, 0],
                      [255,255,0]])
    res = color[labels.flatten()]  # 像素映射
    result = res.reshape((img.shape))
    return result

def plot_res(img):
    clusters = [2, 3, 4]  # 聚类簇数
    img_list = [img] * len(clusters)
    # 采取不同的聚类簇数进行聚类
    labels = map(seg_kmeans, img_list, clusters)#map函数返回一个迭代器对象
    labels = [np.array(label) for label in labels]
    # 对结果进行颜色映射,便于输出
    results = map(img_res, labels)
    plt.subplot(2, 2, 1), plt.imshow(img)
    for i, res in enumerate(results):
        plt.subplot(2, 2, i + 2)
        plt.imshow(res)
        plt.title('k=' + str(i + 2))
    plt.subplots_adjust(hspace=0.5)
    plt.show()

if __name__=="__main__":
    img=img_read(pattern=None)
    img_RGB=cv.cvtColor(img,cv.COLOR_BGR2RGB)
    img_HSV=cv.cvtColor(img,cv.COLOR_BGR2HSV)
    plot_res(img_RGB)
    plot_res(img_HSV)

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

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

相关文章

《白帽子讲web安全》

第十四章 PHP安全 文件包含漏洞是“代码注入”的一种。“代码注入”这种攻击,其原理就是注入一段用户能控制的脚本或代码,并让服务器端执行。“代码注入”的典型代表就是文件包含(File Inclusion)。文件包含可能会出现在JSP、PHP…

如何有效的禁止Google Chrome自动更新?

禁止Chrome自动更新 1、背景2、操作步骤 1、背景 众所周知,当我们在使用Selenium进行Web自动化操作(如爬虫)时,一般会用到ChromeDriver。然而Driver的更新速度明显跟不上Chrome的自动更新。导致我们在使用Selenium进行一些操作时就…

新加坡服务器托管-金融企业的选择

新加坡作为一个亚洲金融中心,其优越的地理位置和先进的信息通信技术基础设施,使得其成为了众多金融机构企业选择服务器机房托管的理想地点。金融行业对于服务器的安全性和可靠性要求很高,而将服务器托管在新加坡有许多好处。 首先&#xff0c…

新零售数字化系统提供商怎么选择?2023十大收银系统排行榜-亿发

随着零售业务的日益繁荣和电子商务的迅猛发展,零售收银系统已成为各类商家提高效率、管理库存、提供更好服务的不可或缺的工具。然而,在众多的收银系统中,如何选择一款适合自己的,一直是许多商家头疼的问题。今天我们就来盘点一下…

java项目之木里风景文化管理平台(ssm+vue)

项目简介 木里风景文化管理平台实现了以下功能: 前台功能:用户进入系统可以实现首页,旅游公告,景区,景区商品,景区美食,旅游交通工具,红黑榜,个人中心,后台…

Spark---核心介绍

一、Spark核心 1、RDD 1)、概念: RDD(Resilient Distributed Datest),弹性分布式数据集。 2)、RDD的五大特性: 1、RDD是由一系列的partition组成的 2、函数是作用在每一个partition(split…

SSM高考志愿辅助推荐系统-计算机毕业设计附源码21279

目 录 摘要 1 绪论 1.1 研究背景 1.2研究意义 1.3论文结构与章节安排 2 高考志愿辅助推荐系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2…

基于社交网络算法优化概率神经网络PNN的分类预测 - 附代码

基于社交网络算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于社交网络算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于社交网络优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

wsl安装ubuntu的问题点、处理及连接

WSL安装Ubuntu的参考链接 (41条消息) wsl报错:WslRegisterDistribution failed with error: 0x800701bc_yzpyzp的博客-CSDN博客_0x800701bc wsl (41条消息) 使用Ubuntu安装软件出现Unable to locate package错误解决办法_大灰狼学编程的博客-CSDN博客 手把手教你…

excel自定义函数之汉字转为拼音及大写字母

使用场景:想把姓名转化为拼音格式,然后拼音转为大写字母 至于怎么在excel里面自定义函数,自行百度都有,这里简单截图看看。 步骤:文件》选项》自定义功能区》 打开编辑窗口 把下面这段代码粘贴就能实现汉字转化为拼音…

医疗器械维修售后技术培训与支持的重要性

医疗器械维修售后技术培训与支持的重要性 随着我国医疗器械产业的的高速发展、医疗器械企业的崛起,大量创新医疗器械产品进入医疗机构。但医疗设备在使用和维护过程中,暴露出许多问题和不足,如部分设备故障率较高、临床工程培训不足、售后服务模式整体比较落后等,这影响了医疗…

【JUC】十、ForkJoin

文章目录 1、分支合并框架2、案例3、ForkJoinTask4、工作窃取算法5、ForkJoinPool 一个个任务执行在一个个线程上,倘若某一个任务耗时很久,期间其他线程都无事可做,显然没有利用好多核CPU这一计算机资源,因此,出现了&q…

红队攻防之Goby反杀

若结局非我所愿,那就在尘埃落定前奋力一搏。 本文首发于先知社区,原创作者即是本人 一、弹xss 为了方便,本次直接使用 PhpStudy 进行建站,开启的web服务要为MySQLNginx,这里的 PhpStudy 地址为 http://x.x.x.x&…

AC修炼计划(AtCoder Beginner Contest 329)

传送门:Sky Inc, Programming Contest 2023(AtCoder Beginner Contest 329) - AtCoder A,B,C,D 这四道题比较简单,就不多叙述。 E - Stamp 这题是一道比较…

模拟量采集----测量输入的电压

生活中的模拟量有很多 大多都为电压信号和电流信号 今天讲如何测量输入的电压信号 由图中的黄线可知,该运放是采用的同相放大器中的电压跟随器 电压跟随器的特点是电压的输入和输出隔离 同相运放的输入与输出的关系是:输出1R2/R1 在图上对应的就是输…

Spring:IoC,AOP的简单理解与使用

IoC容器 IoC ,Spring全家桶各个功能模块的基础,是创建对象的容器。 IoC概念 控制反转,将对象的创建进行反转,常规情况下对象由开发者手动创建,而使用IoC不再需要创建对象,由IoC容器根据需求自动创建项目…

vue实现el-menu与el-tabs联动

效果图如下&#xff1a; 当标签栏很多的时候效果图如下&#xff1a; 左侧菜单布局 &#xff08;$route.path高亮显示激活路由 :default-active"$route.path"&#xff09; <el-menu:default-active"$route.path"class"el-menu-vertical-demo"b…

通达信吊灯止损指标公式,根据波动幅度自动调整止盈止损

吊灯止损指标是由查克勒博(Chuck LeBeau)发明的&#xff0c;亚历山大埃尔德(Alexander Elder)在其著作《走进我的交易室》中介绍了这种止盈止损方法&#xff08;中文版翻译为倒挂式离场法则&#xff09;&#xff0c;它是根据平均真实波幅ATR设置跟踪止损。吊灯止损指标的目的是…

【Java系列】SpringBoot 集成MongoDB 详细介绍

目录 写在前面 一、步骤介绍 步骤 1: 添加 MongoDB 依赖 步骤 2: 配置 MongoDB 连接信息 步骤 3: 创建实体类 步骤 4: 创建 Repository 接口 步骤 5: 使用 Repository 进行操作 二、特殊处理 写在前面 在Spring Boot中集成MongoDB的过程相对简单&#xff0c;以下是一个…

基于单片机公交安全预警系统仿真设计

**单片机设计介绍&#xff0c; 基于单片机公交安全预警系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的公交安全预警系统可以被设计成能够实时监测公交车辆的行驶状态&#xff0c;并在发生异常情况时进行…