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

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_CENTERSret,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 npdef img_read(pattern=cv.IMREAD_GRAYSCALE):#默认显示灰度图path=os.path.abspath(".")img_path=path+r"\data\twins.jpg"img=cv.imread(img_path,pattern)return imgdef 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_CENTERSret,labels,centers=cv.kmeans(data=img_flat,K=clusters,bestLabels=None,criteria=criteria,attempts=10,flags=flags)return labelsdef 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 resultdef 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.mzph.cn/news/155770.shtml

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

相关文章

stack和queue简单实现(容器适配器)

容器适配器 stack介绍stack模拟实现queue 介绍queue模拟实现deque stack介绍 stack模拟实现 以前我们实现stack,需要像list,vector一样手动创建成员函数,成员变量。但是stack作为容器适配器,我们有更简单的方法来实现它。 可以利用模板的强大…

练习六-使用Questasim来用verilog使用function函数

[TOC](使用Questasim来用verilog使用function函数 1,verilog中使用函数function2,RTL代码3,测试代码4,输出波形 1,verilog中使用函数function 目的: (1)了解函数的定义和在模块设计中…

【面试】测试/测开(未完成版)

1. 黑盒测试方法 黑盒测试:关注的是软件功能的实现,关注功能实现是否满足需求,测试对象是基于需求规格说明书。 1)等价类:有效等价类、无效等价类 2)边界值 3)因果图:不同的原因对应…

日常办公:批处理编写Word邮件合并获取图片全路径

大家在使用Word邮件合并这个功能,比如制作席卡、贺卡、准考证、员工档案、成绩单、邀请函、名片等等,那就需要对图片路径进行转换处理,此脚本就是直接将图片的路径提取出来,并把内容放到txt格式的文本文档里,打开Excel…

九韵和声 饕餮盛宴丨音乐和声与校友情谊的完美交融

“九韻和聲”音樂會於11月19日晚上在深圳大劇院盛大舉行。來自各高校深圳校友會的逾千名同學們歡聚一堂,共同慶祝自己的合唱音樂會。 首次舉辦合唱音樂會 “九韵和声”音乐会由深圳市西安交通大学校友会牵头发起、主办,与深圳市清华大学校友会、深圳市浙…

微信小程序知识付费平台,公众号App+SAAS+讲师端,多端部署

三勾知识付费系统基于thinkphp8element-plusuniapp打造的面向开发的知识付费系统,方便二次开发或直接使用,可发布到多端,包括微信小程序、微信公众号、QQ小程序、支付宝小程序、字节跳动小程序、百度小程序、android端、ios端。 功能包含直播…

欧拉操作系统下离线安装字体的操作步骤

背景 某 Web 应用部署到欧拉操作系统后,应用中导出的 PDF 文件中文全部显示乱码,原因是字体缺失,但是目标系统上并没有联网,必须找到字体的离线安装包。 CSDN 上还有40个积分,下载了两个相关的资源后,目标…

OpenAI 董事会宫斗始作俑者?一窥伊尔亚·苏茨克维内心世界

OpenAI 董事会闹剧应该是暂告一个段落了,Sam Altman和Greg Brockman等一众高管均已加入微软,还有员工写联名信逼宫董事会的戏码,关注度已经降下来了。 但是,这场宫斗闹剧的中心人物Ilya Sutskever大家关注度不算太高。他本人是纯粹的技术男,极少抛头露面透露其内心世界。…

FISCO BCOS 3.0【01】搭建第一个区块链网络

官方技术文档:https://fisco-bcos-doc.readthedocs.io/zh-cn/latest/index.html 我们在官方技术文档的基础上,进行,对文档中一些不清楚的地方进行修正 搭建Air版本FISCO BCOS联盟链本节以搭建单群组FISCO BCOS链为例操作,使用开发部署工具build_chain.sh脚本在本地搭建一条…

Java中的抽象类和接口

目录 1. 抽象类 1.1 抽象类概念 1.2 抽象类语法 1.3 抽象类需要注意的点 1.4 抽象类的作用 2. 接口 2.1 接口的概念 2.2 语法规则 2.3 接口使用 2.4 接口特性 2.5 实现多个接口 2.6 接口间的继承 2.7 接口使用实例 2.8 Clonable接口,浅拷贝和深拷贝 2.9 抽…

算法分析与设计课后练习23

求下面的0-1背包问题 (1)N5,M12,(p1,p2,…,p5)(10,15,6,8,4),(w1,w2,…,w5)(4,6,3,4,2) (2)N5,M15,(p1,p2,…,p5)(w1,w2,…,w5)(4,4,5,8,9)

Keka v1.3.5(mac压缩解压工具)

Keka是一款功能强大的文件压缩和解压缩软件,为Mac系统用户提供便捷、高效的文件管理工具。以下是Keka的主要特点和功能: 多种压缩格式支持:Keka支持多种常见的压缩格式,包括ZIP、7Z、RAR、TAR、GZIP等。它能够方便地创建和提取这些…

react antd下拉选择框选项内容换行

下拉框选项字太多,默认样式是超出就省略号,需求要换行全展示,选完在选择框里还是要省略的 .less: .aaaDropdown {:global {.ant-select-dropdown-menu-item {white-space: pre-line !important;word-break: break-all !important;}} } html…

mongodb——原理简介,docker单机部署

MongoDB noSQL数据库 特点 数据文件存储格式为 BSON (JSON 的扩展) {“name”:“joe”}这是 BSON 的例子,其中"name"是键,"joe"是值。键值对组成了 BSON 格式。面向集合…

ROS2中Executors对比和优化

目录 SingleThreadExecutorEventExecutor SingleThreadExecutor 执行流程 EventExecutor 通信图

Linux学习第43天:Linux 多点电容触摸屏实验:难忘记第一次牵你手的温存

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 人都是性情中人,如果把学习当做自己的女朋友,对她细致入微、掏心掏肺、有耐心有恒心,终会修成正果。 而我们本节需要学习的电…

(swjtu西南交大)数据库实验(概念数据库设计及逻辑关系转换):音乐软件数据管理系统

一、实体型及属性 (20分) 用户(账号,用户名,密码,性别,生日,地区,手机号,个性签名,信息修改审核客服) 歌手(歌手号&#…

C++模拟实现——红黑树封装set和map

一、红黑树迭代器的实现 基本的框架和实现链表的迭代器思路是一样的,都是对指针进行封装处理,然后实现一些基本的运算符重载,最重要的是operator,需要不递归的实现走中序的规则,这里只实现那最核心的几个基本功能&…

第一次参加算法比赛是什么感受?

大家好,我是怒码少年小码。 冬日暖阳,好日常在。今天中午在食堂干饭的时候,我的手机📱收到了一条收货信息。 阿?什么玩意儿?我又买啥了? 个败家玩意,我都准备好叨叨我自己&#x…

msvcp120.dll缺失的解决方法与作用介绍

大家好!我是小编。今天,我想和大家分享一下关于“找不到msvcp120.dll无法继续执行代码的5个解决方法”的话题。 首先,让我们来了解一下msvcp120.dll的作用。msvcp120.dll是Microsoft Visual C Redistributable Package的一部分,它…