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")

猜你喜欢

转载自www.cnblogs.com/nishida-rin/p/12275057.html