1.5:基于聚类的“图像分割”实例编写

把像素扔进K-Means函数里,然后给像素添加不同的灰度并输出。

图像分割常用方法:

1. 阈值分割:对图像灰度值进行度量,设置不同类别的阈值,达到分割的目的。

2. 边缘分割:对图像边缘进行检测,即检测图像中灰度值发生跳变的地方,则为一片

区域的边缘。

3. 直方图法:对图像的颜色建立直方图,而直方图的波峰波谷能够表示一块区域的颜

色值的范围,来达到分割的目的。

4. 特定理论:基于聚类分析、小波变换等理论完成图像分割。

实例描述

目标:

利用K-means聚类算法对图像像素点颜色进行聚类实现简单的图像分割

输出:

同一聚类中的点使用相同颜色标记,不同聚类颜色不同

技术路线:sklearn.cluster.KMeans

实验过程

使用算法:Kmeans

实现步骤:

1.建立工程并导入sklearn包

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

3.加载Kmeans聚类算法

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

关于一些相关包的介绍:

  • PIL包:因为本实验涉及图像的加载和创建,因此需要使用到PIL包,如未安装,请下载相关包自行安装。
 1 import numpy as np
 2 import PIL.Image as image
 3 from sklearn.cluster import KMeans
 4
 5 def loadData(filePath):
 6     f = open(filePath,‘rb‘)
 7     data = []
 8     img = image.open(f)
 9     m,n = img.size
10     for i in range(m):
11         for j in range(n):
12             x,y,z = img.getpixel((i,j))
13             data.append([x/256.0,y/256.0,z/256.0])
14     f.close()
15     return np.mat(data),m,n
16
17 imgData,row,col = loadData(‘kmeans/bull.jpg‘)
18 label = KMeans(n_clusters=4).fit_predict(imgData)
19
20 label = label.reshape([row,col])
21 pic_new = image.new("L", (row, col))
22 for i in range(row):
23     for j in range(col):
24         pic_new.putpixel((i,j), int(256/(label[i][j]+1)))
25 pic_new.save("result-bull-4.jpg", "JPEG")

原文地址:https://www.cnblogs.com/nishida-rin/p/12275057.html

时间: 2024-08-30 15:19:20

1.5:基于聚类的“图像分割”实例编写的相关文章

图像分割—基于图的图像分割(Graph-Based Image Segmentation)

 图像分割-基于图的图像分割(Graph-Based Image Segmentation) Reference: Efficient Graph-Based Image Segmentation,IJCV 2004,MIT Code 图像分割-基于图的图像分割(OpenCV源码) Graph-Based Segmentation 是经典的图像分割算法,作者Felzenszwalb也是提出DPM算法的大牛.该算法是基于图的贪心聚类算法,实现简单,速度比较快,精度也还行.不过,目前直接用它做分

SpringMVC详解(三)------基于注解的入门实例

前两篇博客我们讲解了基于XML 的入门实例,以及SpringMVC运行的详细流程.但是我们发现基于 XML 的配置还是比较麻烦的,而且,每个 Handler 类只能有一个方法,在实际开发中肯定是不可能这样来进行开发的.那么这篇博客我们就讲解实际开发中用的最多的基于注解配置的SpringMVC配置. 本篇博客源码下载 项目结构为: 1.在 web.xml 文件中配置前端处理器 <?xml version="1.0" encoding="UTF-8"?> &

基于开源JOONE 神经网络实例

作者:北邮小生-chaosju 1.入门书籍推荐: 人工神经网络教程-韩力群  北京邮电大学出版社       写算法要了解算法的原理,方能写出好算法,明白原理实现算法 事半功倍 2.Joone JOONE(Java Object Oriented Neural Network)是sourceforge.net上一个用java语言迅速开发神经网络的开源项目.JOONE支持很多的特性,比如多线程和分布式计算,这意味着可以JOONE可以利用多处理器或是多计算机来均衡附载. JOONE主要有三个大的模

SpringMVC应用------基于注解的入门实例

SpringMVC应用------基于注解的入门实例 目录 1.在 web.xml 文件中配置前端处理器 2.在 springmvc.xml 文件中配置处理器映射器,处理器适配器,视图解析器 3.编写 Handler 4.编写 视图 index.jsp 5.在浏览器中输入:http://localhost:8080/SpringMVC-003/hello 前两篇博客我们讲解了基于XML 的入门实例,以及SpringMVC运行的详细流程.但是我们发现基于 XML 的配置还是比较麻烦的,而且,每个

基于图的图像分割(Graph-Based Image Segmentation)

一.介绍 基于图的图像分割(Graph-Based Image Segmentation),论文<Efficient Graph-Based Image Segmentation>,P. Felzenszwalb, D. Huttenlocher,International Journal of Computer Vision, Vol. 59, No. 2, September 2004 论文下载和论文提供的C++代码在这里. Graph-Based Segmentation是经典的图像分割

基于Perfect用Swift语言编写Slack聊天机器人

基于Perfect用Swift语言编写Slack聊天机器人 本项目是专门为Slack聊天机器人定制的模板服务器. 完整的源代码下载在Github https://github.com/PerfectServers/SlackBot 在本项目模板中,一个聊天机器人可以加入授权频道,读取频道内所有用户发送的"曲奇"并记录在案,而且可以直接答复用户的有关曲奇饼干的问题. 预备知识 在您决定编译.测试或者部署您自己的基于Perfect软件框架体系的聊天机器人之前,以下基础知识??不可或缺??:

基于聚类的异常值检测方法( 2 )

韩家炜书中在介绍基于聚类的异常值检测中的第二种方法提到: 如果某对象与最近的簇的距离非常远,则该对象为Outlier.这句话其实有两个意思,第一个意思假定某对象在cluster A中,则它必定距离A簇比较近( 一般指的是球型的cluster ).第二个意思假定某对象是未知的点,距离A簇最近.其实在使用中,大部分情况我们可以把这两个场景合二为一.在本文中,我们假定对象已经在cluster A中. 本文基于聚类的异常值检测的算法思路是: 1 ) 用聚类算法做cluster 2 ) 计算cluster

基于聚类的异常值检测方法( 1 )

韩家炜的书中提到也可以用基于聚类的方法去做Outlier的识别.的确,outlier这个概念是和cluster这样的场景很相关的.对于工业上的数据来说,一般这个cluster的数量会是1或者2.在找出了cluster后,我们可以发现outlier要么不属于任何的cluster,要么说outlier在这个cluster里显得如此的奇怪. 今天我们用DBSCAN的方法去发现cluster和outleir.DBSCAN的介绍可以见这篇文章: http://www.cnblogs.com/chaosim

vc 基于对话框多线程编程实例——线程之间的通信

 vc基于对话框多线程编程实例--线程之间的通信 实例: vc 基于对话框多线程编程实例--线程之间的通信,码迷,mamicode.com