ZBLOG

kMeans算法实验 一、图像分割实验 1、导入需要的包 2、读入图片数据 img = np.array(Image.open("ladybug.png"))#读取图片,转为numpy 数组 plt.imshow(img) 测试:输出img对象的维度shape函数 3、将数据转化成可以处理的数据维度(n行,3) 函数reshape 4、随机从数据中选择k个初始质心 5、将所有数据点聚类 a. 初始化一个向量保存质心 b. 计算每个样本点和每个质心的距离 c. 选择

以下是使用k-means算法进行图像分割的实验代码:

  1. import numpy as np
  2. from PIL import Image
  3. import matplotlib.pyplot as plt
  4. # 读入图片数据
  5. img = np.array(Image.open("ladybug.png")) # 读取图片,转为numpy数组
  6. plt.imshow(img)
  7. plt.show()
  8. # 将数据转化成可以处理的数据维度(n行,3)
  9. pixels = img.reshape(-1, 3)
  10. def k_means(data, k, max_iter=100):
  11. # 随机从数据中选择k个初始质心
  12. centroids = data[np.random.choice(range(len(data)), k)]
  13. for _ in range(max_iter):
  14. # 初始化一个向量保存每个样本点对应的质心索引
  15. labels = np.zeros(len(data))
  16. # 计算每个样本点和每个质心的距离
  17. distances = np.linalg.norm(data[:, np.newaxis] - centroids, axis=-1)
  18. # 选择样本点距离k个质心的最小距离所在的索引作为聚类标签
  19. labels = np.argmin(distances, axis=-1)
  20. # 更新质心为每个聚类的均值
  21. for i in range(k):
  22. centroids[i] = np.mean(data[labels == i], axis=0)
  23. return labels, centroids
  24. # 主函数进行图像分割
  25. def image_segmentation(image_path, k=2, max_iter=100):
  26. img = np.array(Image.open(image_path)) # 读取图片,转为numpy数组
  27. pixels = img.reshape(-1, 3) # 将数据转化成可以处理的数据维度(n行,3)
  28. labels, centroids = k_means(pixels, k, max_iter) # 进行k-means聚类
  29. # 将数据转换成图片格式
  30. segmented_img = centroids[labels].reshape(img.shape)
  31. return segmented_img
  32. # 测试效果
  33. segmented_img = image_segmentation("ladybug.png", k=2, max_iter=100)
  34. # 输出分割结果
  35. plt.imshow(segmented_img)
  36. plt.show()

注意:此代码仅为示例,实际使用中可能需要根据具体情况进行调整和优化。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=10376

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?