Сегментация цвета с помощью scikit - Почему у меня изображение лучше на одном канале, чем на 3? - PullRequest
0 голосов
/ 29 июня 2019

Я пытаюсь сделать цветовую сегментацию (следуя коду из книги Hands on ML 2 - github ), но я не понимаю результатов - я получаю лучшее изображение на 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)

Теперь это оригинальное изображение, которое я использовал:

enter image description here

И этот код для получения сегментированного изображения:

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), который, как я ожидаю, будет использовать один цветной канал и дать худшее изображение (потому что в нем меньше информации), но я получаю изображение, которое я чувствую намного ближе к исходному изображению:

i

Я что-то не так делаю? Может ли кто-нибудь объяснить мне, что здесь происходит? Постскриптум Когда я использую 2 канала, это хуже, чем 3:

enter image description here

А 5 каналов это просто странно:

enter image description here

Может кто-нибудь объяснить мне, что происходит?

...