Summary of Image Processing - 2023 PDF
Document Details
Uploaded by ExceedingSaxophone
Hebrew University of Jerusalem
2023
Sharon Rotgeizer
Tags
Summary
This document is a summary of an image processing course from 2023. It provides a concise overview of the course content and topics like image acquisition, histograms, geometric operations, and more. The summary also discusses the challenges associated with computer vision.
Full Transcript
שרון רוטגייזר עיבוד תמונה הקדמה סיכום זה נוצר על ידי ,כדי לנסות ולהנגיש את הקורס הזה ,שקשה ממילא לסטודנטים ועלול להרגיש מאוד כבד.החוברת תאפשר לכם לחפש במ...
שרון רוטגייזר עיבוד תמונה הקדמה סיכום זה נוצר על ידי ,כדי לנסות ולהנגיש את הקורס הזה ,שקשה ממילא לסטודנטים ועלול להרגיש מאוד כבד.החוברת תאפשר לכם לחפש במהרה כל נושא. לצערי ,הסיכום לא כולל את התרגולים מכיוון שהם מעשיים מדי ,עם שאלות ופתרונות לא קצרים.החוברת כתובה על פי איך שחגית העבירה את הקורס בשנת 2023ולכן ,קחו את התוכן פה בעירבון מוגבל ,היא אינה מהווה תחליף לאף הרצאה או תרגול. ההרצאות אינן מחולקות לפי ארבע שעות וכו' ,אלא לפי הנושאים המועברים בקורס. הסיכום אינו תחליף להרצאות ,לא מתיימר להיות כזה והשימוש הוא באחריותכם הבלעדית. המלצתי היא להגיע לכל הרצאה ולכל תרגול – בקורס הזה הם מומלצים לתרגול המעשי של החומר עם שאלות. לסיום ,אני מקווה שהחוברת תעזור לכם להבין את הדברים בקורס. שרון. תוכן עניינים שיעור – 0מבוא שיעור – 1רכישת תמונה שיעור – 2היסטוגרמות שיעור – 3פעולות נקודה שיעור – 4פעולות גיאומטריות שיעור – 5פעולות מרחביות שיעור – 6התמרת פורייה שיעור – 7פעולות במרחב התדר שיעור – 8פירמידות שיעור – 9זיהוי שפות שיעור - 10התאמת תמונה שיעור – 11צבע נספח – הוכחה שבסיס פורייה אורתונורמלי נספח -סגמנטציה נספח -למידה ממוכנת ][TBA שרון רוטגייזר שיעור - 0מבוא מה זה בעצם עיבוד תמונה? זה חלק אחד מתוך התחומים שקשורים למדעים ויזואליים עם תמונות ,כמתואר משמאל. עיבוד תמונה זה התחום שלוקח את התמונה ,מבצע עליה פעולות )עיבוד( והפלט הוא תמונה גם כן ,רק שהיא יכולה להיות מחודדת ,משופרת ,עם תוספות כלשהן וכו'. הצעד הבא הוא ראייה ממוחשבת – לקחת תמונה ולהוציא עליה תובנה יותר סמנטית.למשל – להוציא סצנה תלת ממדית ,להגיד איפה היא צולמה ,להגיד מה אנחנו מזהים בתמונה וכו'. תחום שלישי הוא מידול גיאומטרי – לקחת את התמונה ,לסובב אותה או לבצע עליה מניפולציה בעולם התלת ממדי ולרנדר )בעזרת גרפיקה ממוחשבת( תמונה חדשה דו ממדית. למרות שמדובר בארבעה תחומים גדולים ,כל העסק הזה עובד ביחידה אחרת בעבודה היום יומית. דרך אחרת להשוות בין ראייה ממוחשבת לעיבוד תמונה היא על ידי מידול כמו העין האנושית ,שזו ברמה הנמוכה ודברים יותר מורכבים הם ברמות היותר גבוהות.בעוד שעיבוד תמונה עוסק בניתוח הבסיסי של תמונה )זיהוי שפות ,חילוץ תבניות ,הכנה של התמונה(; אין טעם להתעסק בניתוח סמנטי של התמונה או זיהוי עצמים אם התמונה מלוכלכת. למה בעצם ראייה ממוחשבת היא קשה? נכון ,יש לנו למידה ממוכנת היום והכלים מתקדמים ,אבל עדיין לא מספיק.לנו זה קל לזהות בן אדם שמנסה לפרוץ לרכב אבל למחשב זה קשה.נראה זאת על ידי כמה דוגמאות ,שיבלבלו אפילו אותנו! בדוגמה מצד שמאל ,זה לא הכי טריוויאלי ,אבל מסתתרת פרה! בדוגמה מימין ניתן לראות משולש שאפילו קצת בולט יותר מהרקע אבל בעצם אין שם כלום! הדבר היחיד שרומז לנו על קיומו של המשולש הזה הוא העיגולים השחורים.אנחנו נוטים לראות צורות שלמות ופה משהו מסתיר את העיגולים האלה.הקומבינציה של שלושת ההסתרות האלה שיוצרות קווים ישרים מתפרשים לנו בתור אובייקט.איך נגיד את זה למחשב? איך נגיד לו שעיגול זה דבר סטנדרטי ועיגול לא שלם זה מוזר. שרון רוטגייזר בדוגמה האחרונה ,אנחנו רואים סתם רצף אותיות של ע' וש' ,אבל אם נשים שלושה קווים פתאום אנחנו רואים את הצורה השלמה ואפילו יודעים לנתח מה היא ,ולהגיד שזו צורה תלת ממדית.אם נעלים את הקווים )מימין( יהיה לנו קל לזהות את הצורה.אז למה בצד שמאל זה יותר קשה לזיהוי? אנחנו רגילים לקווים סגורים.בעיני העיניים שלנו – קווים לא סתם נחתכים באמצע ,משהו מסתיר אותם.לכן בצד ימין קל לנו לראות את זה ,ובצד שמאל קשה. בעיה נוספת בניתוח של תמונות.נסתכל למשל על זו משמאל ואנו רואים בה 5בליטות ושקע אחד.אם אנחנו עושים שיקוף של 180מעלות ) (vertical flipלפתע יהיו לנו 5שקעים ובליטה אחת! הם אמנם שיקוף אחת של השנייה אבל האפקט התלת ממדי חזק.הסיבה לזה היא שהעין שלנו רגילה לכך שהתאורה באה מלמעלה.השמש ,הירח והמנורה מעלינו. הניתוח מתבצע אוטומטית לפי ההנחה.המחשב לא מכיר את ההנחות האלו. דוגמה לאשליה קצת יותר מורכבת ,היא זו שמשמאל.לכאורה יש לנו שתי תמונות של אדם הם נראים בני אדם רגילים כאשר אחד הוא לכאורה שיקוף של השני.אבל ,אם נהפוך את התמונה השנייה ,נקבל את העיוות בצד ימין.בהתחלה ,חשבנו שהכל בסדר! המוח מעבד צורות מורכבות בצורה שונה. תבנית של פרצוף שכוללת עיניים ראש ופה יכולה להיות מפורשת בצורות שונות ,כלומר המוח משתמש בשני אלגוריתמים.הראשון הוא זיהוי פרצוף קלאסי ,כמו התמונה המקורית, אבל כשהתמונה הפוכה ,המוח משתמש באלגוריתם אחר בסיסי יותר ,שעדיין מאשר את היותו של הפרצוף תקין ,למרות שזה לא כך בפועל. עיבוד תמונה נמצאת היום בכל מקום ,מוצר או אפליקציה שיש להם איזושהי נגיעה לתמונות. בהתאמה ,התחום גם מבוקש בתעשייה.יש את זה במכוניות אוטונומיות ,בצבא ,סרטים וכו'. להלן מור"ק על מכוניות אוטונומיות :בעבר הרחוק ,שנות ה ,80-ניסו בגרמניה לפתח את המכונית האוטונומית הראשונה.הכל היה טוב ,המכונית נסעה ישר ,הגיעה לכיכר ,עשתה חצי סיבוב והמשיכה פתאום באיזשהו קו ישר אקראי.המפתחים לקחו את הרכב ,בדקו כמה שעות את הקוד ,והחזירו את המכונית לכביש.הכל טוב ,המכונית נוסעת ,מגיעה לכיכר, עוברת את המקום שבו סטתה קודם ,ואחרי כמה שניות שוב המשיכה לאיזשהו קו ישר מקרי אחר.מה קרה פה? תאורה! המכונית חיפשה את השפה שמחברת בין הכביש למדרכה אבל מאיזושהי נקודה וזווית ,הצל של הרכב התלכד עם המקום שהמכונית אמורה לעקוב אחריו.. מאותו המקרה למדו על בעיות תאורה ושגם צל הוא דבר בעייתי שצריך לקחת בחשבון. שרון רוטגייזר נראה מה אנחנו כן יכולים לעשות עם עיבוד תמונה בלבד. הדוגמה הראשונה היא השלמת חלקים חסרים /מלוכלכים בתמונה. דוגמה שנייה היא העלמת אובייקטים מתמונה )והשלמה של מה שהיה מאחוריי אותו האובייקט(. לעיתים )ואפילו נראה זאת בקורס( נרצה לקחת טקסטורה קטנה ולייצר ממנה אחת גדולה יותר ,אבל לא בצורה של הדבקה )כי יראו את התפר( אלא ממש טקסטורה עם אותן תכונות סטטיסטיות. יש עוד המון דוגמאות ,ביניהן אחת שלוקחת תמונה של טום הנקס ,בונה ממנו מודל תלת ממדי ,משנה את המודל )גרפיקה ממוחשבת( ואז מייצרת תמונות חדשות. שימוש אחד מאוד מעניין הוא דיפ פייק – למידת המודל התלת ממדי של אדם א' ושתילת הפרצוף של אדם ב'. הגיע הזמן לסקירה קצרה של נושאי הקורס: נדבר על איך רוכשים תמונה. נדבר על איך מעבדים את התמונה ,תיקונים.למשל – שינוי בהירות ,קונטרסט.נדבר על פעולות גיאומטריות שמסובבות /מורחות על התמונה.נדבר על פעולות מרחביות כמו ניקוי או טשטוש של תמונה. נדבר על כלי שנקרא טרנספורם פורייה.הוא כלי מורכז שיעזור לנו להבין יותר דברים על התמונות אבל גם להוריד רעשים מחזוריים. נדבר על רזולוציות שונות ואיך הן יכולות לעזור לנו ,למשל שילוב תמונה אחת בתוך השנייה. נדבר על זיהוי אלמנטים פשוטים בתמונה כמו זיהוי שפות ופינות. נדבר על סגמנטציה שהיא מעיין חילוץ אובייקטים על ידי צביעה. נדבר על זיהוי תבניות.למשל – נרצה למצוא בצורה יעילה תמונות של פנים. נרצה לדבר על התאמה בין תמונות כדי להדביק אותן. אחרי עיבוד תמונה חגית ממליצה )כמובן( לקחת את קורסי ההמשך שהם ראייה ממוחשבת, המעבדה בחקר חישובי של התנהגות אנושית ויש עוד מספר קורסים. יש במצגת שקופית שנדלג עליהם ,שמדברת על איך פועלת מערכת הראייה.רבים מאלו שפיתחו את התחום שאבו השראה אלגוריתמית מפעילות העין.יותר מזה – מערכת הראייה היא גם זו שתשפוט את התוצאות. שרון רוטגייזר שיעור – 1רכישת תמונה נדבר על איך אנחנו רוכשים תמונה ואיך נהפוך אותה לדיגיטלית ,כזו שנוכל לעבוד עליה עם הכלים האלגוריתמיים שלנו. נשאל בעצם ,מה זו תמונה? התמונה היא הטלה של סצנה תלת ממדית לדו ממד. פורמלית ,התמונה יכולה להיות מוגדרת בתור פונקציה ,𝑓𝑓: ℝ2 → ℝכאשר בכל מיקום ) (x,yבמישור התמונה ,יש איזשהו מדד לכמות האור שיש באותה הנקודה. ככל שהערך יותר בהיר ,כך גם העוצמה תהיה גבוהה יותר.למשל ,מימין מופיעה התמונה ומשמאל איך אותה התמונה נראית כפונקציה. בגלל שהחלק הלבן הוא בצורת איקס ,המקומות שבהם העוצמה היא הגבוהה ביותר גם יתקבלו בצורת איקס.באופן דומה ,כל שאר האזורים הם שחורים וכמות האור היא .0 עכשיו נדבר על רכישת התמונה.נניח שיש לנו סצנה ו ) filmאמיתי או ccdדיגיטלי( עליו אור נרצה להטיל את התמונה.יש לנו בעיה – כל נקודה בסצנה התלת ממדית מעבירה שיגרום לכל מקום.אם כן – כל נקודה ב filmמקבלת אור מכל מקום בתמונה ,דבר לבלגן. מה אנחנו היינו רוצים? היינו רוצים שלכל נקודה קרן אור אחת בדיוק תפגע במקום אחד ב .filmאיך נעשה זאת? נחסום את כל הקרניים ונשאיר חריר קטן שדרכו תיכנס קרן אור אחת )נכון ,זה לא אפשרי ,נניח שגודל החריר שואף ל.(0 אם הייתי יושב בתוך הקופסה הזאת ,היינו רואים את התמונה ,אמנם הפוכה אבל עדיין נראה. לדגם הזה אנחנו קוראים מצלמת חריר – יש חור קטן כדי למקד את התמונה במקום אחד. לא סיימנו! מכיוון שהחור הזה מאוד קטן יש לנו בעיה – האור שייקלט יהיה מאוד חלש.לכן, פתרון ראשון הוא לפתוח את החריר להרבה זמן עד שייקלט מספיק אור.אם האובייקט יזוז באמצע נקבל תמונה מטושטשת.אז אין לנו ברירה – צריך איכשהו להגביר את עוצמת האור בלי להגדיל את החור. לכן ,נכנסת פה העדשה.העדשה לוקחת את כל הקרניים שיוצאות מאובייקט מסוים וממקדת אותם לנקודה אחת.ככה הרבה אור מגיע והפיקוס עדיין טוב. עם זאת ,העדשה רגישה למרחק.רק עבור מרחק מסוים של האובייקט מהעדשה יהיה פוקוס של הנקודות.כשאנחנו מפקסים את המצלמה זה אומר שהאזור שבפוקוס ייפול על מישור התמונה בצורה ממוקדת וכל השאר יהיה מטושטש )בגלל ריבוי קרני אור(.למשל בתמונה משמאל ,הנקודות האדומה והירוקה יתפקסו ,אך הנקודה הכחולה תתפקס מחוץ למישור התמונה ונוצר טשטוש.אם כן ,העדשה מפקסת מישור מסוים. לסיום ,צילום תמונה נעשה באמצעות tradeoffבין גודל מיקום העדשה וגודל החור.נשים את כל המערכת בקופסה אחרת וזו המצלמה. מצד שמאל מוצגת התמונה הראשונה מ ,1826לאחר 8שעות של חשיפה. שרון רוטגייזר נסכם את התהליך עד כאן.רכשנו את התמונה דרך העדשה לתוך מישור התמונה הדו ממדי.אבל ,כדי להכניס את זה למחשב נצטרך עוד יחידה שתהפוך את התמונה לדיגיטלית. זהו רכיב חומרתי עם סנסורים שפשוט סופר פוטונים ואז מדווח ליחידת חישוב כלשהי את המספר.כל רכיב מוציא מספר אחד ולמעשה המערך של התוצאות זו התמונה שתתקבל.כל סנסור יוצר מספר אחד שקוראים לו פיקסל. כמובן שיש פה עוד תהליכי עיבוד נוספים על כמות הפוטונים שנכנסה לכל רכיב כזה ,אך נדלג על שלבים אלו.כמו כן ,לכל נקודה יש מדד רגישות נפרד לאדום כחול וירוק. התמונה משמאל מייצגת ריבוע מתוך התמונה ואיך הוא מיוצג בצורה דיגיטלית ,כאשר המספרים נעים בין ) 0שחור( ל255- )לבן( ויש 256דרגות אפור שונות. בקורס אנחנו נעבוד עם תמונות דרגות אפור ,כלומר תמונת grayscaleעם 256דרגות שונות )נדרשים 8ביטים = בית אחד לייצוג(.יש לנו גם תמונות בינאריות לחלוטין )שחור או לבן(. תמונת צבע היא יותר מורכבת ויש בה שלושה ערוצים של אדום ,ירוק וכחול ולמעשה כל תמונה כזו ניתן לפרק לשלוש ערוצים וכל ערוץ יהיה דרגות אפור של "כמה אדום"" ,כמה ירוק"" ,כמה כחול".אז תמונה צבעונית זו הכללה של דרגות אפור ולצורך הנוחות נתעסק רק בתמונות דרגות אפור.בסוף הקורס נרחיב על ההתאמה לעולם הצבע. – Image intensityזה מונח פיזיקלי המתאר את כמות הפוטונים שנפלו לנו באזור בתמונה, "עוצמת האור" – Image brightnessזה כבר משהו תפיסתי ,כמה בהירות אנחנו קולטים מהנקודה הזאת. נכון ששניהם מונוטוניים ,אך אינם זהים.הדרך שבה נראה שהם שונים היא בדוגמה משמאל. המדד הראשון נע בקפיצות שוות ,כלומר חלוקה שווה של המקטע ל256- חתיכות.מה שמעניין הוא שהשחור עולה מאוד מהר ואילו הצבעים הבהירים עולים מאוד לאט. המדד השני נע בקפיצות שוות של הבדלי בהירות. ההבדל בין שני המדדים נובע מכך שאנחנו פחות שמים לב להבדלים בין צבעים בהירים ויותר שמים לב להבדלים בין צבעים כהים.אנחנו יכולים לראות שהקשר בין שני המדדים הוא לא לינארי ויותר מזה – הוא יהיה לוגריתמי.תיקון גאמא )שנראה( ,עושה משהו דומה – הוא יעזור לנו לעבור ממדד העוצמה למדד הבהירות.עכשיו נראה עוד דוגמאות להבדל הזה. נשים לב לדוגמה הוויזואלית משמאל.יש לנו ריבוע כהה ובהיר ובתוך כל אחד מהם יש .patchהתמונות נבנו ככה שקפיצת ה intensityשלהם זהה ,כלומר פער הפיקסלים זהה.עם זאת ,ניתן לראות בבירור שהבדלי הבהירות הרבה יותר דומיננטיים בריבוע הכהה.בצד ימין כמעט לא רואים הבדל בין הריבוע ל patchשלו. אם נחזור רגע למדדים שלמעלה ,אז ניתן לראות שאם נזוז קצת בחלק הבהיר לא ישתנה הרבה ,אבל אם נזוז בחלק השחור נשים לב די מהר להבדל )בעין(. שרון רוטגייזר נזכיר לשנייה את חוק וובר ,שמראה את הקשר בין העוצמה לבהירות ומופיע בגרסאות שונות בעוד תחומי ביולוגיה ופיזיולוגיה ונשתמש בחוק הזה בהמשך.הוא קובע שההבדל התפיסתי הוא לא לינארי ביחס לשינוי האמיתי וזה גם מסתדר לנו בגרף משמאל – אם נעשה שינוי בעוצמות הנמוכות )כהה( נרגיש אותו הרבה יותר חזק מאשר כשנעשה שינוי בעוצמות הגבוהות. למעשה ,יש חוק דומה גם לגבי צבעים.יש אזורי צבע ששינוי קטן בהם יהיה ניכר לעין מאוד מהר ויש אזורים במרחב הצבע שגם אם נשנה את עוצמת הפוטונים לא נראה הרבה גדול )למשל באזורים הירוקים(. עכשיו נרצה לדבר על ה .digitizerתפקידו הוא לקחת תמונה רציפה ) (𝑓𝑓: ℝ2 → ℝשהערך בכל נקודה הוא מספר הפוטונים שנפלו שם ונרצה לדגום את זה ולהפוך את זה למטריצה עם מספר סופי של פיקסלים.בכל כניסה יהיה לנו ערך אחד שגם הוא מגיע מקבוצת ערכים סופית )יהיה .(0-255הנ"ל מתבצע בשני שלבים: דגימה ) – (spatial samplingכמה פיקסלים נכניס בשדה הראייה של הסנסור. קוונטיזציה ) – (quantizationהפיכת התחום הרציף לתחום הבדיד )דרגות אפור(. נתחיל מלדבר על דגימה במרחב.התהליך לוקח את התחום הרציף ומחלק אותו לאזורים ריבועיים ,כאשר לכל ריבוע הוא נותן ערך אחד. הערך יכול להיקבע על פי ממוצע הפוטונים באותו האזור או החציון שלהם וכו'.כבר במעבר השני ניתן לראות איך הרזולוציה משתנה במעבר לדיגיטלי. הסיבה שהמישור מחולק לשריג היא מטעמי נוחות )גם מתמטית(.היו בעבר ניסיונות לעבוד עם משושים או משולשים אבל ריבועית נוחים ,גם כי הם ניתנים לחלוקות קטנות שוות גודל. השאלה הבאה שנשאלת היא "לכמה ריבועים לחלק את התמונה?".אז מסתבר )באופן לא מפתיע( שככל שיש יותר – יותר טוב.כמות הריבועים הזו נקראת רזולוציה ועכשיו נפרמל. נאמר שרזולוציה היא כזו שמתארת את הפרט הכי קטן שניתן לראות ,מה יכולת ההפרדה שלנו בין שני אלמנטים )ככל שיש יותר הפרדה ,הרזולוציה גבוהה יותר(. כדי לדבר על רזולוציה מבחינה מספרית נצטרך לדבר על תדר ואורך גל. נסתכל לדוגמה על הסינוס הזה ,זו אינפורמציה מחזורית כלשהי.אפשר להגיד למשל שלאורך ציר ה x-משתנה הבהירות.אורך גל זה האורך של מחזור אחד והיחידות יהיו יחידות אורך או פיקסלים.לדבר הזה יש מדד משלים שהוא התדר ,אחד חלקי אורך הגל.התדר נמדד ביחידות "כמה מחזורים יש לנו ביחידת אורך אחת". למשל ,אם אורך הגל הוא חצי מטר ,אז התדר הוא שני מחזורים במטר אחד.עוד דוגמה, אם נכווץ את הגל מה יקרה? אורך הגל קטן והתדר עולה ,כי באותה יחידת אורך נכנסים יותר מחזורים.כרגע התדרים הם לאורך שורה או עמודה של התמונה ואפשר גם לדבר על תדרים דו ממדיים )למשל אלכסוניים( ונדבר על כך בפורייה.תדרים משומשים גם בצבעים וגם באודיו ועוד. נחזור לדבר על דגימה.בצד שמאל יש לנו סיגנל אדום מחזורי ושמנו חלונות אפורים בקפיצות מסויימות ,די גדולות אפילו.מה זה אומר על התדר שלנו? שהוא יהיה נמוך! אם לוקח לנו )תחת ההסתרה!( זמן לסיים את המחזור ,אורך הגל האמיתי ארוך יותר ולכן התדר נמוך.או ככה לפחות מערכת הראייה שלנו חושבת.מערכת הראייה חושבת שהדוגמה משמאל היא מה שמסתתר מאחוריי התמונה. שרון רוטגייזר מערכת הראייה שלנו נוטה לתת את הפרשנות הכי פשוטה שאפשר למידע.אנחנו לא חושדים שקורה משהו מאחוריי האפור לא תקין.אבל למעשה ,מה שמסתתר מאחוריי האפור זה מה שמשמאל! אז טעינו ואורך הגל קטן יותר והתדר יותר גדול. מה שעיוות את המחשבה שלנו הם המלבנים הגדולים האלה. אם ניקח הרבה יותר מלבנים קטנים ,אז כבר נראה את המציאות בצורה נכונה.כלומר, אנחנו נצטרך לדגום את המידע בצפיפות הרבה יותר גבוהה )בקפיצות קטנות יותר, בתדר גדול יותר(. זה מוביל אותנו למשפט הראשון שנקרא משפט .nyquistהמשפט אומר שאם אנחנו רוצים לראות אינפורמציה עם תדר ,fאנחנו צריכים לדגום בתדר של יותר מ.2f-המשפט גם עובד הפוך – אם נרצה לראות דברים במרחק ,dנצטרך לדגום בקפיצות פחות מחצי .d נסתכל על הדוגמה מצד שמאל.כמו שניתן לראות ,המחזור מסתיים בחץ הירוק ואנחנו דוגמים איפה שהעיגולים הכחולים ,כלומר ב3/4- מחזור.ללא כל מידע נוסף ,הקוווקו האדום הוא מה שהמוח שלנו יחשוב שקורה.מה יקרה אם נדגום בחצי אורך גל? נקבל בדיוק את ציר ה !x-כלומר ,נחשוב שזה 0ואין כלום )לכן חשוב שזה יהיה יותר מפעמיים התדר ,ללא שוויון(.נראה אינטואיציה עמוקה יותר להוכחת המשפט בפורייה.תדר – nyquistפעמיים התדר שנרצה .f דוגמה נוספת :נתונות תמונות התדרים הבאות.הכחולה בתדר קבוע והשחורה בתדר משתנה.ננסה להלביש את הכחולה על השחורה פעמיים: למה בצד שמאל אנחנו רואים פסים עקומים ובצד ימין פסים ישרים? לתמונה הכחולה יש תדר קבוע שהוא מתחת לתדר Nyquistבחלק השמאלי העליון של התבנית השחורה ,שם לתמונה השחורה יש תדר גדול מדי ונוצר האפקט של הפסים העקומים.בחלק התחתון מימין לעומת זאת ,תדר התמונה השחורה קטן והתמונה הכחולה כבר מעל תדר Nyquistהנדרש. לתופעה הזאת קוראים – Aliasingקורה כשאנחנו דוגמים מתחת מ ,Nyquistואפילו מתחת לתדר המקורי. איך זה קשור לדגימה הריבועית שעשינו של תמונות? אנחנו דוגמים ערך אחד מכל ריבוע, אבל בקפיצות קבועות.אם היינו משתמשים ביותר ריבועים אז נקבל תמונה איכותית יותר וזה בדיוק מה שמגדיר את הרזולוציה.כלומר דגימה בתדר Nyquistמבטיחה לנו רזולוציה. ככל שנשתמש ביותר ריבועים ,ככה תדר הדגימה גבוה יותר. בהרצאה מוצגת דוגמה נוספת ,של גלגלי עץ מתוך כרכרות סוסים שמסתובבים.אשליה שנוצרת היא שהגלגל עשוי להיראות ככה שהוא מסתובב אחורה ,למרות שהוא אמור לנסוע קדימה.נניח שמחזור אחד הוא תזוזה של הפס הכחול למיקום של הפס הבא וניצור את הפריים הבא על ידי סיבוב הגלגל ,כך שהפס הכחול יהיה בדיוק באמצע של שני פסים, כלומר נזוז חצי מחזור.דגימה בחצי המחזור היא בדיוק ,Nyquistאבל לא יותר ולכן ייווצר .Aliasingזה בא לידי ביטוי בכך שאנחנו לא יודעים אם הפס הכחול עלה חצי מחזור או שהפס החום שמעליו ירד חצי מחזור ,מה שיוצר את האפקט של גלגל שמסתובב אחורה וקדימה. שרון רוטגייזר קיים עוד וידאו של הליקופטר שלא רואים סיבוב של פרופלורים ,וזה נוצר על ידי דגימה שהיא בדיוק בתדר הנכון או כפולה שלו )או חלקיות( ,כי אז למעשה נוצר אפקט שאין סיבוב. עכשיו ,ראינו שלכל ריבוע יש צבע מסוים והמטרה היא למצוא את שני הצבעים האחרים. אפשר להשלים את זה בדרך נאיבית ,למשל לקחת עבור פיקסל ירוק את ממוצע הכתומים שמסביבו וככה גם את הכחול וכו'.אבל ,נשים לב שכל צבע נדגם פיקסל כן ופיקסל לא, כלומר הם דוגמים לנו את העולם.אנחנו יכולים להשלים את זה פשוט על ידי החלקת התדר שאמור לעבור בין שני אדומים למשל.עם זאת ,זה גורם לנו לפספס פרטים קטנים. נניח שיש לנו תמונה בעלת כמה תדרים שונים ואנחנו יודעים איפה התדרים הנמוכים והגבוהים.במצב כזה ,אפשר לעשות דגימה לא אחידה )בקצבים שונים(.את השמיים והעמוד למשל ,נוכל לדגום פחות )זול יותר( ואת החלונות נצטרך לדגום יותר פעמים )פחות ריבועים בחיישן(. כשסיימנו את הדגימה ואנחנו יודעים כמה אור יש לנו בכל מקום בשריג ,נרצה להפוך את מספר הפוטונים שיש לנו )עד מאה אלף( לערך מספרי תחום )0- ,(255בעזרת קוונטיזציה. למה בעצם ?0-255אולי ננסה לבחור מספר אחר. כשאנחנו לוקחים פחות ערוצים אנחנו עדיין רואים המון פרטים בתמונה אבל יש ארטיפקטים אחרים.למשל ,בתמונה עם 8צבעים יש קו באמצע המצח וגוש לבן על הלחי.זה נובע מכך שאין לנו מספיק דרגות אפור.אין לנו מספיק צבעים כדי לתאר מעבר חלק מאזור א' לאזור ב'.כשיש לנו קווים כאלה )כמו באמצע המצח( הם נקראים שפות ) (contoursובמקרה הזה ,false contoursכי אלה לא באמת שפות בתמונה המקורית. גם את הקוונטיזציה אנחנו יכולים לעשות על תמונה שכבר קיימת.מצד שמאל מוצגת תמונה רגילה בסמוך לאותה התמונה בעזרת 16צבעים בלבד. אבל ההבדל כמעט לא מורגש ,פרט לשמיים.מה המסקנה? תדר נמוך )תמונות חלקות יותר( רגישות יותר לקוונטיזציה. אולי זה הזמן לציין שתדר 0משמעו תמונה חלקה לגמרי. נשאלת עכשיו השאלה – באיזה אלגוריתם נשתמש כדי להפוך תחום גדול רציף למספר דרגות האפור שהחלטנו עליו. נניח שהחלטנו על מספר דרגות אפור.k ,נמספר אותם כמו משמאל ונרצה לקחת את ה) z-כמות פוטונים ,מספר ענקיים( ולחלק אותם ל k-דרגות האפור.הדרך הכי פשוטה היא לחלק את זה באופן אחיד.ניקח את תחום הקלט של הסנסורים )למשל (0-100ואנחנו קופצים קפיצות שוות.אם כן, 1 1 = 𝑖𝑖𝑍𝑍 𝑍𝑍𝑖𝑖+1 − (𝑍𝑍 − 𝑍𝑍0 ), = 𝑖𝑖𝑞𝑞 ) (𝑍𝑍 + 𝑍𝑍𝑖𝑖+1 𝑘𝑘 𝑘𝑘 𝑖𝑖 2 הדבר ההגיוני הוא לתת את דרגת האפור שהיא תיאור טוב של ה binאליו היא שייכת.כמובן שזה יגרום לנו לאיבוד מידע מסוים.אם יושבים שני פיקסלים בצבעים קרובים ,למשל ליד Z2 משני הצדדים ,ה contrast-יגדל ,כי המרחק בין הפיקסלים יגדל. שרון רוטגייזר עכשיו נדבר על קוונטיזציה לפי חוק וובר ,כלומר קוונטיזציה לא אחידה.החוק אומר שבאזור הכהה אנחנו מאוד רגישים לשינויים קטנים ובאזורים הבהירים אנחנו הרבה פחות רגישים. אם כן ,כדאי לנו לשים -binים קטנים באזורים הכהים ו -binים גדולים באזורים הבהירים. אנחנו יכולים להרשות לעצמנו לנוע הרבה בין רמות עוצמה גבוהות ולא להרגיש שינוי ויזואלי. לכן ,כדי לשמר את האיכויות הוויזואליות שווה לעשות את הקוונטיזציה הלא אחידה. בדרך הראשונה ,הפיקסלים תארו את ה intensityואילו עכשיו אנחנו משמרים את התמונה לפי הבהירות שלנו. למען האמת ,שאם היה לנו מידע מקדים על התמונה ,כנראה שנוכל לעשות הרבה יותר טוב.נניח שאנחנו תמיד מצלמים דשא ירוק ולכן אנחנו באזורי בהירות מסוימים זהים ,כלומר הכי הרבה פוטונים מתקבלים באזור די קטן. במקרה הזה ,יהיה לנו שווה לשים -binים קטנים באזור בו יש לנו הרבה מידע.אמנם תהיה לנו שגיאה גדולה על פיקסלים שהם לא באזור המרוכז ,אבל זה יקרה על מספר מועט מאוד של פיקסלים ,דבר שאינו נורא כל כך ,אבל זה עדיין תלוי מטרה שאנחנו רוצים בתמונה כזו. כמובן שכדי שהמצלמה תוכל להעביר תמונה למחשב על ההגדרות המיוחדות צריך לכלול איזשהו קובץ נוסף שיעיד על כך שנעשתה פעולה מיוחדת; אבל כיום המצלמות עובדות לפי אוסף מצומצם קבוע של סטנדרטים. נדבר על אלגוריתם לקוונטיזציה אופטימלית )לויד( ונתחיל מדוגמה שבה יש לנו היסטוגרמה עם ארבעה גושים גדולים עיקריים ונרצה שהצבע המייצג לכל bin יישב כמה שיותר קרוב למסה המרכזית של הפיקסלים.ניקח את ה -binים להיות ארבע גושים ו 𝑍𝑍0 , … , 𝑍𝑍4יגדירו לנו את גבולות ה bin-וה q-מגדירים את הצבע שייבחר לייצג את כל מי שנפל לאותו ה .bin מבחינה פורמלית מתמטית ,נרצה לבחור 𝑞𝑞 𝑍𝑍,כאלו שיקטינו את השגיאה שלמעשה קרובה לאלגוריתם .k-meansלכל פיקסל השגיאה תוגדר בתור המרחק ממנו לפיקסל הכי קרוב אליו שנבחר כדי לייצג אותו.השגיאה מוגדרת כך: 𝑘𝑘−1 𝑧𝑧𝑖𝑖+1 𝑑𝑑𝑑𝑑 𝐸𝐸 = 𝑝𝑝(𝑧𝑧)(𝑧𝑧 − 𝑞𝑞𝑖𝑖 )2 𝑖𝑖𝑧𝑧 𝑖𝑖=0 למרות שאמרנו "מרחק" ,מעדיפים לקחת בריבוע משתי סיבות – גזיר )לעומת ערך מוחלט(, אבל גם נותן קנס עוד יותר גדול.הסימון ) p(zהוא ההסתברות לערך zמסוים ,מה שייתן יותר משקל למקומות שבהם יש יותר פיקסלים.השגיאה תלויה ב 𝑞𝑞 𝑍𝑍,ונרצה למזער את השגיאה )בהינתן ההתפלגות(. אז אמנם יש פתרון לבעיה אבל הוא פתרון איטרטיבי ולא מובטח לנו מינימום גלובלי ,בכל פעם נניח שה 𝑍𝑍-או ה q-קבועים ואז נמצא את הנעלם השני. 𝑧𝑧 𝑑𝑑𝑑𝑑)𝑧𝑧(𝑧𝑧𝑧𝑧 ∫𝑧𝑧 𝑖𝑖+1 𝑞𝑞𝑖𝑖 + 𝑞𝑞𝑖𝑖+1 𝑖𝑖 = 𝑖𝑖𝑞𝑞 𝑧𝑧 , = 𝑖𝑖𝑧𝑧 𝑑𝑑𝑑𝑑)𝑧𝑧(𝑝𝑝 ∫𝑧𝑧 𝑖𝑖+1 2 𝑖𝑖 כאשר הפתרון של qהוא פשוט מרכז המסה של האזור.אז בהינתן ,zנרצה את מרכז המסה.בהינתן ,qכדי למזער את השגיאה הכי משתלם לנו לקחת את האמצע בין ה -qים. נאתחל רנדומלית ל z-או ,qלמשל קוונטיזציה אחידה ואיטרטיבית עד לשגיאה מספיק קטנה. שרון רוטגייזר מצד שמאל מופיעה שוב תמונת המגדלור ,אך הפעם בצירוף התמונה לאחר קוונטיזציה אופטימלית.עדיין יש לנו false contoursאך הם צפופים ועדינים יותר ,כלומר השקענו יותר משאבים שם. נדבר קצת על קוונטיזציה בצבע וההבדל בין 24ביטים ) 2563צבעים( ל4 ביטים במקרה של התמונה הנ"ל.המשמעות היא שמשתמשים רק ב16 צבעים לייצג את כל התמונה וזה נראה לא רע ,אבל בתקריב רואים טוב את ההבדל. סיימנו את הדגימה ואז הקוונטיזציה ועכשיו סוף סוף ,יש לנו תמונה דיגיטלית שהיא מטריצה בגודל סופי ,כשבכל תא יש אחד מתוך 256דרגות אפור ואפשר להתחיל לעבוד עליה. שרון רוטגייזר שיעור – 2היסטוגרמות נדבר על היסטוגרמות אבל קודם נדבר על כמה תכונות של תמונות והגדרות. ממוצע של תמונה הוא סכום הפיקסלים חלקי מספר הפיקסלים בתמונה. למען הנוחות ,אנחנו נדבר ונדגים על תמונה חד ממדית ,בגלל הקושי בלצייר דו ממדית ,אך אפשר )כמו בגרף משמאל( לדמיין שאנחנו מסתכלים על שורה בודדת בתמונה דו ממדית. ציר ה y-מתאר את דרגות האפור.אנחנו מדברים כמובן על תמונה בדידה אך התיאור הרציף פשוט נוח יותר לשרטוט. פעולה שאנחנו יכולים לעשות על תמונה היא להוסיף לכל פיקסל בה 5דרגות אפור וזה ישנה בהתאמה את ציר ה y-של הגרף.בפועל ,זה ייראה כמו בדוגמה משמאל. הכל נעשה יותר כהה.זו תכונת הבהירות /עוצמה. תכונה שנייה היא – contrastמה טווח הצבעים /הבהירויות שיש לנו בתמונה.בגרף מצד שמאל ,זה מתבטא בכך שההפרש בין הפיקסל הכי גבוה להכי קטן הוא חלון די קטן. התמונה מצד שמאל היא עם contrastנמוך ,אין הרבה הבדל בין הכי כהה להכי בהיר. בצד ימין לעומת זאת מופיעה אותה התמונה עם ניגודיות גבוהה. יש לנו כמה דרכים למדוד .contrastהדרך הכי פשוטה היא ההפרש בין הפיקסל הבהיר ביותר לפיקסל הכהה ביותר })𝑦𝑦 max{𝐼𝐼(𝑥𝑥, 𝑦𝑦)} − min{𝐼𝐼(𝑥𝑥, הבעיה בהגדרה הזאת היא רגישות ל – outliersמספיק שיש פיקסל אחד שהוא בטעות נורא גבוה או נמוך ,הכל ישתבש לנו.זה לא תופס ויזואלית את מה שנראה בפועל. הגדרה אחרת היא להסתכל על השונות /סטיית התקן של הפיקסלים בתמונה.השונות היא ממוצע ההבדל בין פיקסל לממוצע התמונה: } 𝑉𝑉𝑉𝑉𝑉𝑉(𝐼𝐼) = mean{(𝐼𝐼(𝑥𝑥, 𝑦𝑦) − 𝐼𝐼mean )2 כמו כן ,סטיית התקן מוגדרת על ידי )𝐼𝐼(𝑉𝑉𝑉𝑉𝑉𝑉 = )𝐼𝐼(.stdבהמשך הקורס ומכיוון שאנחנו עצלנים ,אנחנו נלך לפי ההגדרה הגרועה הראשונה ,כי נוכל להסביר באמצעותה טוב יותר. כעת ,נתבונן בתמונה הבעייתית משמאל.בתמונה זו יש שני חצאים שכל אחד עם contrastנמוך ,אבל בסך הכל כשמסתכלים על כל התמונה ,מקבלים שונות גבוהה. לצורך התמודדות עם בעיה כזו ,נשתמש ב local image contrastשימדוד לכל פיקסל את ה contrast-סביבו. שרון רוטגייזר ההגדרה היא: 𝑛𝑛𝐼𝐼 𝐼𝐼𝑝𝑝 − = 𝑝𝑝𝐶𝐶 𝑛𝑛𝐼𝐼 ונשים לב שבנוסף למרחק /שונות של הפיקסל 𝑝𝑝𝐼𝐼 מהשכנים יש חלוקה ב 𝑛𝑛𝐼𝐼. נסתכל על דוגמת האשליה עם הריבועים משיעורים קודמים.אם היינו משתמשים רק במונה ,אז היינו מקבלים את אותו ה.contrast-כשאנחנו משתמשים בחלוקה הזו בפיקסל שבסביבה ,אנחנו כבר מקבלים ערכים שמדגישים יותר נכון את ההבדל הוויזואלי.זה משמש אותנו כדי לתאר כל מיני דברים בתמונה. יש עוד תכונה אחת של תמונות אבל נדלג אליה ונחזור בהמשך. כעת ,נגדיר מה זו היסטוגרמה.זה גרף שמתאר את הסטטיסטיקה של התמונה.ההיסטוגרמה Hתחזיר לנו כמה פיקסלים יש בכל דרגת אפור )ציר ה .(xיש עוד שני סוגי היסטוגרמות פופולריים: הראשון זה Pkשהוא מגדיר את ההיסטוגרמה המנורמלת )אחוז הפיקסלים בכל דרגת אפור( ,כך שסכום הפיקסלים הוא .1זה טוב לנו כי עכשיו זו היסטוגרמת התפלגות.עוד יתרון ,זה שבהיסטוגרמה הזו לא נצטרך להתעסק עם גודל התמונה. השני זה Ckזו היסטוגרמות צבירה – בכל דרגת אפור kגודל העמודה יהיה סכום כל דרגות האפור שהן לכל היותר .kגובה העמודה האחרונה הוא / 1מס הפיקסלים. בדר"כ נשתמש בהיסטוגרמת צבירה מנורמלת. בשקף שלאחר מכן חגית מראה כמה תמונות ושואלת איך לדעתנו תראה ההיסטוגרמה. מאותו השקף יש מסקנה חשובה – היסטוגרמה היא לא משמרת מיקום.למשל ,לשתי התמונות הבאות יש בדיוק את אותה ההיסטוגרמה ,כי יש להן בדיוק אותם הפיקסלים.לא ניתן לשחזר תמונה מהיסטוגרמה. נניח שיש לנו את הילדה והיסטוגרמה שלה ,איך תראה ההיסטוגרמה אחרי הקטנת ה- ?contrastבאופן אנלוגי ,ההיסטוגרמה תידחס ימינה כשנגדיל את ה.contrast-בהמשך נרצה לעשות מתיחת contrastתוך שימוש הממוצע ,משהו שבעייתי כרגע. מתוך ההיסטוגרמה ניתן לקבל את התוחלת והשונות: 𝔼𝔼[𝐼𝐼] = 𝑘𝑘 ⋅ 𝑃𝑃(𝑘𝑘) , 𝑉𝑉𝑉𝑉𝑉𝑉(𝐼𝐼) = 𝔼𝔼[𝐼𝐼 2 ] − 𝔼𝔼[𝐼𝐼]2 𝑘𝑘 כלומר לא צריך לעבור פיקסל-פיקסל ,אלא ההיסטוגרמה מספקת לנו את כל המידע הדרוש. עוד מדד סטטיסטי אחד שאפשר לבקש על תמונה הוא האנטרופיה שלה.אם האנטרופיה גבוהה אז יש הרבה בלגן בתמונה.המקרה האידאלי הוא אם לא משנה איזה פיקסל נבחר, נדע מה הצבע שלו ,כלומר עבור תמונה קבועה והאנטרופיה .0המצב הקטסטרופלי הוא אם נגריל פיקסל מהתמונה ,לכל דרגות האפור סיכוי זהה להתקבל.נוסחת האנטרופיה היא: )𝑘𝑘(𝑃𝑃 Entropy(𝐼𝐼) = − 𝑃𝑃(𝑘𝑘) log 𝑘𝑘 שרון רוטגייזר האינטואיציה של אנטרופיה היא כמה ביטים או מידע אנחנו צריכים כדי לתאר את ההתפלגות שלנו.בתמונה מצד שמאל ,אנחנו צריכים ביט אחד כי התמונה חלקה.ככל שהאנטרופיה יותר גדולה ,נצטרך יותר ביטים כדי לתאר אותה.בתמונה של לנה מצד שמאל ,יש אנטרופיה הרבה יותר גדולה.7 , אנחנו מאבדים המון מידע של מיקומים בהיסטוגרמות אבל אפשר גם לעשות היסטוגרמות מקומיות.ניקח כל ריבוע )חלון( קטן בתמונה ונחשב את ההיסטוגרמה שלו.שימוש אחד של זה הוא זיהוי תבניות.נניח שאנחנו רוצים למצוא עליית גג בתמונה ,אז נעבור חלון-חלון בתמונה ונעצור כשנקבל היסטוגרמה בתמונה שזהה למה שאנחנו מחפשים.כמובן שבפועל העסק מורכב יותר בגלל בעיות תאורה ,גדלי חלונות שונים, רעשים ,ואולי בכלל בחלון יש בדיוק אותם הפיקסלים אבל .scrambled זה עדיין כלי ניפוי יעיל ,כי רוב התמונה באמת לא מתאימה לנו ,והמועמדים שכן מתאימים יצריכו בדיקה ידנית. יש עוד המון דברים שאפשר לעשות ונעשה עוד עם היסטוגרמות.שימוש אחד הוא פיקוס אוטומטי.לאלו שיצא להם פעם להשתמש במצלמה אמיתית ,ודאי ראיתם פעם שהמצלמה קצת נכנסת ויוצאת וזאת בשל חיפוש נקודת הפוקוס.איך זה קורה? המצלמה עושה היסטוגרמה לתמונה שהיא רואה באותו הרגע ומחפשת את תכונה מסוימת בה ,בסוף בוחרת את ההיסטוגרמה של התמונה הכי חדה.איך? מסתבר שאם יש לנו תמונה מטושטשת )למשל כל פיקסל מקבל את ממוצע הפיקסלים שסביבו( ,ההיסטוגרמה יכולה רק לרדת ,כי אפילו הפיקסל הכי בהיר מתמצע עם השכנים שלו.באופן דומה ,עבור הפיקסל הכהה הוא יכול להיות רק יותר בהיר.אם כן ,לתמונות מטושטשות יש contrastקטן )או האנטרופיה קטנה(.לכן ,המצלמות מודדות את הcontrast- או את האנטרופיה ובעצם העדשה בוחרת את ההיסטוגרמה עם ה/ contrast -אנטרופיה הכי גבוה.ומה אם המציאות מטושטשת? עדיין ,המצלמה תגיע למקסימום שהיא יכולה.ברקע כמובן יש אלגוריתם איטרטיבי וקצת יותר עמוק. חידה :על איזה מקום מאוד קשה לאלגוריתם לעשות פוקוס? על קיר! פעולה שנייה )אחרי שינוי ניגודיות( שנעשה על היסטוגרמה היא .thresholdingניקח את דרגות האפור ומעל ערך מסוים נהפוך הכל ללבן ומתחת לאותו הערך ,לשחור.גרף המעבר מדרגות אפור א' לדרגות אפור ב' מוצג בצד שמאל )ונרחיב עליו בשיעור הבא(.השאלה שנשאלת היא איזה סף לבחור? נניח שאנחנו רוצים לחלץ רק את הים מתוך תמונה של מגדלור עם ים ,אז נקווה שהים בהיר יותר משאר התמונה ונבחר thresholdingמתאים. דרך אחת שבה אפשר לבחור את הסף המתאים היא על ידי ההיסטוגרמה.בצד שמאל מוצגת תמונה מקורית לעומת מה יקרה אם ניקח thresholdingגדול או קטן מדי. נניח שיש לנו תמונה עם ההיסטוגרמה כנ"ל ,אז נקווה שהגוש הכהה הוא הרקע והגוש הבהיר הוא האובייקט. אפשר לעשות thresholdingמקומי! זאת על ידי כך שנעשה ספים שונים לחלקים שונים בתמונה.נסתכל על כל היסטוגרמה מקומית ,נמצא את הסף הכי טוב ונקווה שנצליח לקבל תמונה בינארית יפה ,כמו בדוגמה משמאל.גם CamScannerעושה את זה! שרון רוטגייזר עכשיו נדבר על מדידת מרחק בין היסטוגרמות.כשדיברנו על pattern matchingאמרנו שנשווה היסטוגרמה ממש אחד לאחד אבל כמו שראינו – יש לא מעט חסרונות. נניח שנתונה לנו תמונה ומטרתנו לאתר את השלט הכחול.שיטת העבודה היא לעבור חלון- חלון ולמדוד מרחק בין היעד שלי לבין החלון שעליו אנחנו יושבים.הפלט של תהליך כזה הוא מפת דמיון – ככל שחלון מסוים בתמונה דומה יותר למטרה ,הערך שייצא במפת הדמיון יהיה יותר גבוה ,מעיין מפת חום. נניח שיש לנו שתי היסטוגרמות PAו PB-ונרצה למדוד את המרחק ביניהם.𝐷𝐷(𝑃𝑃𝐴𝐴 , 𝑃𝑃𝐵𝐵 ) , השיטה הראשונה היא מה שעשינו עד כה ,וזו שיטה שנקראת מינקובסקי: 𝑝𝑝1/ 𝐵𝐵𝑃𝑃 𝐷𝐷(𝑃𝑃𝐴𝐴 , 𝑃𝑃𝐵𝐵 ) = |𝑃𝑃𝐴𝐴 (𝑘𝑘) − 𝑝𝑝|)𝑘𝑘( 𝑘𝑘 כאשר kאלו דרגות האפור.המשמעות של החזקה היא שורש מסדר pובדרך כלל p=1,2ואז אלו מרחק אוקלידי /מנהטן. בעיה בשיטה :למרות שההיסטוגרמות מצד ימין קרובות יותר מאשר בצד שמאל ,המרחק שמתקבל בשמאליות קטן יותר! זה משתבש כי אנחנו עושים את ההפרשים לכל כניסה )דרגת אפור( בצורה בלתי תלויה בדרגות שונות.זו טעות שמסתכלת רק בתוך אותם ה-binים של האפור. אופציה שנייה היא kl divergenceשמתארת את "כמות האינפורמציה הנוספת שדרושה כדי לקודד את Aבהינתן ההיסטוגרמה של ) "Bלקוח מתורת האינפורמציה( ,אבל לא רק שהשיטה סובלת מאותה הבעיה של מרחקי מינקובסקי ,המרחק אינו סימטרי ,כלומר )𝐴𝐴||𝐵𝐵( 𝐾𝐾𝐾𝐾𝐷𝐷 ≠ )𝐵𝐵||𝐴𝐴( 𝐾𝐾𝐾𝐾𝐷𝐷. )𝑘𝑘( 𝐴𝐴𝑃𝑃 𝐷𝐷𝐾𝐾𝐾𝐾 (𝐴𝐴||𝐵𝐵) = 𝑃𝑃𝐴𝐴 (𝑘𝑘) log )𝑘𝑘( 𝐵𝐵𝑃𝑃 𝑘𝑘 אנחנו מחפשים איזשהו מדד שכן לוקח בחשבון מרחקים בין הכניסות השונות של ההיסטוגרמות.מרחק כזה הוא .Earth Mover Distance ,EMDהפונקציה אומרת כזה דבר: המרחק בין שתי היסטוגרמות היא כמות העבודה )המינימלית( שצריך לעשות כדי להפוך את היסטוגרמה א' להיות היסטוגרמה ב'.העבודה מוגדרת על ידי כמות הפיקסלים כפול מספר דרגות האפור שהעברנו אותן.במצב כזה ,אכן ההיסטוגרמות מקודם יוצאות במרחקים הגיוניים.פורמלית: 𝑖𝑖𝑖𝑖𝑑𝑑 ⋅ 𝑖𝑖𝑖𝑖𝑓𝑓 𝐷𝐷𝐸𝐸𝐸𝐸𝐸𝐸 (𝐴𝐴, 𝐵𝐵) = min 𝐹𝐹 𝑖𝑖 𝑗𝑗 כך ש 𝑓𝑓𝑖𝑖𝑖𝑖 ,𝑓𝑓𝑖𝑖𝑖𝑖 ≥ 0זה כמות הפיקסלים שנעביר מעמודה iלעמודה jוכן: 𝑃𝑃𝐴𝐴 (𝑘𝑘) = 𝑓𝑓𝑘𝑘𝑘𝑘 , 𝑖𝑖𝑖𝑖𝑓𝑓 = )𝑘𝑘( 𝐵𝐵𝑃𝑃 𝑗𝑗 𝑖𝑖 האילוצים האלו נועדו לוודא שלאחר שנזיז את כל הפיקסלים נקבל את ההיסטוגרמה B וכשאנחנו מתחילים – שלא ניקח יותר פיקסלים ממה שיש לנו.אפשר לחשוב על זה בתור בעיית זרימה. שרון רוטגייזר על כן ,נראה מקרה פרטי בחד ממד )בדיוק מה שאנחנו צריכים( בו זה יותר קל.טענה: |)𝑘𝑘( 𝐵𝐵𝐶𝐶 𝐷𝐷𝐸𝐸𝐸𝐸𝐸𝐸 (𝐴𝐴, 𝐵𝐵) = |𝐶𝐶𝐴𝐴 (𝑘𝑘) − 𝑘𝑘 כלומר ,המרחק הנ"ל הוא פשוט ההפרש בין היסטוגרמת הצבירה של Aלזו של .Bאנחנו אמנם לא נוכיח את המשפט ,אבל אפשר לתת אינטואיציה.נתבונן במצב משמאל, ונתבונן בהיסטוגרמות הצבירה. נסתכל על היסטוגרמת ההפרש ונקבל את מה שמשמאל.זה בדיוק שאנחנו צריכים! הגובה הוא מספר הפיקסלים והרוחב זה מרחק דרגות האפור שצריך לזוז.שטח המלבן הנ"ל הוא בדיוק מרחק ה .EMD כנושא אחרון לשיעור ,נדבר על חישוב יעיל של היסטוגרמה מקומית ,של חתיכה מהתמונה. נגיד שאנחנו הסתכלנו על חלון מסוים )צהוב( ואז רוצים את ההיסטוגרמה של חלון אחד ימינה.לצורך כך ,נדבר על .integral histogram זהו מבנה נתונים שמכיל בפנים היסטוגרמות.ליתר דיוק ,זו מטריצה כגודל התמונה שלנו ולכל פיקסל במבנה יש לנו היסטוגרמה ,של כל הפיקסלים מ ) (0,0עד ).(x,yאז מבנה הנתונים הוא טנזור תלת ממדי ,של גודל התמונה ועומק של .256כמובן שכדי לארגן מבנה נתונים כזה צריך pre-processingאבל יועיל לנו בהמשך לחישוב היסטוגרמות יעיל. כדי לבנות את המבנה הזה ,נסתכל בתרשים משמאל ונניח שאנחנו רוצים את ההיסטוגרמה של הנקודה ) ,(x,yבוורוד.נניח שכבר חישבנו את כל ההיסטוגרמות בשורות והעמודות שלפני הפיקסל הנ"ל.אז נעשה הכלה והדחה! כמובן נוסיף את הפיקסל ) (x,yעצמו. )𝑦𝑦 𝐻𝐻(𝑥𝑥, 𝑦𝑦) = 𝐻𝐻(𝑥𝑥 − 1, 𝑦𝑦) + 𝐻𝐻(𝑥𝑥, 𝑦𝑦 − 1) − 𝐻𝐻(𝑥𝑥 − 1, 𝑦𝑦 − 1)+𝑎𝑎 𝐼𝐼(𝑥𝑥, יש לנו 3פעולות כשכל אחת עולה 256פיקסלים )דרגות אפור( וזה די יקר ,אבל עדיין נחמד. איפה נשתמש בזה? נניח שבא מישהו ורוצה לחשב את ההיסטוגרמה המקומית במלבן מסוים ,כמתואר משמאל.נחשב זאת על ידי )כמו הכלה והדחה(: ) 𝐻𝐻(𝑥𝑥1 : 𝑥𝑥2 , 𝑦𝑦1 : 𝑦𝑦2 ) = 𝐻𝐻(𝑥𝑥2 , 𝑦𝑦2 ) − 𝐻𝐻(𝑥𝑥1 , 𝑦𝑦2 ) − 𝐻𝐻(𝑥𝑥2 , 𝑦𝑦1 ) + 𝐻𝐻(𝑥𝑥1 , 𝑦𝑦1 כמובן שאם ההיסטוגרמה יחסית קטנה אולי יותר זול לבנות אותה בצורה ידנית וזהו ,אבל אם אנחנו מדברים על חלון די גדול ,זמן הריצה עצמו נמוך ומשתלם. שרון רוטגייזר שיעור – 3פעולות נקודה השיעור הזה זו התחלה של סדרת הרצאות של פעולות שונות שאפשר לעשות על תמונות. יש לנו 3סוגי פעולות: פעולת נקודה -זו פעולה שעובדת על כל פיקסל ומשנה לו את הצבע בדרך כלשהי. זה ייתן לנו אפקטים על התמונה. פעולה גיאומטרית – פעולה שפועלת על התמונה כולה ולא מסתכלת על ערך הפיקסל אלא על הקואורדינטה עצמה ,היא תזוז למיקום אחר. פעולה מרחבית – פעולה שפועלת על הפיקסלים אבל כתלות בסביבה )מרחב( שלה. זה ישמש אותנו לחידוד ,טשטוש ,ניקוי רעשים ועוד. היום נדבר על פעולות נקודה.ניקח פיקסל ,נסתכל על הצבע שלו ולפי זה נחליט לאיזה צבע הוא עובר.אם fהיא התמונה המקורית ,אז )𝑦𝑦 .𝑔𝑔(𝑥𝑥, 𝑦𝑦) = 𝑀𝑀 𝑓𝑓(𝑥𝑥,כפי שניתן לראות, הפעולה Mמסתכלת על הצבעים ,לא על המיקומים. לעיתים ,נאהב להציג זאת כפונקציה ,כמו מצד שמאל ,כאשר vאלה דרגות האפור המקוריות ו ) M(vיהיו הדרגות החדשות אליהן עובר כל .vבמקרה של הגרף משמאל, 𝛽𝛽 .𝑀𝑀(𝑣𝑣) = 𝛼𝛼𝛼𝛼 +הכפל בקבוע מכווץ /מותח ולכן משנה contrast-והוספת הקבוע משנה לי את הבהירות. פונקציית המיפוי חייבת להיות תקינה – כלומר לא ייתכן שדרגת אפור vתמופה לשתי דרגות חדשות שונות. עוד נקודה חשובה ויזואלית היא שאנחנו לא אוהבים שצבעים מחליפים את הבהירות שלהם. כלומר – אם יש לי אזור א' בהיר יותר מאזור ב' ,כדאי שאזור א' יישאר בהיר מאזור ב' ,גם לאחר המיפוי.לכן ,בשביל הנוחות הוויזואלית ,הפונקציות שנאהב יהיו מונוטוניות עולות. נסתכל למשל ,על התמונה משמאל ,בעלת ניגודיות נמוכה.נגיד שדרגות האפור )רובן( בין u1ל .u2כמו כן ,נניח שאנחנו משתמשים בפונקציית המיפוי באמצע.מה קורה לתמונה תחת מיפוי זה? אנחנו מגדילים את ה contrast-למקסימום! זה נראה יותר טוב! אולי נאבד כמה פיקסלים שמחוץ לטווח הצבעים ] ,[u1,u2אבל לא נורא. עוד פעולה אפשרית היא פעולת ה ,thresholdingשאת הגרף שלה ראינו כבר בשיעור הקודם. יש את פונקציית הנגטיב ,𝑀𝑀(𝑣𝑣) = 255 − 𝑣𝑣 ,שהופכת את הצבעים. שרון רוטגייזר 𝛾𝛾 עכשיו נעבור לדבר על תיקון תמונה מסוג אחר.𝑣𝑣𝑜𝑜𝑜𝑜𝑜𝑜 = 𝑐𝑐 ⋅ 𝑣𝑣𝑖𝑖𝑖𝑖 ,gamma correction , ערך פופולרי הוא 2.2או ) 1/2.2תלוי בכיוון שנרצה(.למה זה טוב? נראה דוגמה. עם הערך הזה של ,gammaאנחנו מקבלים תיקון עבור התמונה הבאה: התיקון מבהיר את כל צבעי הביניים ,וככל שהצבע יותר כהה כך פקטור הגדילה גדול יותר )מציית לחוק וובר(.למעשה ,לא רק שהתמונה נהיית יותר בהירה אלא יש פה גם אפקט שינוי ניגודיות.זה שילוב של מתיחה וקצת כיווץ. הפרמטר 2.2הגיע מתוך מסך ה ,CRTמסך ישן שהיה פעם וזו הייתה דרך הפעולה שלו. הוא תרם בעבר לפעולה הבאה :נניח שקיבלתי דרגת אפור של 0.4ואני רוצה שזה מה שיוצג לי על המסך.ה CRTהיה מביא לי .0.1אם כן ,בגלל שה CRTמעלה את vבחזקת ,2.2 המצלמה מראש תיתן ל CRT-את תיקון הגאמא ההפוך ,כלומר בחזקת .1/2.2בצורה כזו הם ינטרלו אחד את השני.אז למעשה ,זה הומצא בתור תיקון הגאמא של המסך. אבל כיום ,המסך כבר לא קיים.נלך אחורה לכל המצלמות ונתקן את ההטמעה הזו? לא, התמונות כבר צולמו ,לא ניגע במצלמות ישנות.אבל גם – התיקון הזה עדיין טוב לנו ,בגלל חוק וובר.התיקון הוא "המוציא לפועל" של החוק הזה.זה גם מבצע בפועל non uniform .quantizationכמו כן ,כמו שהגרף מתאר ,ערכי דרגות האפור צריכים להיות מנורמלים. עכשיו נדבר על פעולות נקודה בהיסטוגרמות.אנחנו אמנם עושים פעולות נקודה על תמונה ,אבל עדיין שואלים את עצמנו האם אפשר לעשות משחקים עם ההיסטוגרמות בצורה ישירה.הנחת בסיס חשוב :המיפוי הוא מונוטוני עולה ממש ,כי רק אז קיים מיפוי הופכי.זה לא בהכרח יתקיים ,אבל נעבור את הגשר כשנגיע לזה. נניח שיש לנו היסטוגרמה של תמונה Aוהיסטוגרמה של תמונה ,Bכאשר אנחנו יודעים שתמונה Bמתקבלת ממיפוי של .Aכל הפיקסלים שב va-עוברים ל vb-וזה נכון לכל דרגות האפור.בגלל שהמיפוי הוא מונוטוני ,אף דרגה אחרת לא תמופה ל.vb- יתרה מזו – כל הפיקסלים שדרגת האפור שלהם קטנה מ va-ימופו לדרגות אפור קטנות מ.vb-אותו הדבר תקף להיסטוגרמות צבירה. לכן ,תחת מיפוי מונוטוני עולה אנחנו יכולים לבנות את ההיסטוגרמה של Bמתוך ההיסטוגרמה של ,Aבלי לחשב מפורשות את התמונה .𝐻𝐻𝑏𝑏 (𝑣𝑣𝑏𝑏 ) ← 𝐻𝐻𝑎𝑎 (𝑣𝑣𝑎𝑎 ) ,Bבבניית ההיסטוגרמה של ,bאיך אנחנו יודעים מי זה ?vaלפני שנגיד את התשובה ,רק נעיר שהתהליך זהה בהיסטוגרמת הצבירה) 𝐶𝐶𝑏𝑏 (𝑣𝑣𝑏𝑏 ) = 𝐶𝐶𝑎𝑎 𝑀𝑀−1 (𝑣𝑣𝑏𝑏 ) ,אותו דבר בהיסטוגרמות הרגילות(. כדרך אגב :קל לעבור מהיסטוגרמת צבירה להיסטוגרמה רגילה ,על ידי העובדה ש 𝑣𝑣𝑖𝑖 = 𝐶𝐶𝑖𝑖 − 𝐶𝐶𝑖𝑖−1 שרון רוטגייזר השאלה המעניינת היא כזו.בהינתן שתי תמונות ,A,Bהאם אפשר למצוא את ההעתקה? הדרך שבה נעשה את זה היא דרך היסטוגרמות הצבירה.לא תמיד בטוח שקיים כזה מיפוי, אבל אם קיים ,נרצה למצוא אותו.נצטרך להניח שהמיפוי מונוטוני עולה. נעשה את זה בעזרת .2 pointer algorithmנתחיל לרוץ על Caולכל דרגת אפור vaנסתכל על גובה העמודה )כמות הפיקסלים(.נרוץ על Cbעד שנגיע לערך ששווה לערך .vaאם אכן מצאנו כזו עמודה ,אז זה המיפוי שלנו.נוח לנו לעבוד עם היסטוגרמת הצבירה מכיוון שהיא עולה והמצביע של Cbאף פעם לא צריך לרוץ אחורה. אינטואיציה ללמה זה נכון נובעת מהעובדה שאמרנו קודם – כל דרגת אפור שקטנה מva- תמופה לדרגת אפור קטנה מ.vb- מה קורה אם יש לנו 2עמודות באותו הגובה ,כלומר קיימת דרגת אפור עם 0פיקסלים? יש כמה גרסאות: לקחת מתוך Cbאת העמודה הראשונה שגדולה שווה לגובה העמודה .Ca לקחת את העמודה האחרונה שמתאימה לגובה העמודה .Ca הבעיה השנייה שהיא יותר קשה – הפונקציה הנ"ל רציפה אבל היסטוגרמה היא דבר בדיד. לכן ,נשתמש בכלי חדש שנקרא .histogram equalizationזהו כלי שכל מטרתו היא לשפר את איכות התמונה.נניח שיש לנו היסטוגרמה כמו בצד שמאל ,עם שתי דרגות אפור יחסית קרובות ושלא רואים הבדל ביניהן.מה שכן יעזור במקרה הזה הוא הגדלת ה.contrast- נכון שזו לא התמונה שצילמנו ,אבל זה ישפר את האיכות שלה.לכאורה לא רע ,אבל מה קורה אם אנחנו כבר ב contrastמקסימלי? אפשר אולי לבצע את זה מקומית לכל זוג עמודות צמודות כאלה ,האינטואיציה היא שנרצה לקחת את העמודות ולהרחיק כמה שאפשר אחד מהשני.במילים אחרות – ניצול כל תחום רמות האפור.התהליך הנ"ל יהיה .histogram equalization מה שנעשה מתואר משמאל – ניקח היסטוגרמה ונרצה מיפוי שישטח אותה.לדבר הזה יש שני אילוצים.הראשון הוא שהסדר של דרגות האפור חייב להישמר ,כלומר אם פיקסל א' היה בהיר יותר מפיקסל ב' ,זה יישאר ככה גם אחרי ה .equaliza onהאילוץ השני הוא שאסור לנו לשבור את העמודות של ההיסטוגרמה.כלומר אנחנו לא יכולים לקחת 3פיקסלים מתוך 20בדרגת אפור .xהסיבה היא ,שאז לא נוכל לשחזר את המיפוי ,שמתבסס על זה שכל הפיקסלים בדרגת אפור א' עברו לדרגת אפור ב'.הבעיה המתמטית אפילו יותר בסיסית – אם חלק מהפיקסלים בדרגת אפור xהולכים ל yוחלק לדרגת ,zזאת לא פונקציה תקינה! לכן ,נניח שאנחנו מחליטים לשנות את דרגות האפור ,xכל 20הפיקסלים יזוזו.כמובן שיהיו לנו קצת פיקסלים שיאבדו מידע ,אבל רוב הפיקסלים משפרים את איכות התמונה. איך נבנה את המיפוי? נגיד שיש לנו את היסטוגרמת הצבירה של התמונה המקורית והיסטוגרמת הצבירה לאחר .equalizationאז ) 𝑎𝑎𝑣𝑣(𝑀𝑀 = ) 𝑎𝑎𝑣𝑣( 𝑎𝑎𝐶𝐶 .𝑣𝑣𝑏𝑏 = 𝐶𝐶𝑏𝑏−1במילים יותר כלליות.𝑀𝑀 = 𝐶𝐶𝑏𝑏−1 𝐶𝐶𝑎𝑎 ,את המיפוי הזה אנחנו נפעיל על התמונה ונקבל תמונה טובה יותר. שרון רוטגייזר נעבור על היסטוגרמת הצבירה בצורת .2 point algorithmלכל דרגת אפור )בין 0-7בדוגמה הזאת( אנחנו רוצים לדעת לאיזה צבע היא תמופה.האלגוריתם: שלב ראשון – נאתחל את היסטוגרמת הצבירה של היעד שלנו בהיסטוגרמת צבירה בעלת קפיצות שוות. שלב שני – לכל דרגת אפור vבתמונת המקור ,נרוץ על דרגות האפור בתמונת היעד ,עד שניתקל בדרגת אפור uשכמות הפיקסלים בה היא לפחות כמו המקורית ,כלומר )𝑣𝑣( 𝑎𝑎𝐶𝐶 ≥ )𝑢𝑢( 𝑏𝑏𝐶𝐶. נקבע שדרגת האפור vעוברת לדרגה .u שלב שלישי – נמשיך לרוץ על דרגות האפור בתמונה המקורית ,כל עוד ) .𝐶𝐶𝑏𝑏 (𝑢𝑢) ≥ 𝐶𝐶𝑎𝑎 (𝑣𝑣 ′ ברגע שזה לא מתקיים יותר ,עוברים לדרגת האפור הבאה בהיסטוגרמת היעד. במקרה שלנו )ניסיתי ,ממליץ לראות את ההקלטה בהנפשה הזאת(: התחלנו מדרגת אפור 0ובעמודה זו יש 3פיקסלים.מכיוון שבהיסטוגרמת היעד יש ,7נמפה את 3לדרגה זו.כשממשיכים לדרגה 1עם 6פיקסלים גם היא קטנה מ 7-ולכן גם דרגת האפור 1תמופה לדרגה 0בתמונת היעד.דרגת אפור 2בתמונת המקור כבר לא נכנס ב,7- אבל הוא כן נכנס ב 10-וכן הלאה. בצד שמאל מופיע המיפוי הסופי ונשים לב לכך שהעמודה עם 38לא נכנסת ב 28-ולא ב 35-ולכן לא יהיו דרגות אפור כאלו בתמונת היעד.זו למעשה בדיוק הרחקת העמודות! יש פה תופעה מעניינת – כשיש לנו קצת פיקסלים מדרגות אפור קרובות הם מאוחדים לאותה דרגת האפור אבל כשיש לנו הרבה פיקסלים מדרגות אפור קרובות, האלגוריתם מעדיף להרחיק ביניהם. בתור שלב אחרון – נפעיל את המיפוי שמצאנו על התמונה. ה contrast-המקומי גדל עבור הרבה פיקסלים וקטן עבור מעט פיקסלים ,כמו שצריך! זה מוציא לנו את המידע החשוב בצורה שנראה אותו טוב יותר )כאשר אנחנו מגדירים מידע חשוב ככזה שיש הרבה ממנו(.אמנם שמאוחדים לדרגה אחת משלמים מחיר של איבוד מידע ,אבל זה כמעט לא נראה לעין וזה )יחסית( לא הרבה פיקסלים.כמו כן ,מספר דרגות האפור קטן. דוגמה על תמונה אמיתית מופיעה בצד שמאל. שרון רוטגייזר יתרה מזו – ניתן לעשות equalizationמקומי! כלומר ,לכל חלון קטן בתמונה נעשה שיווי היסטוגרמה בפני עצמו. משמאל זה למשל .8x8 אפשר גם לעשות משהו קצת יותר מרחיק לכת; מערכת הראייה שלנו לא אוהבת קצוות שרופים – גושי פיקסלים בהירים או כהים מדי.למעשה ,העין תעדיף היסטוגרמה גאוסיאנית, כלומר הרבה פיקסלים במרכז דרגות האפור ומעט בצדדים.לכלי שעושה את זה קוראים .histogram matchingבמקום מיפוי להיסטוגרמה שטוחה נמפה את זה בעזרת אותו האלגוריתם להיסטוגרמה נתונה כלשהי. נניח שיש לנו את התמונה שמתארת את העולם האמיתי ואחרי כמה שעות צולמה התמונה הצהובה.נרצה לנסות להשוות בין התמונות כדי לראות אם יש שינוייםHistogram. matchingיעזור לנו למפות את הצבעים )ההיסטוגרמה( של התמונה הצהובה לאלה של התמונה הראשונה.יש בהרצאה כמה דוגמאות שהתהליך לא תמיד עובד. שימוש נוסף מפתיע הוא סינתזה של טקסטורות.יש לנו מרקם מסוים ,כנתון בצד שמאל ואנחנו רוצים ליצור תמונה חדשה גדולה יותר מאותו המרקם.אנחנו לא רוצים כמובן לעשות זאת על ידי הדבקה כי אז יראו בקלות איפה התפר ,אלא ליצור תמונה חדשה עם אותה הסטטיסטיקה.הרעיון שמשתמש ב histogram matchingלפתרון הבעיה הזאת הומצא כבר ב.1995-האלגוריתם אומר כך: ניצור תמונה רנדומלית עם אותה הסטטיסטיקה על ידי לקיחת גודל תמונת היעד שנרצה וליצור תמונה רנדומלית באותו הגודל.אנחנו ניקח את התמונה הזו ונעשה לה histogram matchingלהיסטוגרמה של המרקם המקורי.כדי לפתור את בעיית הגדלים נעבוד עם היסטוגרמות מנורמלות. כמובן שהשיטה לא מושלמת כי הרי שיווי היסטוגרמות לא תמיד מגיע לאופטימום ,אבל אפשר לעשות כמה איטרציות.השיטה הזאת לא עובדת כשיש גושי צבעים או משהו שהוא תלוי מיקום יחסי ,כי האלגוריתם מסתכל על הצבעים נטו ואין סיכוי שהמידע המרחבי יילקח בחשבון.לכן ,האלגוריתם עובד על טקסטורות גנריות יותר ,ללא מבנה.יש בהרצאה עוד דוגמאות ופרט דוגמה אחת יותר רכה – כזו שאמנם הטקסטורה נשמרת אבל ריבועיות גושים נאבדת. כדרך אגב ,האלגוריתם האמיתי מ 95קצת שונה וכולל בנוסף גם התאמת המקור ליעד בכל רמות הרזולוציה ,מה שמאפשר לקבלת טקסטורות מורכבות יותר ועוד נדון על כך. כשאנחנו עושים histogram matchingאנחנו בעצם מחפשים מיפוי אופטימלי, שיקרב את היסטוגרמת התמונה המקורית להיסטוגרמות תמונת היעד.אותו המיפוי הוא גם מונוטוני ,אבל זה לא מבטיח שהתמונה תראה טוב לאחר המיפוי. המניע העיקרי לכישלונות כמו שאמרנו ,הוא בעיקר מרחבי.גם בדוגמה של לנה במצגת ,אם בתמונת המקור יש הרבה צבעים בהירים ובתמונת היעד לא הרבה צבעים בהירים ,ייווצר artifactשיגרום לצבעים בהירים לבוא על חשבון הכהים.אז מה שקורה הוא מיפוי אופטימלי ,אבל לא תמונה אופטימלית Matching.מקומי ישפר ,אבל הבנו את הנקודה. אם כן ,זה מעביר אותנו לבעיה אחרת – מעניינת לא פחות.נרצה מיפוי שהכי טוב לתמונת היעד שלנו ,כלומר בהינתן תמונת מקור ויעד ,שהתוצאה תהיה הכי דומה ליעד. שרון רוטגייזר כל פיקסל ימופה לצבע חדש במיפוי ונרצה שהשגיאה בין תמונת המקור לתמונת היעד יהיה מינימלי.נשאלת השאלה – מה זו השגיאה הזאת? לצורך הפשטות – סכום ריבועי המרחקים של כל פיקסל ביעד מהפיקסל שקיבלנו.נרצה למזער את הטעות הזו ובתקווה שאם נמזער את זה ,נקבל תמונה שאכן קרובה לתמונת היעד שלנו.לחלקכם זה אולי נשמע כמו MSEאו ,(LSאבל אחד החסרונות )מעבר לכל הבעיות שיש באלגוריתם( הוא שזה לא מבטיח שכל דרגות האפור vימופו לאותן הדרגות .u האלגוריתם שנפעל בו לצורך התהליך ) (MTMהוא SLTשזה .slice transformבהינתן תמונה הוא מייצר עמודה לכל דרגת אפור ואז מביע את התמונה כסכום העמודות האלה. דוגמה עם תמונת עמודה ו 3-דרגות אפור בלבד ,בצד שמאל.עכשיו מובטח לנו שאם ניקח את המטריצה הזו ונכפול אותה בדרגות האפור