k均值聚类图像分割matlab代码_实战:K-Means对罗熙照片进行分割

本文介绍了k-平均聚类算法在图像分割中的应用,通过MATLAB代码对罗熙的照片进行16部分的分割。首先解释了k-Means的基本原理,然后展示了实战过程,强调了图像尺寸对运行效率的影响,并提供了相关图像处理库的安装方法。最后,提到了参考文献。
摘要由CSDN通过智能技术生成

k-平均算法(英文:k-means clustering)源于信号处理中的一种向量量化方法,现在则更多地作为一种聚类分析方法流行于数据挖掘领域。k-平均聚类的目的是:把个点(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个点都属于离他最近的均值(此即聚类中心)对应的聚类,以之作为聚类的标准。这个问题将归结为一个把数据空间划分为Voronoi cells的问题。(来自维基百科)

k-means的原理可以简单理解为我们先假定聚类个数几中心点,然后根据中心点对其余点分类。接着重新计算中心点,计算的时候采用取均值的方式,再重新划分中心点,再对其余点分类。以此类推。

下面为我的K-Means学习思维导图

155e22ebac6777bccb75feba7d4548e1.png

下面直接开始项目实战:

cc820ebfd2de2e5c53849e5d6b8f13a9.png

我选取了我最喜欢的罗熙小朋友的图片作为分割样本。

ps:保存图片的时候记得保存为jpg格式,如果保存格式是png,会导致赋值错误

对于不同尺寸的图像,k-means运行的时间是不同的,尽量压缩图片尺寸,如果超过1000像素,速度会变得很慢!

72efa2a758971566509d2d5491676b30.png


我们这次的目标是把图片分割成16部分,为了对不同分类设置不同的颜色,我们需要用skimage工具包(一个图像处理工具包)下载命令为:

pip install skcikit-image


引入各种包

47f15ba40054f478696f149601f2d75a.png

加载图像,并对数据进行规范化

859c6df0309c566c5bf20defeef5e2ff.png
我们自己定义了Min-Max规范化公式,我们知道RGB每个通道的数值在[0.255]之间,所以用每个通道的数值+1/256,这样数值就会在[0,1]之间

加载图像,得到规范化的结果 imgData,以及图像尺寸

0594e5ab555db1bb3a40fb8ca2f83394.png

用 K-Means 对图像进行 16 聚类

001868d3ff88891bc1e582c2b01ef8ea.png

将图像聚类结果,转化成图像尺寸的矩阵

0cd4125191b6b3b79968c00f672dfe2a.png

创建个新图像 img,用来保存图像聚类压缩后的结果

a5138d071903944b656d1fb06dde7581.png
对于点(x,y)我们找到他们所属的簇label[x,y]然后得到这个簇的质心特征,用c1,c2,c3表示,但是c1c2c3对应的是数据规范化的数值,所以需要再进行反变换。用img.putpixel

输出图像

46700966e4b9bbe702ba6ceda2e845ee.png

参考文献:

李航--统计学习方法

Eastmount--python图像处理

Linn01--knn和k-means的区别

陈旸--数据分析实战45讲

维基百科

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值