קונטראסט דינאמי

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


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

"…….מכיוון שכל אלה לא מספיקים נכנס גם יחס ניגודיות דינמי אשר מוסיף עיבוד תמונה אשר בעצם משתמש ב-CONTRAST STRETCHING ו-CONTRAST COMPRESSION. נגיד ורוצים לגרום לעצם להיות מפורט יותר, אז בד"כ פשוט מותחים את ה-CONTRAST שלו. בעצם עושים מיפוי היסטוגרמה של התמונה, ואז אפשר להחליט שיש מעט מאוד מידע מתחת ל-70 IRE. לכן אפשר בעצם למתוח את התמונה כך שהיא נראית יותר ניגודית. השחור הופך כהה יותר (על חשבון דיוק) והלבן הופך לבן יותר. כך התמונה נהיית יותר ניגודית ויפה….."

כאן אנחנו נחשפים לשני מושגים ה – Contrast Compression וה – Contrast Stretching.

Contrast Compression הוא תהליך דינאמי של הקטנת קונטרסט באזור מסוים של התמונה לטובת הגדלת הקונטרסט באזור אחר.

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

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

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

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

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

עבור דוגמה, נציג את סמל האתר ובצידו הימני ההיסטוגרמה שלו:

היסטוגרמה

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

היסטוגרמה

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

כדי לייצג את עוצמת האור אפשר להשתמש ביחידות שונות כמו עוצמת מתח, עוצמת זרם, קרינה ואחוזים. כלומר אפשר להגדיר ששחור זה 0 אור, אפור זה 50% אור ו 100% זה הלבן. כדי להיות יותר טכניים ולהתאים את ההגדרות לאותות ולמינוחים שמועברים במציאות לפנל המסך וגם לטובת אלו שמשתמשים בתוכנות לעיבוד תמונה, נגדיר את השחור כרמה 0 ואת הלבן 255 שזה מיצג 256 רמות שנוצרו בעקבות שימוש במילה בינארית של 8 ביט.

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

נחזור לתמונה הפשוטה. כל תמונה בנויה מהרבה פיקסלים. בתמונה הנ"ל חלק מהפיקסלים מייצגים עוצמת אות של 20 חלק מייצגים עוצמה של 100 והחלק הגדול של הפיקסלים מייצגים עוצמה של 200. תוכנת ההיסטוגרמה סופרת כמה פיקסלים ברמה 0 יש בתמונה, כמה פיקסלים ברמה 1 יש בתמונה, כמה פיקסלים ברמה 3 יש בתמונה וכך עד 255. התוצאה מוצגת בגרף המכונה גרף ההיסטוגרמה.
ציר X (האופקי) זו רמת התאורה של הפיקסל (מ 0 עד 255) וציר Y (האנכי) מראה כמה פיקסלים יש ברמה זו (מ 0 עד מקסימום פיקסלים שיש בתמונה).

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

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

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

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

Contrast Compression

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

Contrast Compression

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

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

1. כל הפיקסלים בעוצמה 100 עד 255 עוברים מיפוי מחדש ונדחסים לתחום של 170 עד 255:

  1. פיקסל 100 ימופה כפיקסל 170.
  2. פיקסל 101 כנראה יעלם.
  3. פיקסל 102 ימופה כפיקסל 171.
  4. פיקסל 255 ימופה כפיקסל 255.

2. כעת התחום עד 170 פנוי וכל הפיקסלים מ 0 עד 100 ימופו מחדש ויקבלו את התחום מ 0 עד 170 בצורה הבאה:

  1. פיקסל 0 נשאר 0.
  2. פיקסל 1 ימופה כפיקסל 2.
  3. פיקסל 16 ימופה כפיקסל 32.
  4. פיקסל 32 ימופה כפיקסל 60.
  5. פיקסל 100 ימופה כפיקסל 170.

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

Contrast Compression

