צבעי תמונה
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 41 מתוך 51.
לדפוס משי יש כמה צבעי דיו, לא מיליוני צבעים. k-means בוחר את המעטים הטובים ביותר לכל תמונה:
לתמונת צבע יש צורה (שורות, עמודות, 3): אדום, ירוק וכחול לכל פיקסל, כל אחד בטווח שבין 0 ל-1. שינוי צורה אחד הופך את הפיקסלים לנתונים:
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)כל מרכז הוא צבע. אינדוקס המרכזים באמצעות התוויות מעניק לכל פיקסל את הצבע של המרכז שלו; פעולת שינוי הצורה מקפלת את השורות בחזרה לתמונה.
אתגר
בינוניסטודיו לפוסטרים מדפיס באגם הררי בטכניקת הדפס רשת באמצעות k צבעי דיו. קוד ההתחלה מצייר את image בגודל 40 על 60, קורא את k ומגדיר תרשים עם כותרת.
- הפוך את התמונה לשורה אחת לכל פיקסל ומצא
kצבעים באמצעות k-means. - צבע מחדש כל פיקסל בצבע של המרכז שלו וקפל את השורות בחזרה לתמונה.
- צייר אותה על
axוהצג אותה.
כמו השקיעה הזו ב-5 צבעי דיו:
התוכנית שלך לא מדפיסה דבר: Coddy מתאר את התמונה שלך ואת צבעי הדיו שלה. עכשיו נסה ערכים אחרים של k: מתי הסירה האדומה מקבלת צבע דיו משלה?
נסו בעצמכם
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# מצייר אגם הררי בגודל 40 על 60: שמיים, פסגה מושלגת, יער, מים וסירה אדומה
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)
# אין לשנות את השורות שלהלן
image = paint_lake()
k = int(input())
fig, ax = plt.subplots()
ax.set_title(f"{k} inks")
ax.axis("off")
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
תרגלו בעצמכם: קומפיילר Python אונליין