使用scikit进行颜色分割-为什么我在一个通道上的图像比3个更好?

时间:2019-06-29 17:30:43

标签: scikit-learn k-means image-segmentation unsupervised-learning

我正在尝试进行颜色分割(遵循《 Hands on ML 2-{{​​3}}》中的代码),但我不明白结果-我在1个通道上获得的图像比在3个通道上获得的图像更好。

这是3个频道的代码:

from matplotlib.image import imread
import os
image = imread(os.path.join(".","foxes.jpg"))
image.shape #(608, 800, 3)
X = image.reshape(-1, 3) #-------- 3 channels - RGB -----------------

kmeans = KMeans(n_clusters=5).fit(X)  # 5 colors
segmented_img = kmeans.cluster_centers_[kmeans.labels_]
segmented_img = segmented_img.reshape(image.shape)

现在这是我使用的原始图像:

github

这段代码是要获取分割后的图像:

plt.figure(figsize=(10,5))
plt.imshow(segmented_img.astype(np.uint8))
plt.title("5 colors image")
plt.show()

我得到:

enter image description here

到目前为止,一切都很好。现在,我尝试将第五行的代码从X = image.reshape(-1, 3)更改为X = image.reshape(-1, 1),我希望使用一个颜色通道,并且给出较差的图像(因为它的信息较少),但是得到了Image我感觉更接近原始图像:

我做错什么了吗?有人可以帮我解释一下这是怎么回事吗? 附言当我使用2个频道时,效果不如3:

i

5个频道很奇怪:

enter image description here

有人可以向我解释发生了什么事吗?

0 个答案:

没有答案