צבעוני – על RGB ומערכות צבעים

לעתים קרובות אנו נתקלים בסכמות צבעים שונות, בעיקר בסכמה הנפוצה RGB. בפוסט זה נדבר על מהי סכמת צבעים, למה יש סכמות צבעים שונות ונסביר שכל סכמה שננסה להגדיר לא תהיה מושלמת.

כאשר אנו מתבוננים בצילום שחור-לבן, כל פיקסל בתמונה מוגדר על ידי פרמטר אחד – הבהירות שלו. בהירות אפסית תיצור פיקסל שחור, ובהירות מליאה תיצור פיקסל לבן. גווני אפור יווצרו על ידי בהירויות בעוצמות הביניים. אם נרצה לייצג תמונה כזאת באופן דיגיטלי, נוכל לייצג כל פיקסל באמצעות ערך אחד – למשל נוכל למפות את הבהירות היחסית לערך ממשי בין 0 ל-1, כאשר 0 מייצג צבע שחור, 1 מייצג צבע לבן, והערכים באמצע מייצגים גוונים שונים של אפור. שיטה מקובלת יותר היא למפות את הבהירות לערכים שלמים בין 0 ל-255 בדרך דומה.

כאשר אנו עוסקים בציור או צילום בצבע, צריך יותר מאשר ערך בודד עליו אנחנו שולטים. הניסיון האנושי גילה כי כדי לשלוט על גוון הצבע של כל נקודה בציור או בתמונה אנו צריכים לשלוט בשלושה פרמטרים. עוד בימים לפני הצילום, הניסיון של הציירים גילה כי כדי ליצור כמעט את כל הצבעים צריך שיהיו לנו שלושה צבעי יסוד, ובעזרתם, על ידי ערבוב הצבעים היסודיים ביחסים שונים, להגיע כמעט לכל הגוונים המוכרים לנו.

גם כאשר התחיל להתפתח הצילום, שיטה נפוצה לקבלת תמונות צבע הייתה צילום הסצנה שלוש פעמים באמצעות מסננים בשלושה צבעים וקבלת שלוש תמונות שונות בשחור לבן. מה זה מסנן? מסנן, או פילטר, הוא זכוכית צבעונית שמניחים לפני העדשה והיא מאפשרת רק לקרני האור בצבע שלה לעבור. למשל, אם נניח לפני המצלמה זכוכית כחולה, רק הצבעים הכחולים יוכלו לעבור דרכה, וצבעי יסוד אחרים כמו אדום לא יעברו כלל.

ערבוב צבעים

כאשר היו מצלמים שלושה צילומים עם שלושה מסננים שונים היו משחזרים את הסצנה הצבעונית על ידי הקרנת שלושת הצילומים הללו באמצעות שלושה מקרנים שהוארו בשלושת הצבעים. הצלם הרוסי סרגיי פרוקודין-גורסקי, מחלוצי הצילום בצבע, צילם בטכניקה הזאת כבר בתחילת המאה העשרים ובזכותו יש לנו היום תמונות בצבע מרחבי האימפריה הרוסית מתקופה זו. למשל, התמונה הזאת של אלים חאן, אמיר בוכרה, כשלצידה שלושת הצילומים המקוריים.

Alim-Khan

התמונה העליונה צולמה עם המסנן הכחול, ולכן אנו רואים שהבגד הצבוע בתכלת מופיע בה בצורה בהירה – האור הכחול חדר אל המצלמה והטביע את חותמו בתשליל בצורה משמעותית. התמונה האמצעית צולמה עם המסנן הירוק, ולכן החלק של הגוונים הירוקים בתכלת חדר אל המצלמה והבגד מופיע שם בבהירות בינונית. התמונה התחתונה צולמה עם המסנן האדום, ולכן הבגד הכחול מופיע בה בצורה כהה – האור הכחול לא יכול היה לעשות את דרכו אל המצלמה דרך המסנן ולכן התמונה באזורים הללו נשארה חשוכה.

