K-means、图像分割
2017-08-31 14:21
916 查看
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
a326
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")
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
a326
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")
相关文章推荐
- 基于K-means聚类的图像分割
- 基于K-means聚类的图像分割
- 基于CIELab空间色彩K-means聚类彩色图像分割
- Kmeans++及字典学习和图像分割
- Opencv中K均值算法(K-Means)及其在图像分割中的应用
- C均值算法(K-means)在opencv中实现图像分割(抠图)
- k-means 图像分割
- Opencv中K均值算法(K-Means)及其在图像分割中的应用
- meansift图像分割
- K-means++ 图像分割
- 图像分割自适应阈值的求取
- 图像分割之(五)活动轮廓模型之Snake模型简介
- 基于深度学习的图像语义分割技术概述之常用方法
- 采用opencv对图像进行分割
- 图像分割之交叉视觉皮质(ICM)代码
- VTK修炼之道16:图像处理_窗口分割和图像融合(Viewport&vtkImageBlend)
- 深度卷积网络CNN与图像语义分割
- 图像预处理第6步:分割,并在分割出来的字符外面画框以标识
- 图像分割基础算法及实现实例
- 图像分割之区域生长