热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sklearn中的KMeans实现对图像的简单的分割各个代码的详解和分析

实验目的目标︰利用K-means聚类算法对图像像素点颜色进行聚类实现简单的图像分割输出∶同一聚类中的点使用相同颜色标记,不同聚类颜色不同函数详解获取图片的函数

实验目的


  • 目标︰利用K-means聚类算法对图像像素点颜色进行聚类实现简单的图像分割
  • 输出∶同一聚类中的点使用相同颜色标记,不同聚类颜色不同

函数详解


获取图片的函数

def loadData(filePath):data = []img = image.open(f)m,n = img.sizefor 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])return np.mat(data),m,n

  • image是PIL的Image类,调用open方法打开对应路径的文件,生成为image的对象
    • 关于PIL,有一个微博写的不错传送
  • getpixel((x,y)):图片读进来是一个二维矩阵,每一个点是三个值(R,G,B)
  • image对象的size属性:返回的是一个元组,像素构成的矩阵的长宽,(width,height)

具体的图像处理

label = KMeans(n_clusters=4).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("result-bull-4.jpg","JPEG")

  • KMeans(n_clusters=4).fit_predict(imgData):
    • fit_predict():计算每一个簇的中心并预测每一个点的是属于哪个簇的,返回的与输入数组相同大小的labels数组,标记了每一个数据所属的簇
  • label = label.reshape([row,col]):将由标记组成的数组进行的变形和转换,形成和原图一样大小的数组
  • pic_new = image.new(“L”,(row,col)):根据给定的大小和模式,创建的一个新的图片
    * PIL.Image.new(mode,size,color):size是对应的一个二维的元组,指定图片的大小
    * mode:这里是指定对应每一个像素点是8个位,0到255之间
    在这里插入图片描述
  • pic_new.putpixel((i,j),int(256/(label[i][j]+1))):将生成的新的像素点放到新生成的矩阵中
    • PIL.Image.eval(image, *args):后续为一个整数
    • int(256/(label[i][j]+1))):将的之转变为的对应的不同的灰度值的图片,防止除数为零,就标记上在加+

最终实现的代码

import numpy as np
import PIL.Image as image
from sklearn.cluster import KMeansdef loadData(filePath):data = []img = image.open(filePath)m,n = img.sizefor 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])return np.mat(data),m,nimgData,row,col = loadData('bull.jpg')
label = KMeans(n_clusters=4).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("result-bull-4.jpg","JPEG")


推荐阅读
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
author-avatar
皮蓬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有