HDU杭电--机器学习实验考试

一、 实验目的
• 1 、理解无监督学习中 Kmeans 算法原理
• 2 、掌握 Sklearn 实现基于 Kmeans 的图像分割

二、 实验内容与要求
1 、该代码属于无监督学习 , 使用了 K-means 聚类算法。无监督学习
是一种无需标签的学习方法,模型从数据的内部结构中学习,将数据
分组或聚类。
2 、核心函数:
· KMeans(n_clusters=4).fit_predict(imgData)
输入:归一化后的图像数据 imgData
输出:每个像素点所属的簇标签数组 label ,其中每个标签表示该
像素属于哪个聚类簇。
· loadData(filePath)
输入:图像文件的路径 filePath
输出:一个包含归一化后的像素 RGB 值的 NumPy 数组 data ,以
及图像的宽度 m 和高度 n
以上代码使用了无监督学习中的 K-means 聚类算法对图像进行颜
色聚类和分割。首先,加载并处理图像数据;然后使用 K-means 算法
对像素进行聚类;最后根据聚类结果重新生成和保存处理后的图像。 3 、图像分割
利用图像的灰度、颜色、纹理、形状等特征,把图像分成若干个互
不重叠的区域,并使这些特征在同一区域内呈现相似性,在不同的区
域之间存在明显的差异性。然后就可以将分割的图像中具有独特性质
的区域提取出来用于不同的研究。
图像分割技术已在实际生活中得到广泛的应用。例如 : 在机车检验领
域,可以应用到轮毂裂纹图像的分割,及时发现裂纹,保证行车安全 ;
在生物医学工程方面,对肝脏 CT 图像进行分割,为临床治疗和病理学
研究提供帮助。
4 、实例描述
目标 : 利用 K-means 聚类算法对图像像素点颜色进行聚类实现简单
的图像分割
输出 : 同一聚类中的点使用相同颜色标记,不同聚类颜色不同
5 、实验过程
·使用算法 :Kmeans
·实现步骤 :
1 )建立工程并导入 sklearn
2 )加载图片并进行预处理
3 )加载 Kmeans 聚类算法
4 )对像素点进行聚类并输出
三、 实验程序与结果
import numpy as np # 用于处理处理数值计算和数组操作
import PIL.Image as image #Python Imaging Library ,用于处理图像数据
from sklearn.cluster import KMeans # 执行 K-means 聚类
def loadData (filePath): # 打开指定路径的图像文件并读取其内容。
f = open (filePath, 'rb' ) # 打开图像文件,获取尺寸
data = [] # 存储归一化后的像素值
img = image.open(f) # 使用 PIL 库打开图像
m, n = img.size # 获取图像的尺寸(宽度和高度)
# 遍历图像的每个像素点,获取其 RGB 值并归一化到 [0, 1] 范围内。
for i in range (m): # 图像的宽度
for j in range (n): # 图像的高度
x, y, z = img.getpixel((i, j)) # 获取像素点 (i, j) 处的 RGB
data.append([x / 256.0 , y / 256.0 , z / 256.0 ]) # 归一化像素值并存储
f.close() # 关闭文件
return np.array(data), m, n # 返回归一化后的像素值数组和图像尺寸, np.array ,包含归
一化后像素值的数组
# 加载并处理图像数据,函数加载图像数据,并获取图像的行数 row 和列数 col imgData, row, col = loadData( ' 处理之前的图片 .jpg' )
# 使用 K-means 聚类算法对图像进行颜色聚类,得到每个像素点所属的簇标签
label = KMeans( n_clusters = 4 ).fit_predict(imgData)
# 将聚类标签重塑为与原图像尺寸相同的矩阵,将一维的聚类标签数组重塑为二维矩阵
label = label.reshape([row, col])
# 创建一个新的灰度图像对象,建一个新的灰度图像,大小与原图相同
pic_new = image.new( "L" , (row, col))
# 根据聚类结果为每个像素设置灰度值,并存储处理后的图像
for i in range (row):
for j in range (col):
pic_new.putpixel((i, j), int ( 256 / (label[i][j] + 1 )))
# 将处理后的图像保存为 JPEG 格式文件
pic_new.save( " 处理后的图片 .jpg" , "JPEG" )
四、实验结果分析
原始图像展示了图像的所有细节和颜色,包含大量的颜色信息和细
节。分割后的图像使用 4 个聚类中心颜色替换原图中的颜色,从而将
图像简化为 4 个主要颜色区域。这些颜色区域代表了图像中的主要颜
色成分,去除了细节颜色的干扰,使图像更加简洁,突出了主要颜色
区域。
聚类效果依赖于图像的内容和颜色分布。对于颜色差异明显的图
像,聚类效果较好,可以清晰地区分不同颜色区域。对于颜色渐变和
细节丰富的图像,聚类可能会导致一些细节丢失,但仍能突出主要颜
色区域。
五、实验问题解答与体会
通过本次实验,我深刻体会到了图像处理的基础知识和 K-means
类算法在图像分割中的实际应用。加载图像、处理像素值和转换图像
格式的过程加深了我对图像处理技术的理解。通过实施 K-means 聚类
算法,对图像像素进行颜色聚类,并将聚类结果应用于图像分割,使
我直观地理解了聚类算法的原理和效果。
此外,通过对实验结果的分析,我认识到 K-means 聚类在图像分割
中的应用效果较好,但仍有改进空间,如调整聚类数量和进行图像的
预处理与后处理
  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值