Basics of machine learning algorithms--Practical application of K-means--Image segmentation

Table of contents

1. Introduction to project content

2.Project key code 

3. Project effect display

1. Introduction to project content

本项目是将一张图片进行k-means分类,根据色彩k进行分类,最后比较和原图的效果。
题目还是比较简单的,我们只要通过k-means聚类,一类就是一种色彩得出聚类之后的图像,就是根据色彩分割出来的图像。
最后我们设定[50,20,10,8,6,4,2]个聚类簇,我们画出8张图片,对应比较还原的效果即可。

2.Project key code 

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. Project effect display

 

Guess you like

Origin blog.csdn.net/m0_71819746/article/details/133322919