我正在尝试进行颜色分割(遵循《 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)
现在这是我使用的原始图像:
这段代码是要获取分割后的图像:
plt.figure(figsize=(10,5))
plt.imshow(segmented_img.astype(np.uint8))
plt.title("5 colors image")
plt.show()
我得到:
到目前为止,一切都很好。现在,我尝试将第五行的代码从X = image.reshape(-1, 3)
更改为X = image.reshape(-1, 1)
,我希望使用一个颜色通道,并且给出较差的图像(因为它的信息较少),但是得到了Image我感觉更接近原始图像:
我做错什么了吗?有人可以帮我解释一下这是怎么回事吗? 附言当我使用2个频道时,效果不如3:
5个频道很奇怪:
有人可以向我解释发生了什么事吗?