kmeans聚类算法图像分类python
时间: 2023-11-21 10:56:20 浏览: 139
K-means聚类算法是一种常用的无监督学习算法,可以用于图像分类。下面是使用Python实现K-means聚类算法进行图像分类的步骤:
1.读取图像并将其转换为像素点的集合。
2.选择初始聚类中心。
3.使用K-means算法对像素点进行聚类,得到聚类中心。
4.根据聚类中心将像素点分为不同的类别。
5.展示分类后的图像。
下面是一个简单的Python代码示例:
```python
import cv2
import numpy as np
from sklearn.cluster import KMeans
# 读取图像并将其转换为像素点的集合
def loadDataSet(arrimg):
m, n, k = arrimg.shape
dataSet = np.zeros((m * n, k))
for i in range(m):
for j in range(n):
dataSet[i * n + j] = arrimg[i][j]
return dataSet
# 选择初始聚类中心
def sel_init_cen(dataSet):
init_cen_1 = np.array([dataSet[0]])
init_cen_2 = np.array([dataSet[-1]])
return init_cen_1, init_cen_2
# 使用K-means算法对像素点进行聚类,得到聚类中心
def kMeans(dataSet, k):
kmeans = KMeans(n_clusters=k, random_state=0).fit(dataSet)
return kmeans.cluster_centers_
# 根据聚类中心将像素点分为不同的类别
def classify(cen1, cen2, dataSet):
m = dataSet.shape[0]
result = np.zeros((m, 1))
for i in range(m):
if np.linalg.norm(dataSet[i] - cen1) < np.linalg.norm(dataSet[i] - cen2):
result[i] = 0
else:
result[i] = 1
return result
# 展示分类后的图像
def image2k(cen1, cen2):
img = cv2.imread("IMGP8080.JPG")
arrimg = np.array(img)
m, n, k = arrimg.shape
dataSet = loadDataSet(arrimg)
result = classify(cen1, cen2, dataSet)
newImg = np.zeros((m, n, k))
for i in range(m):
for j in range(n):
if result[i * n + j] == 0:
newImg[i][j] = cen1
else:
newImg[i][j] = cen2
cv2.imshow("newImg", newImg.astype(np.uint8))
cv2.waitKey(0)
# 主程序
def run():
img = cv2.imread("IMGP8080.JPG")
arrimg = np.array(img)
dataSet = loadDataSet(arrimg)
init_cen_1, init_cen_2 = sel_init_cen(dataSet)
cen1, cen2 = kMeans(dataSet, 2)
print("最终结果:", cen1, cen2)
image2k(cen1, cen2)
run()
```
阅读全文