技术问询:已完成浣熊面部灰度图像5段分割,新手求指导
浣熊面部灰度图像5段灰度分割实现
哇,作为新手能完成这个灰度分割任务真的很厉害!我帮你把代码补全并整理好,方便你查看和运行:
完整实现代码
import numpy as np from sklearn import cluster import scipy as sp import matplotlib.pyplot as plt from sklearn.cluster import KMeans # 加载浣熊面部灰度图像 face = sp.misc.face(gray=True) # 设置灰度段数量 n_clusters = 5 np.random.seed(0) # 将图像数据重塑为KMeans需要的格式 X = face.reshape((-1, 1)) # 初始化并训练KMeans模型 k_Means = cluster.KMeans(n_clusters=n_clusters, n_init=4) k_Means.fit(X) # 获取聚类后的标签,并生成分割后的图像数据 labels = k_Means.labels_ segmented_image = k_Means.cluster_centers_[labels].reshape(face.shape) # 可视化原图和分割后的图像 plt.figure(figsize=(8, 3.5)) # 显示原图 plt.subplot(121) plt.imshow(face, cmap=plt.cm.gray) plt.title("原图") plt.axis('off') # 显示分割后的图像 plt.subplot(122) plt.imshow(segmented_image, cmap=plt.cm.gray) plt.title(f"{n_clusters}段灰度分割图") plt.axis('off') plt.tight_layout() plt.show()
关键步骤说明
- 首先用
sp.misc.face(gray=True)加载内置的浣熊灰度图像,省去了自己找数据集的麻烦 - 把二维的图像数组重塑成
(-1,1)的一维数组,这是KMeans算法要求的输入格式(每个样本是一个特征值,也就是灰度值) - 初始化KMeans模型时设置
n_init=4,是为了多次初始化聚类中心,避免陷入局部最优解 - 聚类完成后,用每个聚类的中心灰度值替换对应位置的原始灰度值,再重塑回图像的二维形状,就得到了分割后的灰度图像
- 最后通过子图对比展示原图和分割效果,关闭坐标轴让图像展示更干净
内容的提问来源于stack exchange,提问作者dan_karan
相关产品推荐
相关产品推荐

