Menu
CoddyTech

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:

Dua gambar matahari terbenam berdampingan. Kiri, gambar asli: langit yang bergradasi dari ungu ke oranye, matahari kuning, laut gelap dengan pantulan oranye. Kanan, matahari terbenam yang sama dalam 4 warna datar

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:

Gambar berukuran 2 kali 3 dengan piksel berwarna jingga, kuning, dan biru tua, dengan panah menuju tabel berisi 6 baris, satu baris untuk setiap piksel, yang masing-masing memuat nilai merah, hijau, dan birunya

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.

challenge icon

Tantangan

Sedang

Sebuah 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.

  1. Ubah gambar menjadi satu baris untuk setiap piksel, lalu cari k warna dengan k-means.
  2. Warnai ulang setiap piksel dengan warna pusatnya, lalu susun kembali baris-barisnya menjadi gambar.
  3. Gambarkan pada ax, lalu tampilkan.

Seperti matahari terbenam ini dalam 5 tinta:

Matahari terbenam yang diwarnai ulang dengan 5 warna datar dan berjudul 5 inks: pita langit berwarna plum dan mawar, pita oranye, matahari kuning, laut biru tua dengan garis-garis oranye

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
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pembelajaran Tanpa Pengawasan

Latihan sendiri: Compiler Python online