לפי תיאוריית יאנג-הלמהולץ, אנו יודעים כי גם העין פועלת בצורה דומה. בעין יש לנו שלושה סוגים שונים של קולטני אור – כל אחד מהם קולט אור בצבע שונה: כחול ירוק ואדום. העוצמה היחסית של האור מכל גוון יסודי שנקלט בכל קולטן באזור שונה יוצר למוח את הגוון הספציפי שקיים באותו אזור.

לכן, כדי לתאר את הצבע בכל פיקסל בתמונה אנו צריכים שלושה ערכים עבור כל פיקסל. הבחירה שנעשה עבור כל אחד משלושת הערכים הללו ובהתאם לכך הערכים שיהיו להם בהינתן גוון סופי מסוים תהיה מערכת הצבעים שלנו.

אחד ממערכות הצבע הנפוצות כיום, שהיא גם אחד מהמערכות המוקדמות שהתגלו, היא מערכת ה-RGB – אדום-ירוק-כחול. אם ניקח שלושה פנסים בצבעים אדום, ירוק וכחול כך שאפשרי לכוון את עוצמת ההארה של כל אחד מהפנסים, נוכל ליצור את רוב הצבעים הנראים לנו. למשל, אם נדליק רק את הפנס האדום – נקבל כתם אור בצבע אדום. אם בנוסף לפנס האדום נדליק גם את הפנס הירוק ונכוון אותו לאותו מקום – יהפוך כתם האור לצבע צהוב, שהוא החיבור בין אדום לירוק. באופן דומה נוכל להגיע לרוב הגוונים הנראים על ידי כוונון העוצמות של שלושת הפנסים.
כדי שנוכל לקבל את כמה שיותר צבעים נצטרך לבחור באופן מושכל את צבעי היסוד שלנו. אם צבעי היסוד ייבחרו בצורה לא מספיק טובה נקבל סקאלת צבעים קטנה מדי. אולם, כפי שנראה, אין מערכת צבעים מושלמת ואף אחת מהן לא תספיק כדי לתאר באופן מספק את כל הגוונים שיכולים להיראות לעין האנושית.

מערכת צבעים חלקית

נניח ובמקום לרצות לקבל את כל גווני הצבע אנחנו מסתפקים בכחול, אדום וכל גווני הסגול שנמצאים ביניהם. כדי להשיג את זה אנחנו מצטיידים בשני פנסים עם צבעי היסוד שלנו: כחול ואדום. כדי להשיג כחול מושלם מה שאנחנו צריכים לעשות זה להאיר עם הפנס הכחול בעוצמה המקסימלית ולא להאיר כלל עם הפנס האדום, כדי להשיג את האדום המושלם אנחנו צריכים לעשות ההיפך: להאיר עם האדום ולכבות את הכחול. כדי להשיג את הסגול שנמצא בדיוק באמצע אנחנו צריכים להאיר עם שני הפנסים בחצי עוצמה.
בניסוי הקטן הזה בעצם יצרנו מערכת צבעים כחול-אדום (B, R), כאשר כל גוון של הצבעים בספקטרום הזה ניתן לתיאור על ידי זוגות הערכים של העוצמה היחסית. אדום הוא (1 ,0), כחול הוא (0 ,1) והסגול הוא (0.5 ,0.5).
נשים לב כי אפשר להגיע לאותו גוון של סגול גם אם ניקח את הערכים (0.8 ,0.8). גם במקרה הזה נקבל צבע סגול שנמצא בדיוק באמצע בין האדום והכחול, אבל בעוצמה גדולה יותר, או בהירות גבוהה יותר. לצורך הפשטות נתמקד רק בגוון של הצבע ולא בבהירות שלו, ולכן נדבר רק על צבעים שסכום המשקלים שלהם הוא 1. במילים אחרות: צבעים שהם הממוצע המשוקלל של צבעי היסוד שבחרנו. אם נרצה לקבל בהירות שונה נכפיל את כל ערכי הצבעים במקדם זהה.