דחסנו (הקטנו) את כל אזור התאורה הבהירה מתחום של 155 פיקסלים (100 עד 255) לתחום חדש וקטן יותר של 85 פיקסלים (170 עד 255). אמנם קלקלנו קצת את המידע בבהירים אבל ממילא אין שם הרבה תוכן. החלק הטוב הוא שפינינו מקום להמשך.

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

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

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

התמונה לאחר השיפוץ:

ההיסטוגרמה של התמונה לאחר השיפוץ:

במבט ראשון לא בטוח שנבחין בהבדל, אבל התבוננות על העורף, השיער ומעיל העור ימחישו היטב את השינוי.
כדי להקל על ההשוואה נתבונן בתמונות זו לצד זו:

בשלב זה יכול כל אחד לשאול את עצמו איזו תמונה הוא מעדיף.

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

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

חברת סמסונג הציגה תהליך לשיפור תמונה שהם מכנים DNIe – Digital Natural Image engine. בתהליך זה הם משפרים את התמונה המוצגת בכמה מישורים שאחד מהם דומה לתהליך ה- Contrast Compression אבל עם עקום בעל שיפוע שדומה לאות S. כמובן בתהליך ה DNIe של סמסונג צורת ה S משתנה גם היא דינאמית.
על היתרונות והחסרונות של ה S-CURVE ניתן לקרוא במאמר הבא.

Contrast Stretching
רוב המערכות משתמשות בתהליך הבא שהוא ה Contrast stretching. כדי להסביר את תהליך ה Contrast stretching שהוא תהליך שונה מתהליך ה Compression נתחיל בבחינת תמונת הפרח הבאה:

Contrast Stretching

והנה ההיסטוגרמה שלה:

Contrast Stretching

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

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

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

  1. הפיקסל הראשון שקיים בתמונה הוא ברמה 30 וימופה כפיקסל 0.
  2. פיקסל 31 לאחר הנוסחה המתמטית ימופה כנראה ל 1.
  3. פיקסל 32 אחר הנוסחה המתמטית ימופה כנראה ל 2.
  4. באזור הפיקסלים הבהירים, פיקסל 210 לאחר הנוסחה המתמטית ימופה כנראה ל 255.
  5. פיקסל 209 ימופה לאחר הנוסחה המתמטית לקצת פחות מ 255.

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

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

Contrast Stretching

והתמונה לאחר התהליך:

Contrast Stretching

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

וכדי שיהיה קל להשוות, התמונות זו לצד זו:

Contrast Stretching

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

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

Contrast Stretching

Contrast Stretching

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

באזור השחור (בסביבות רמת ה 0) אין הרבה פיקסלים וגם בלבן (בין רמה 220 ל 255) אין הרבה פיקסלים פרט לקפיצה חדה באזור ה 240.

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

1. מחיקה – כל הפיקסלים מרמה 0 עד 30 ומרמה 220 עד 255 ימחקו.
2. מיפוי – כל הפיקסלים ימופו בתהליך דומה כפי שנעשה בתמונה קודמת.

התוצאה:

Contrast Stretching

  • אמנם השפיץ של הלבן נעלם אבל יותר פיקסלים קיימים באזור הבהיר מה שנותן תחושה של תמונה יותר בהירה.
  • באזור השחור יש יותר פיקסלים מה שנותן תחושה שיש יותר פרטים באזור השחור.

    התמונה בעקבות השינוי:

Contrast Stretching

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

שתי התמונות זה לצד זה (המקורית מצד שמאל):

Contrast Stretching

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

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

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

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

בתהליך ה Contrast stretching הנפוץ יותר, תוכנת עיבוד התמונה מאתרת אזורי פיקסלים לא קיימים או מיותרים באזור החלק הכהה ואזור החלק הבהיר של התמונה ודואגת למפות את הפיקסלים הקיימים מחדש כדי להשיג תחום דינאמי (קונטרסט) יותר גדול. בתהליך זה גדל הקונטרסט הכללי של התמונה אפילו על חשבון מחיקת פיקסלים "מיותרים".

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

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

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

להמשך דיון בנושא הכתבה לחץ כאן.


7:00
  /  
10.07.2007
  
כתב: motico, ערך: ziv_r

1