博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于聚类的“图像分割”(python)
阅读量:5357 次
发布时间:2019-06-15

本文共 1290 字,大约阅读时间需要 4 分钟。

基于聚类的“图像分割”

参考网站: https://zhuanlan.zhihu.com/p/27365576
昨天萌新使用的是PIL这个库,今天发现机器学习也可以这样玩。

视频地址

图像分割:利用图像的灰度、颜色、纹理、形状等特征,把图像分成若 干个互不重叠的区域,并使这些特征在同一区域内呈现相似性,在不同的区 域之间存在明显的差异性。然后就可以将分割的图像中具有独特性质的区域 提取出来用于不同的研究。

实现步骤:

1.建立工程并导入sklearn包

2.加载图片并进行预处理

3.加载Kmeans聚类算法

4.对像素点进行聚类并输出

实验代码

import numpy as npimport PIL.Image as imagefrom sklearn.cluster import KMeansdef load_data(file_path):    f = open(file_path,'rb') #二进制打开    data = []    img = image.open(f) #以列表形式返回图片像素值    m,n = img.size #活的图片大小    for i in range(m):        for j in range(n):  #将每个像素点RGB颜色处理到0-1范围内并存放data            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 #以矩阵型式返回data,图片大小img_data,row,col = load_data('1.jpg')label = KMeans(n_clusters=3).fit_predict(img_data)  #聚类中心的个数为3label = 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('111.jpg')

实验结果

修改n_clusters的值会有不同结果

实验分析

通过设置不同的k值,能够得到不同的聚类结果。同时,k值的不确定也 是Kmeans算法的一个缺点。往往为了达到好的实验结果,需要进行多次尝 试才能够选取最优的k值。而像层次聚类的算法,就无需指定k值,只要给 定限制条件,就能自动地得到类别数k。

话说把女朋友P成这样会不会被骂

然而自己想太多

 

转载于:https://www.cnblogs.com/byteHuang/p/7011654.html

你可能感兴趣的文章
scanf函数对异常输入的处理
查看>>
sorry,老师
查看>>
Android 使用正则表达式来快速生成多套dpi及分分辨率适配的UI
查看>>
tyvj1014 乘法游戏
查看>>
python字典及相关操作
查看>>
C++中的 istringstream 的用法
查看>>
分布式拒绝服务攻击 DDoS
查看>>
语音质量评价
查看>>
如何通俗的理解张量
查看>>
mfc 动态创建EDIT控件
查看>>
关于tree节点的刷新
查看>>
面试心得
查看>>
win7网络发现不能启用,无法共享其他机器的解决办法
查看>>
iOS多线程--彻底学会多线程之『GCD』
查看>>
Gunicorn快速入门
查看>>
Docker for Windows 和虚拟机VMWare共存方案
查看>>
stl中string作为成员变量引起的core问题
查看>>
java用while循环设计轮询线程的性能问题
查看>>
unity3D OnTriggerEnter和OnCollisionEnter的区别
查看>>
[CF1082E] Increasing Frequency
查看>>