Warna Gambar
Termasuk bagian Pembelajaran Tanpa Pengawasan dalam perjalanan Machine Learning di Coddy. Pelajaran 41 dari 51.
Seorang pencetak sablon memiliki beberapa tinta, bukan jutaan warna. k-means memilih beberapa warna terbaik untuk setiap gambar:
Gambar berwarna memiliki bentuk (baris, kolom, 3): merah, hijau, dan biru untuk setiap piksel, masing-masing bernilai dari 0 hingga 1. Satu reshape mengubah piksel menjadi data:
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)Setiap pusat adalah warna. Pengindeksan pusat menggunakan label memberi setiap piksel warna pusatnya; reshape menyusun kembali baris-baris menjadi gambar.
Tantangan
SedangSebuah studio poster mencetak gambar danau pegunungan dengan k tinta menggunakan teknik cetak saring. Kode awal menggambar image berukuran 40 kali 60, membaca k, lalu menyiapkan bagan dengan judul.
- Ubah gambar menjadi satu baris untuk setiap piksel, lalu cari
kwarna dengan k-means. - Warnai ulang setiap piksel dengan warna pusatnya, lalu susun kembali baris-barisnya menjadi gambar.
- Gambarkan pada
ax, lalu tampilkan.
Seperti matahari terbenam ini dalam 5 tinta:
Programmu tidak mencetak apa pun: Coddy menjelaskan gambarmu dan tintanya. Lalu coba nilai k lainnya: kapan perahu merah mendapatkan tintanya sendiri?
Coba sendiri
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# Menggambar danau pegunungan berukuran 40 kali 60: langit, puncak bersalju, hutan, air, dan perahu merah
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)
# Jangan ubah baris-baris di bawah ini
image = paint_lake()
k = int(input())
fig, ax = plt.subplots()
ax.set_title(f"{k} inks")
ax.axis("off")
# Tulis kodemu di bawah ini
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pembelajaran Tanpa Pengawasan
1Menemukan Kelompok
Belajar Tanpa LabelMengukur KemiripanK-Means secara ManualK-Means dengan scikit-learnRangkuman: Anggota Gym4Pengelompokan Hierarkis
Penggabungan Langkah demi LangkahModel AglomeratifDendrogramRingkasan: Ras Anjing7PCA dalam Praktik
Melihat 64 DimensiKomponen sebagai PolaKompres dan RekonstruksiPCA Sebelum ModelRangkuman: Pemindai Wajah10Proyek: Penjelajah Digit
Amati DigitnyaPerkecil dengan PCAKelompokkan DigitBeri Nama pada KelompokTemukan yang Tidak BiasaLatihan sendiri: Compiler Python online