k-平均算法(英文:k-means clustering)源于信号处理中的一种向量量化方法,现在则更多地作为一种聚类分析方法流行于数据挖掘领域。k-平均聚类的目的是:把个点(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个点都属于离他最近的均值(此即聚类中心)对应的聚类,以之作为聚类的标准。这个问题将归结为一个把数据空间划分为Voronoi cells的问题。(来自维基百科)
k-means的原理可以简单理解为我们先假定聚类个数几中心点,然后根据中心点对其余点分类。接着重新计算中心点,计算的时候采用取均值的方式,再重新划分中心点,再对其余点分类。以此类推。
下面为我的K-Means学习思维导图
下面直接开始项目实战:
我选取了我最喜欢的罗熙小朋友的图片作为分割样本。
ps:保存图片的时候记得保存为jpg格式,如果保存格式是png,会导致赋值错误
对于不同尺寸的图像,k-means运行的时间是不同的,尽量压缩图片尺寸,如果超过1000像素,速度会变得很慢!
我们这次的目标是把图片分割成16部分,为了对不同分类设置不同的颜色,我们需要用skimage工具包(一个图像处理工具包)下载命令为:
pip install skcikit-image
引入各种包
加载图像,并对数据进行规范化
加载图像,得到规范化的结果 imgData,以及图像尺寸
用 K-Means 对图像进行 16 聚类
将图像聚类结果,转化成图像尺寸的矩阵
创建个新图像 img,用来保存图像聚类压缩后的结果
输出图像
参考文献:
李航--统计学习方法
Eastmount--python图像处理
Linn01--knn和k-means的区别
陈旸--数据分析实战45讲
维基百科