Menu
CoddyTech

Görüntü Renkleri

Coddy'nin Machine Learning Journey'sinin Denetimsiz Öğrenme bölümünün bir parçası. Ders 41 / 51.

Serigrafi baskı yapan birinin elinde milyonlarca renk değil, birkaç mürekkep vardır. k-means, herhangi bir resim için en uygun birkaç rengi seçer:

Yan yana iki gün batımı resmi. Solda orijinali: mordan turuncuya geçişli bir gökyüzü, sarı bir güneş, turuncu yansımalı karanlık bir deniz. Sağda aynı gün batımı 4 düz renkle

Bir renkli görüntünün şekli (satırlar, sütunlar, 3) biçimindedir: piksel başına kırmızı, yeşil ve mavi değerleri, her biri 0 ile 1 arasındadır. Tek bir yeniden şekillendirme, pikselleri veriye dönüştürür:

Turuncu, sarı ve koyu mavi piksellerden oluşan 2'ye 3'lük bir görüntü ve her biri piksel başına bir satır içeren, kırmızı, yeşil ve mavi değerlerini tutan 6 satırlı bir tabloya yönelen bir ok

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)

Her merkez bir renktir. Merkezleri etiketlerle indekslemek, her piksele kendi merkezinin rengini verir; yeniden şekillendirme satırları tekrar bir görüntüye dönüştürür.

challenge icon

Görev

Orta

Bir poster stüdyosu, bir dağ gölünü k mürekkeple serigrafi baskı yapıyor. Başlangıç kodu, 40'a 60 boyutlarındaki image'ı çiziyor, k'yı okuyor ve başlıklı bir grafik oluşturuyor.

  1. Görüntüyü her piksel için bir satır olacak şekilde dönüştür ve k-means ile k renk bul.
  2. Her pikseli merkezinin rengiyle yeniden boya ve satırları tekrar bir resimde birleştir.
  3. Resmi ax üzerinde çiz ve göster.

5 mürekkeple yapılmış bu gün batımı gibi:

5 düz renkle yeniden boyanmış gün batımı ve başlıkta 5 mürekkep yazıyor: erik ve gül renklerinde gökyüzü şeritleri, turuncu bir şerit, sarı bir güneş, turuncu çizgili lacivert bir deniz

Programın hiçbir şey yazdırmaz: Coddy resmini ve renklerini açıklar. Ardından k için başka değerler dene: kırmızı tekne ne zaman kendi mürekkep rengini alıyor?

Kendin dene

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans


# 40'a 60 boyutlarında bir dağ gölü manzarası çizer: gökyüzü, karlı bir zirve, orman, su ve kırmızı bir tekne
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)


# Aşağıdaki satırları değiştirmeyin
image = paint_lake()
k = int(input())
fig, ax = plt.subplots()
ax.set_title(f"{k} inks")
ax.axis("off")

# Kodunuzu aşağıya yazın
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Denetimsiz Öğrenme bölümündeki tüm dersler

Kendi başına pratik yap: Online Python derleyicisi