【机器学习】kmeans实现图片实例分割


前言

任务:
加载本地图像1.jpg,建立Kmeans模型实现图像分割。

1、实现图像加载、可视化、维度转化,完成数据的预处理;
2、K=3建立Kmeans模型,实现图像数据聚类;
3、对聚类结果进行数据处理,展示分割后的图像;
4、尝试其他的K值(K=5、9),对比分割效果,并思考导致结果不同的原因;
5、使用新的图片,对其实现图像分割
KMeans实现图像分割实战summary:


kmeans算法的另外一种用处

1 加载图片

#图像加载与展示
import numpy as np
from skimage import io
img = io.imread('1.jpg')
from matplotlib import pyplot as plt
plt.imshow(img)

在这里插入图片描述

#查看图片存储后的数据类型与维度
print(type(img))
print(img.shape)
<matplotlib.image.AxesImage at 0x2563941c1c0>

<class 'numpy.ndarray'>
(500, 500, 3)

#查看数据内容
print(img)

#维度存储
img_width = img.shape[1]
img_height = img.shape[0]
print(img_width,img_height)
<matplotlib.image.AxesImage at 0x2563941c1c0>

<class 'numpy.ndarray'>
(500, 500, 3)
Output exceeds the size limit. Open the full output data in a text editor
[[[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

 ...
...
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]]
500 500

#数据预处理 维度转化
img_data = img.reshape(-1,3)
print(img.shape,img_data.shape)

2. 模型建立

#X赋值
X = img_data
#模型建立
from sklearn.cluster import KMeans
model = KMeans(n_clusters=3,random_state=0)
print(model)
KMeans(n_clusters=3, random_state=0)
#模型训练
model.fit(X)

#结果预测
label = model.predict(X)
print(label)
#结果可视化
plt.imshow(label)

总结

1、使用skimage模块,实现了图像的加载、可视化,并完成数据预处理;
2、通过建立KMeans模型,实现了图像数据的聚类;
3、对图像聚类结果进行后续处理后,完成了图像分割,并将结果可视化;
4、尝试增大K值,观察发现随着K值增大分割后的图像将展现更多的细节信息

核心算法参考链接:https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供机器学习kmeans算法在西瓜数据集上的实例。首先,让我们了解一下西瓜数据集。 西瓜数据集是一个著名的二元分类数据集,其中包含17个属性和2个类别。属性包括色泽,根蒂,敲声,纹理等等。类别分别为好瓜和坏瓜。下面是西瓜数据集的前几行数据: | 编号 | 色泽 | 根蒂 | 敲声 | 纹理 | 脐部 | 触感 | 密度 | 含糖率 | 好瓜 | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | 1 | 青绿 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 0.697 | 0.46 | 是 | | 2 | 乌黑 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | 硬滑 | 0.774 | 0.376 | 是 | | 3 | 乌黑 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 0.634 | 0.264 | 是 | | 4 | 青绿 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | 硬滑 | 0.608 | 0.318 | 是 | | 5 | 浅白 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 0.556 | 0.215 | 是 | 现在,我们可以使用kmeans算法对这个数据集进行聚类。下面是Python代码的示例: ```python import pandas as pd from sklearn.cluster import KMeans # 读取数据集 data = pd.read_csv('watermelon.csv', encoding='gbk') # 取出数据集中的属性值 X = data.iloc[:, 1:-1] # 设置聚类数量为2 kmeans = KMeans(n_clusters=2) # 对数据进行聚类 kmeans.fit(X) # 输出聚类结果 print(kmeans.labels_) ``` 在这个示例中,我们使用`pandas`库读取了西瓜数据集,并使用`sklearn.cluster`库中的`KMeans`类对数据进行聚类。我们设置聚类数量为2,并使用`fit`方法对数据进行聚类。最后,我们输出了聚类结果。 希望这个示例对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值