אז נניח שבחרנו שני פנסים בסיסיים, אדום וכחול:

purple and red

על ידי כיוונון העוצמה היחסית של הפנסים אנחנו יכולים להגיע לכל הצבעים שנמצאים על הספקטרום הזה, כאשר צבעי הבסיס שלנו הם בקצות הספקטרום:

partial red blue spectrum

נניח שאנו רוצים כעת לקבל את הכחול הזה:

blue

גם אם ננסה ללכת לקצה השמאלי ביותר של הספקטרום, דהיינו לכבות לחלוטין את הפנס האדום שלנו, עדיין נראה שהצבע שאנחנו מקבלים עדיין אדום מדי. זאת אומרת, במערכת הצבעים שבחרנו, כדי לקבל את הצבע הכחול הרצוי לנו אנחנו צריכים להפחית את הצבע האדום שזה אומר להדליק את הפנס האדום שלנו עם ערך שלילי. אפשר להסתכל על זה בצורה אחרת ולשאול כמה אדום אנחנו צריכים להוסיף לצבע הרצוי שלנו כדי שנקבל את הכחול הבסיסי של המערכת שלנו.
הבעיה במערכת הכחול-אדום שבחרנו היא שלא בחרנו את הצבע הכחול הנכון. אם נסתכל על הספקטרום ה״אמיתי״ של כל הצבעים בין כחול ואדום, הצבע הכחול שבחרנו לא היה כחול טהור:

partial red blue spectrum

אפשר להבין את העובדה שהיינו צריכים ערך אדום שלילי בצורה הזאת: ממוצע משוקלל בין שתי נקודות יכול להביא אותנו אל כל הנקודות באמצע: הצבע האדום (1 ,0) משמעו שהנקודה האדומה ״מושכת״ אליה במידה מקסימלית והנקודה הכחולה לא מושכת אליה כלל, מה שגורם לנקודה הסופית להיות בדיוק על הנקודה האדומה. הצבע הסגול (0.5 ,0.5) משמעו ששתי נקודות הבסיס שבחרנו מושכות אליהן במידה שווה ולכן התוצאה הסופית היא בדיוק באמצע ביניהן. כדי להגיע לגוון של כחול שנמצא משמאל לכחול הבסיסי שבחרנו לא מספיק שהאדום לא ״ימשוך״ אליו, אלא צריך שהוא ״ידחוף״ עוד שמאלה, ולכן במערכת הזאת אנחנו צריכים ערך אדום שלילי.

הבנו את הבעיה שהייתה במערכת הכחול-אדום שבחרנו: פשוט בחרנו את הצבע הכחול הבסיסי הלא נכון. כל מה שאנחנו צריכים לעשות זה לבחור כצבעי יסוד את האדום הטהור בצד הימני של הספקטרום האמיתי ואת הכחול הטהור בצד השמאלי והנה אנחנו יכולים לקבל את כל הצבעים שבין כחול לאדום.

משולש ה-RGB

כדי ליצור את כל הצבעים בכלל, ולאו דווקא הצבעים שבין כחול ואדום, נתקדם צעד קדימה. אנחנו יודעים שאת כל הצבעים אפשר לפרק לשלושה צבעי יסוד, אז כל מה שנצטרך לעשות הוא לבחור שלושה צבעי יסוד, למשל אדום, ירוק וכחול. גם כאן נתעניין רק בגוון ולא בבהירות ולכן נסתכל על צבעים שהערך שלושת הצבעים יחד הוא 1 (או 255). ממוצע משוקלל של שלושת הצבעים הללו יביא אותנו אל כל נקודה בתוך המשולש שנוצר על ידי שלושת הצבעים:

rgb-triangle

לכאורה, אם נבחר נכון את הגוונים המדויקים של צבעי היסוד שלנו, נוכל לדאוג לכך שכל הצבעים האפשריים יהיו בתוך שטח המשולש שלנו.

הבעיה

