K-means、图像分割

xiaoxiao2021-02-28  159

K-means聚类算法原理  k-means算法以k为参数,吧n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。 随机选k个点作为初始的聚类中心。对剩下的点,根据距离,将其归入最近的簇。对每个簇,计算所有点的均值作为新的聚类中心。重复前两步,直到中心不再改变。 参数: class sklearn.cluster.KMeans( n_clusters=8, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='auto', verbose=0, random_state=None, copy_x=True, n_jobs=1, algorithm='auto') init:聚类中心的初始化方法; max_inter:最大迭代次数; 一般给出n_cluster即可。 扩展:K-means默认用欧氏距离,还有余弦相似度 、马氏距离等 使用自定义距离方法:更改def euclidean_distance() 处源码。(欧几里得距离) 使用scipy.spatial.distance.cdist方法:scipy.spatial.distance.cdist(A,B,metric='cosine')#余弦距离。 K-means实例:图像分割 图像分割常用方法: 阈值分割边缘分割直方图法特定理论:小波变换、聚类分析等。 目标:利用K-means 算法对图像像素颜色进行聚类实现简单的图像分割。 输出:同一聚类中的点使用相同颜色标记,不同聚类颜色不同。 import numpy as np import PIL.Image as image from sklearn.cluster import KMeans def loadData(filePath):     f = open(filePath,'rb')     data = []     img = image.open(f)     r,c = img.size     for i in range(m):         for j in range(n):             x,y,z = img.getpixel((i,j))             data.append([x/256.0,y/256.0,z/256.0])     f.close()     return np.mat(data),r,c imgData,row,col = loadData('jiafeimao.jpg') #相对路径 label = KMeans(n_clusters=5).fit_predict(imgData) label = label.reshape([row,col]) pic_new = image.new("L", (row, col)) for i in range(row):     for j in range(col):         pic_new.putpixel((i,j), int(256/(label[i][j]+1))) pic_new.save("new-jiafeimao.jpg", "JPEG")
转载请注明原文地址: https://www.6miu.com/read-35522.html

最新回复(0)