赞
踩
1、理解K-means算法的基本原理和图像颜色聚类的关键要素;
2、学习使用Python编程语言和机器学习开发工具包(scikit-learn)构建K-means模型;
3、编程实现基于K-means的图像颜色聚类程序,并分析实验结果。
二、概要设计
1.Kmeans——一种无监督机器学习的聚类算法
基本原理:在不给出数据类别标签而直接给出样本数据情况下,该算法首先需要确定结果:要把样本聚成k
类。这个聚类的过程为:
2.本次实验需要完成的聚类任务介绍:用K-means算法实现图像颜色聚类
我们需要聚类的对象为:图像这个网格集合中的像素的rgb像素值。我们需要对这个图像中的像素值进行k聚类。
3.用K-means算法实现图像颜色聚类的算法流程
首先获得图像数据(像素点)
构建k-means模型(确定要聚几个类)
输入数据进行模型训练
得到聚类结果和类别中心点
根据聚类结果和类别中心点映射到原图像,对对原图像数据进行聚类处理
1.首先获得图像数据:加载图像并且将图像转换为二维数组:
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
from PIL import Image
# 加载图像
img = Image.open('flower.jpg')
img_data = np.array(img)
# 将图像转换为二维数组
rows, cols, bands = img_data.shape#bands是颜色的通道数
X = img_data.reshape(rows * cols, bands)
2.构建k-means模型(确定分为多少类,这里设置为16类)
# 使用 K-means 算法将颜色值分为 16 个簇
kmeans = KMeans(n_clusters=16, random_state=0)
3.输入数据进行模型训练
kmeans = kmeans.fit(X)
4. 得到聚类结果和类别中心点
# 获取聚类结果和簇中心点
labels = kmeans.labels_
centers = kmeans.cluster_centers_
colors = np.zeros_like(centers)
print(colors)
5. 根据聚类结果和类别中心点映射到原图像,对对原图像数据进行聚类处理
# 将聚类结果重新映射到图像像素值 X_recovered = np.zeros_like(X) for i in range(6): X_recovered[labels == i] = centers[i]#colors[i] print(centers[i]) img_recovered = X_recovered.reshape(rows, cols, bands) # 绘制原图和聚类后的图像 fig, ax = plt.subplots(1, 2, figsize=(10, 5)) ax[0].imshow(img) ax[0].set_title('Original Image') ax[0].axis('off') ax[1].imshow(img_recovered.astype(np.uint8)) ax[1].set_title('6-color Image') ax[1].axis('off') plt.show()
四、实验结果
分析:
尝试改变聚类数量
更改聚类图片,不同图像颜色聚类效果:
可以看到,不同图像,由于像素数值不同,聚类结果以及聚类效果也不同
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。