אלא שמתברר שזה בלתי אפשרי.
למה? נתבונן בגרף שיראה לנו את כל הצבעים הנראים לעין אנושית. כבר הזכרנו בדוגמה עם שני הצבעים שאנחנו לא מתעניינים בבהירות של הצבע אלא רק בגוון שלו, ולכן את כל הגוונים האפשריים המורכבים משלושה צבעי יסוד אפשר להציג בגרף דו ממדי (בדיוק כמו שאתה כל הצבעים המורכבים משני צבעי היסוד אדום וכחול ראינו לעין שאפשר להציג על ספקטרום חד ממדי). כמו בדוגמת שני הצבעים, נתעניין רק בצבעים שסכום צבעי היסוד שלהם הוא 1, ולכן כאשר נבחר עוצמות לשני הצבעים, העוצמה של הצבע השלישי נקבעת באופן אוטומטי.

גאמוט

הגרף שלהלן הוא גאמוט הצבעים, צורה מקובלת לייצוג כל גווני הצבעים הנראים לעין. המשמעות המדוייקת של הערכים בצירי ה-x וה-y חורגת מתחומי הפוסט, אבל העובדה החשובה לענייננו היא שהצורה שנוצרת היא צורה קמורה שלא יכולה לחסום משולש במדויק.

xy-chromaticity-diagram

המשמעות של העובדה הזאת היא שכל שלושה צבעים שנבחר להיות צבעי יסוד מתוך הצבעים הנראים לעין לא יוכלו ליצור משולש שיכלול את כל הצבעים. למשל, המשולש הזה נוצר על ידי צבעי היסוד RGB שמוגדרים בתוכנה פוטושופ. אם נצלם אובייקט שיהיה בו צבע ירוק מהגוונים שנמצאים בחלק השמאלי העליון של הגרף, פוטושופ תהיה חייבת לתת לצבע הזה ערכי RGB שלא יתאימו לצבע המקורי אלא לצבע ירוק דומה שנמצא בתוך מערכת הצבעים האפשריים. למעשה, כאשר אנו רואים את הגרף דרך מסך המחשב שלנו אנו לא רואים את הצבעים האמיתיים אלא קירוב כלשהו שלהם.

triangle-xy-chromaticity-diagram

פתרונות

כדי להתגבר על העובדה הזאת אפשר לחשוב על כמה פתרונות.

אנו יכולים להגדיר מערכת בה שלושת צבעי היסוד נמצאים מחוץ לגאמוט. דהיינו, המשולש שהיה נוצר משלושת צבעי היסוד היה חוסם את הצורה של הגאמוט. הבעיה במערכת הזאת היא שרבים מהצבעים שיווצרו במערכת הזאת, כולל שלושת צבעי היסוד עצמם, יהיו צבעים בלתי אפשריים לראיה בעין אנושית. יהיה קשה מאוד לעבוד במערכת בה לא ברור אלו מהצבעים הנוצרים הם אכן צבעים נראים לעין אנושית ואלו מהם הם צבעים בלתי אפשריים.

פתרון נוסף אפשרי הוא להגדיר מערכת עם יותר משלושה צבעי יסוד, באופן כזה במקום משולש נקבל פוליגון שיכיל שטח גדול יותר מהגאמוט. למשל, נגדיר ארבעה צבעי יסוד ונוכל לקבל את כל הצבעים שנמצאים בתוך המרובע שמתקבל. האתגר במערכת כזאת היא שלצבעים רבים יש יותר מייצוג אחד. למשל, את הצבע שנמצא בנקודת המפגש של שני האלכסונים יהיה אפשר לקבל בשתי דרכים בסיסיות על ידי ממוצע משוקלל של כל אחד משני זוגות הקודקודים הנגדיים, ובעוד אינסוף דרכים על ידי כל ממוצע משוקלל של שתי הדרכים הבסיסיות. למרות הקשיים הללו, יש מערכות בהן מימשו פתרון כזה.

HSV

