把像素扔进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-11-12 08:20:42