机器学习之无监督学习:基于聚类的整图分割

前置准备

详情请见我的上一篇博客

基于聚类的图像分割

实现机理

  • 图像分割:利用图像的灰度、颜色、纹理、形状等特征,把图像分为若干个互不重叠的区域,并使这些特征在同一区域内呈现相似性,在不同的区域内存在较明显的差异性。
  • 常用方法:
    1.阈值分割:对图像灰度值进行测量,设置不同种类的阈值,达到分割的目的。
    2.边缘分割:对图像边缘进行检测,检测图像中灰度值发生跳变的地方,即为一片区域的边缘。
    3.直方图法:对图像的颜色建立直方图,而直方图的波峰波谷能够表示一块区域的颜色值的范围,来达到聚类分析的目的。
    4.特定理论:基于聚类分析、小波变换等理论完成图像分割。

效果图

  • 原图
    在这里插入图片描述
  • 效果图
    在这里插入图片描述

源代码

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):
        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), m, n

imgData,row,col = loadData('picture.jpg')
label = KMeans(n_clusters=4).fit_predict(imgData) #KMeans方法创建实例,聚类中心个数为4

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("result-picture-4.jpg", "JPEG") #输出结果


注:本文是博主机器学习课程的心得总结,不支持任何商用且不支持转载!如果你也对机器学习有一定的兴趣和理解,欢迎随时找博主交流~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值