目录
1.项目内容介绍
2.项目关键代码
3.项目效果展示
1.项目内容介绍
本项目是将一张图片进行k-means分类,根据色彩k进行分类,最后比较和原图的效果。
题目还是比较简单的,我们只要通过k-means聚类,一类就是一种色彩得出聚类之后的图像,就是根据色彩分割出来的图像。
最后我们设定[50,20,10,8,6,4,2]个聚类簇,我们画出8张图片,对应比较还原的效果即可。
2.项目关键代码
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans
from matplotlib.image import imread
image = imread(r"C:\Users\Zeng Zhong Yan\Desktop\py.vs\数学建模\Figure\HeayMap_Rain Figure.png")
X = image.reshape(-1,3)#化成二维数组
segmented_imgs = []#创建空列表用于存储切割之后的图像
n_colors = (50,20,10,8,6,4,2)
#根据不同的color进行k-means聚类
for n_cluster in n_colors:
kmeans = KMeans(n_clusters = n_cluster,random_state=42,n_init='auto').fit(X)
#根据KMeans算法的聚类结果,将每个像素点的颜色映射到最接近的聚类中心,形成分割后的图像
segmented_img = kmeans.cluster_centers_[kmeans.labels_]
#将分割后的图像添加到segmented_imgs列表中,并将其重新排列成与原始图像相同的形状
segmented_imgs.append(segmented_img.reshape(image.shape))
#绘制可视化图片
plt.figure(figsize=(18,6),dpi=500)
plt.subplot(241)
plt.imshow(image)
plt.title('Original image')
for idx,n_clusters in enumerate(n_colors):
plt.subplot(242+idx)
plt.imshow(segmented_imgs[idx])#在子图中显示分割后的图像
plt.title('{}colors'.format(n_clusters))
plt.savefig(r"C:\Users\Zeng Zhong Yan\Desktop\py.vs\MachineLearning\图像分割.png",dpi=500)
plt.show()
3.项目效果展示