יש מערכות צבעים נפוצות שהן לא משולש על הגאמוט. למשל, המערכת HSV – Hue, Saturation, Value: גוון, רוויה וערך בהירות.

hsv

במערכת הזאת שלושת הערכים מגדירים גליל בו אפשר למצוא את כל הצבעים האפשריים. נשים לב כי לצבע אחד יכולים להיות כמה ייצוגים. למשל, הצבע הלבן שנמצא במרכז החלק העליון של הגליל מתקבל על ידי ערך בהירות מקסימלי ורווייה מינימלית, בלי חשיבות לגוון. כך שלא ניתן למצוא מעבר חד-חד ערכי בין המערכת הזאת למערכת כמו RGB.
חשוב לשים לב כי המערכת הזאת מהווה מודל לוגי ולא פיזיקלי. המערכת מחקה את הצורה בה אנו מגדירים את הצבעים, אבל היא לא יכולה לשמש כצורה לקבלת כל הצבעים בפועל. דהיינו, לא נוכל לבנות מסך בו כל פיקסל מורכב משלושה פיקסלים של גוון-רווייה-בהירות משום שחיבור התכונות הללו לא נעשה בפועל בעולם הפיזיקלי. למשל, אין רכיב פיזי שמוסיף רווייה בערך מסויים לצבע שנמצא לידו. לעומת זאת, מערכת RGB היא מערכת פיזיקלית משום שניתן ליצור פיקסל אדום שפועל על הפיקסלים הכחולים והירוקים שלצידו.

8 תגובות בנושא “צבעוני – על RGB ומערכות צבעים

הוסיפו את שלכם

  1. פוסט מעולה – כרגיל.

    אנקדוטה מעניינת:
    בדפוס משתמשים בשיטה אחרת לייצוג צבעים שנקראת CMYK (מערכת מבוססת על 4 צבעי יסוד).
    ובמובנים מסוימים – היא עובדת "הפוך" מ RGB.
    ב- RGB, אם ניתן את הערכים (0, 0, 0) – נקבל גוון שחור מושלם.
    לעומת זאת: בדפוס – אם נחליט שאנו "מזריקים" 0 יחידות מכל רכיב צבע.. נקבל שהדף נשאר לבן..

    1. נכון. במחשב אלו צבעים חיבוריים – אם פיסקל מואר באדום ואנו מאירים אותו גם בירוק – לעין שלנו מגיעים שני הצבעים ואנחנו רואים צהוב. בדפוס אלו צבעים חיסוריים – אם הדף צבוע בצבע אדום שבולע את כל הצבעים חוץ מאדום, ואנחנו צובעים עוד שכבה של כחול שבולע את כל הצבעים חוץ מכחול – אנחנו מקבלים צבע שלא מחזיר שום אור, או את הצבע השחור. בפועל הצבעים לא ממש בולעים את כל הצבעים ולא מקבלים ממש שחור, ולכן צריכים גם את הצבע השחור.

      בנוגע לצבע שמתקבל כשלא עושים כלום, או בלאנק: באנגלית זהו black – שחור, בשפות רומאניות (צרפתית, ספרדית, וכו׳) זהו blanc – לבן.

  2. ממש מעניין!
    נקודה למחשבה: כמה דיוק צבע אנחנו מאבדים בצילום? (או מה הפער בין מצלמה מאד יקרה למצלמות פשוטות), כמה דיוק צבע אנחנו מאבדים בהצגה על מסך? (או מה הפער בין מסכים מקצועיים למסכים רגילים)

נשמח לשמוע מה אתם חושבים על המאמר

ערכת עיצוב: Baskerville 2 של Anders Noren.

למעלה ↑

רוצים להיות מפתחים טובים יותר?
הכניסו את כתובת המייל שלכם כדי לקבל הודעות על פוסטים חדשים ולהישאר מעודכנים.

נרשמת בהצלח. בתודה, הגמל.

שגיאה בלתי צפויה, אנא נסה שוב.

camelCase will use the information you provide on this form to be in touch with you and to provide updates and marketing.