2019-07-31【机器学习】无监督学习之聚类 K-Means算法实例 (图像分割)

本文介绍了一种使用KMeans算法进行图像聚类分割的方法。通过将图像的每个像素点视为样本,将其RGB颜色转换为0-1范围内的数值,然后应用KMeans算法进行聚类。最后,根据聚类结果生成新的灰度图像,直观展示不同聚类的效果。

样本:

代码:

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)
    m, n = img.size #获取图片的大小
    for i in range(m): #将每个像素点RGB颜色处理到0-1
        for j in range(n):
            x, y, z = img.getpixel((i, j)) #黑色为0,0,0 有颜色就好像是其他数字
            #print(x, y, z)
            data.append([x/256.0, y/256.0, z/256.0]) #二维列表[0.0, 0.0, 0.0]
    f.close()
    #print(data)
    return np.mat(data), m, n #以矩阵形式返回data,以及图片大小

imgData, row, col = loadData('D:/python_source/Machine_study/mooc课程数据/课程数据/基于聚类的整图分割/bull.jpg')
#print(imgData, row, col)
label = KMeans(n_clusters=4).fit_predict(imgData)
#聚类获得每个像素所属的类别
label = label.reshape([row, col]) #二维列表
#print(label)
pic_new = image.new("L", (row, col)) #创建一张新的灰度图保存聚类后的效果
for i in range(row): #i,j为图片像素,例如 640*480.   根据所属类别向图片中添加灰度值
    for j in range(col):
        pic_new.putpixel((i, j), int(256/(label[i][j]+1)))
pic_new.save("result-bull-4.jpg", "JPEG")

 

效果图:

转载于:https://www.cnblogs.com/ymzm204/p/11279016.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值