Kolory obrazu
Część sekcji Uczenie nienadzorowane ścieżki Machine Learning w Coddy. Lekcja 41 z 51.
Drukarz sitodrukowy ma kilka farb, a nie miliony kolorów. k-means wybiera kilka najlepszych do dowolnego obrazu:
Obraz kolorowy ma kształt (wiersze, kolumny, 3): czerwony, zielony i niebieski dla każdego piksela, każdy w zakresie od 0 do 1. Jedno przekształcenie reshape zamienia piksele w dane:
pixels = image.reshape(-1, 3)
km = KMeans(n_clusters=4, n_init=10, random_state=0).fit(pixels)
poster = km.cluster_centers_[km.labels_].reshape(image.shape)
ax.imshow(poster)Każde centrum to kolor. Indeksowanie centrów za pomocą etykiet przypisuje każdemu pikselowi kolor jego centrum; zmiana kształtu składa wiersze z powrotem w obraz.
Wyzwanie
ŚredniStudio plakatowe drukuje sitodrukiem górskie jezioro przy użyciu k farb. Kod początkowy maluje obraz image o wymiarach 40 na 60, odczytuje k i przygotowuje wykres z tytułem.
- Przekształć obraz w wiersze, po jednym na piksel, i znajdź
kkolorów za pomocą algorytmu k-means. - Pomaluj ponownie każdy piksel kolorem jego środka i złóż wiersze z powrotem w obraz.
- Narysuj go na
axi wyświetl.
Na przykład ten zachód słońca w 5 farbach:
Twój program niczego nie wypisuje: Coddy opisuje twój obraz i użyte farby. Następnie wypróbuj inne wartości k: kiedy czerwona łódź dostanie własną farbę?
Spróbuj swoich sił
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# Rysuje górskie jezioro o wymiarach 40 na 60: niebo, ośnieżony szczyt, las, wodę i czerwoną łódkę
def paint_lake():
image = np.zeros((40, 60, 3))
for r in range(40):
for c in range(60):
if 30 <= r <= 31 and 10 <= c <= 17 - (r - 30) * 2:
image[r, c] = [0.8, 0.15, 0.1]
elif r >= 27:
t = (r - 27) / 12
image[r, c] = [0.1, 0.45 - 0.2 * t, 0.65 - 0.2 * t]
elif r >= 21:
image[r, c] = [0.1, 0.35 + 0.05 * (c % 3), 0.15]
elif r >= abs(c - 34) + 4 and r < 10:
image[r, c] = [0.95, 0.95, 0.97]
elif r >= abs(c - 34) + 4:
image[r, c] = [0.45, 0.42, 0.45]
else:
image[r, c] = [0.55 + r / 50, 0.75 + r / 120, 0.95]
return np.round(image, 3)
# Nie zmieniaj poniższych wierszy
image = paint_lake()
k = int(input())
fig, ax = plt.subplots()
ax.set_title(f"{k} inks")
ax.axis("off")
# Napisz swój kod poniżej
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Uczenie nienadzorowane
1Znajdowanie grup
Uczenie się bez etykietMierzenie podobieństwaK-Means krok po krokuK-Means w scikit-learnPodsumowanie: członkowie siłowni4Klasteryzacja hierarchiczna
Łączenie krok po krokuModele aglomeracyjneDendrogramyPodsumowanie: rasy psów7PCA w praktyce
Poznajemy 64 wymiarySkładowe jako wzorceKompresuj i odtwórzPCA przed modelemPodsumowanie: skaner twarzy10Projekt: Odkrywca cyfr
Przyjrzyj się cyfromZmniejsz wymiar za pomocą PCAGrupuj cyfryNazwij grupyZnajdź te nietypowe2Wybór k
InercjaMetoda łokciaWyniki silhouetteSkalowanie przed klasteryzacjąPodsumowanie: strefy dostawPoćwicz samodzielnie: Kompilator Python online