‫נתרם על ידי‪ :‬יונתן ויינטראוב‬

‫יישומים בעיבוד תמונה‬
‫שיעורים‬
‫שי אבידן‬
‫סמסטר ב'‪ ,‬תש''ע‬

‫הסריקות בוצעו על ידי הבנק האקדמי‪ ,‬פרויקט של אגודת הסטודנטים‬
‫אוניברסיטת תל אביב‬

24.2.10

1 ‫שיעור‬
‫ שי אבידן‬:‫מרצה‬
:‫תרגילים‬
:‫אתר‬

http://www-2.cs.cmu.edu/~ph/texfund/texfund.pdf – Fundamentals of texture
mapping and Image warping (Paul Heckrbert)
:‫ספרים‬
‫מבוא – להשלים מהמצגת‬

www.mymentor.co.il/yonatan/ :‫לסיכומים נוספים‬

‫‪3.3.10‬‬

‫שיעור ‪2‬‬
‫דגימה ) ‪(Sampling‬‬
‫בדיגמה השאלות שמעניינות הן‪:‬‬
‫בהינתן אות רציף‬
‫•‬
‫•‬

‫‪ g  x‬והייצוג הדגום שלו ‪. g s  x ‬‬

‫האם ניתן לשחזר את ‪ g  x‬מתוך ‪g s  x ‬‬
‫ואיך ניתן לשחזר את‬

‫‪g  x‬‬

‫רכישת תמונה‬
‫תהליך ‪ Image acquisition‬מורכב ממספר שלבים‪:‬‬
‫)‪gs(x,y‬‬
‫)‪gd(x,y‬‬
‫‪Sampling Sampled Image Quantitiser‬‬
‫‪Digital Image‬‬

‫)‪g(x,y‬‬
‫‪Imaging Image‬‬

‫)‪f(x,y‬‬
‫‪Scene‬‬

‫בשלב הראשון פונקציית "האור" של הסצינה ‪ f  x , y ‬עוברת דרך עדשות המצלמה )המתורגמת בצורה‬
‫פרקטית כפילטר ‪ – Point Spread Function‬בדרך כלל גאוסיאן שמוריד חלק מהתדרים(‪.‬‬
‫לאחר מכן התמונה לאחר עדשת המצלמה‬
‫באמצעות פונקציית הלמים‪:‬‬

‫‪ g  x , y‬עוברת קוונטיזציה באמצעות דגימה במרחב‬

‫‪ x−m , y−n‬‬

‫∞‬

‫∞‬

‫∑ ∑‬

‫∞‪m=−∞ n=−‬‬

‫=‪ s  x , y‬וכן ‪. g s  x , y =g  x , y⋅s  x , y ‬‬

‫לאחר מכן מעבירים את ‪ g s  x , y ‬תחרת קווינטות )לו דווקא לינארי( כדי לקבל את התמונה הדיגיטלית‬
‫‪gd  x , y ‬‬

‫‪Aliasing‬‬
‫כזכור מקורס מבוא לניתוח אותות‪ aliasing ,‬קורה כאשר תדר הדגימה קטן הרבה יותר מאשר התדר של‬
‫האות שדוגמים‪ .‬במקרה הזה יישנה אמביבלנטיות באות שנדגם‪ .‬כדי לפתור את בעיה זו ניתן או להעביר‬
‫‪ Low Pass Filter‬בשביל להוריד את התדרים הגבוההים לפני הדגימה או לחלופין להעלות את קצב‬
‫הדגימה‪.‬‬
‫|)‪|G(f‬‬

‫איפה זה משפיע?‬
‫בדיאגרמת הדגימה שקיבלנו מקבלים כי ל ‪ g  x , y‬תיאור ספקטרלי‪:‬‬
‫‪f‬‬

‫ולאחר הדגימה בתדר ‪: f s‬‬

‫|)‪|G(f‬‬

‫‪fs‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪fmax‬‬

‫‪-fmax‬‬

‫‪fs‬‬

‫כך נקראה ‪ aliasing‬בתמונה‪) :‬לשים את תמונת השחמט( העיוות הוא תוצאה של ‪aliasing‬‬

‫שחזור תמונה‬
‫ניתן לשחזר את התמונה המקורית ‪ f  x , y ‬מתוך ‪ g s  x , y ‬בתנאי שלתמונה המקורית מוגבלת‬
‫בתדר וכן שהתדר המקסימלי בתמונה קטן מתדר נייקויסט‪. f s  f nyquist=2 f max :‬‬
‫נשים לב שבמצלמות הבעיה היא לא שהתמונה צריכה להיות ‪ – band-limited‬כי בעיות בפוקוס הן למעשה‬
‫סוג של ‪ low pass filter‬אלא תדר הדגימה שאינו מספק תנאי ניקויסט‪.‬‬
‫בתיאוריה כדי לשחזר את התמונה המקורית בתיאוריה צריך לעשות קונבולוציה עם ‪) sinc‬או מכפלה‬
‫‪1 ; ∣ f ∣≤ f max‬‬
‫{=‪( H  f ‬‬
‫בפונקציית חלון‬
‫|)‪|G(f‬‬
‫‪0 otherwise‬‬
‫‪H‬‬
‫ולכן לא ניתן להשתמש בפונקציית החלון האידיאלי אלא לבצע קירובים‬
‫‪fs‬‬

‫‪fs‬‬

‫דגימה מתמונה אחת כדי לייצר תמונה שנייה ) ‪(Resampling‬‬
‫‪ Resampling‬הוא תהליך שבו מתמירים תמונה דגומה ממערכת קורדינטות אחת לשנייה‪.‬‬
‫לדוגמה‪ ,scale :‬סיבוב‪.‬‬
‫בגדול ‪ Resampling‬בנוי מ‪ 4-‬שלבים‪:‬‬
‫•‬

‫•‬
‫•‬

‫•‬

‫ראשית משחזרים מהתמונה הדגומה את התמונה המקורית ‪) f  f c‬כאשר ‪ f c‬היא תמונה‬
‫רציפה(‪.‬‬
‫לאחר מכן מבצעים את ההתמרה הרצוייה ‪f c  g c‬‬
‫עתה מורידים את התדרים הגבוהים שנוצרו ב ‪ g c‬בגלל ההתמרה )באמצעות ‪,Low-Pass Filter‬‬
‫לרוב משתמשים בגאוסיאן כ ‪(LPF‬‬
‫ולאחר מכן דוגמים את התמונה‪:‬‬

‫‪gc  g‬‬

‫אינטרפולציה‬
‫ישנן מספר דרכים לעבור מהתמונה הדגומה לתמונה הרציפה‪ f  f c :‬באמצעות אינטרפולציה‪.‬‬
‫בצורה כללית אינטרפוליצה היא המעבר מאות דגום‬
‫‪. f  x =∑ C k⋅h x−x k ‬‬

‫‪xk‬‬

‫לאות רציף ‪: f  x ‬‬

‫‪k‬‬

‫כאשר הסכום הוא על גודל ה"‪ ”kernel‬של האינטרפולציה‪ C k ,‬הם משקולות‪ ,‬ו ‪ h‬הוא ה ‪.kernel‬‬
‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫דוגמאות לאינטרפולציות‪:‬‬
‫•‬

‫‪- Nearest Nabor‬‬
‫‪x x‬‬
‫‪x x 1‬‬
‫‪. f  x = f  x k  ; k−1 k ≤x≤ k k‬‬
‫‪2‬‬
‫‪2‬‬
‫כאשר צורת הגרעין ‪ h‬בתדר ובציר ‪.x‬‬
‫‪f‬‬

‫ניתן לראות כי למרות שבציר ‪ x‬צורת הפילטר פשוטה‬
‫בציר התדר מתקבל ‪ sinc‬בעל תוחלת תדר מאוד גדולה ולכן עלול לגרום לבעיה של ‪Aliasing‬‬
‫‪X‬‬

‫•‬

‫אינטרפולציה לינראית )או בדו ממד נקרא ‪bi-‬‬
‫‪(linear interpolation‬‬
‫ניתן לראות כי האינטרפולציה הזאת מכניסה פחות‬
‫תדרים גבוהים לתמונה ולכן "יותר טובה"‬

‫•‬

‫אינטרפולציית ‪ cubic‬משתמשת ביותר פיקסלים –‬
‫הכללה של פונקצייה לינארית‬

‫‪X‬‬

‫‪f‬‬

‫‪Warping‬‬
‫בתהליך ה ‪ warping‬משתמשים בטרנספורמציה גיאומטרית כדי להגדיר מחדש את היחס המרחבי בין‬
‫נקודות בתמונה – למשל מתיחה וכיווץ‪.‬‬
‫ההבדל בין ‪ Resampling‬ל ‪ warping‬הוא ש ‪ warping‬שואל כל פיקסל מאיפה הוא בא ולאן הוא הולך –‬
‫לעיתים מיקום הפיקסל )אינדקס הפיקסל( הוא לא מספר שלם וצריך להשתמש ב ‪ resampling‬כדי לקבל‬
‫ערך במיקום פיקסל‪.‬‬
‫נשים לב כי ניתן לעשות ‪ Warping‬גלובלי – למשל כיווץ ו ‪ warping‬לוקאלי כמו שעושים ב ‪.photoshop‬‬
‫ישנן ‪ 2‬שיטות לבצע ‪:Warping‬‬
‫•‬

‫‪ Forward‬שבו שואלים על כל פיקסל בנקודת המקור מה מיקומו בנקודת היעד‬

‫•‬

‫‪ Backward‬שבו שואלים על כל פיקסל בנקודת היעד מאיפה היא מגיעה‪.‬‬

‫נשים לב שבדרך כלל ‪ Backward‬יותר טוב מ ‪ forward‬כי כאשר עושים ‪ forward‬ייתכנו בתמונת היעד‬
‫"חורים" שבהם לא קובעים ערכים של פיקסלים בתמונת היעד או מקרים שבהם פיקסלים בתמונת המקור‬
‫לא מגיעים לפיקסל מלא בתמונת היעד )למשל בגלל שהוא לא נופל "בול" בתוך פיקסל בתמונת היעד(‬
‫מאמר מנחה‪Feature Based Image Metamorphosis – Beier & Neely :‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫דוגמה‪ :‬מעבר בין מערכות קורדינטות המוגדרות באמצעות ‪ 2‬נקודות‬
‫נניח כי בתמונת המקור מוגדרות ‪ 2‬נקודות ‪ Q,P‬וכן בתמונת‬
‫היעד ' ‪. Q ' , P‬‬
‫נרצה להעביר בשיטת ‪ forward‬פיקסלים מתמונה לתמונה‪.‬‬

‫‪DST‬‬

‫‪SRC‬‬
‫‪P‬‬

‫’‪P‬‬
‫‪u‬‬

‫השיטה לעשות כן היא להשתמש בקו המחבר את הנקודות‬
‫‪ P,Q‬כווקטור ‪ .u‬וקו מאונך לו כווקטור ‪.v‬‬

‫‪v‬‬

‫עתה נוכל לנסח את כל הנקודות בתמונת המקור ‪ x‬במערכת‬
‫הקורדינטות ‪.u-v‬‬

‫‪u‬‬
‫’‪Q‬‬

‫‪v‬‬

‫‪Q‬‬

‫ולבסוף לקבוע את מיקום הפיקסל בתמונת היעד ' ‪ x‬במערכת הקורדינטות החדשה‪.‬‬
‫‪ ⋅ Q−‬‬
‫‪ ‬‬
‫‪ x − P‬‬
‫‪P‬‬

‫=∣‪, ∣u‬‬

‫‪ −P‬‬
‫‪‬‬
‫‪ x− ‬‬
‫‪P ⋅Prependicular  Q‬‬
‫∣∣‪∣∣Q−P‬‬

‫כלומר‬
‫‪2‬‬
‫∣∣‪∣∣Q−P‬‬
‫‪ '− P‬‬
‫‪ '‬‬
‫‪∣v∣⋅Prependicular  Q‬‬
‫‪ ' −‬‬
‫‪P ' ∣u∣Q‬‬
‫‪P ' ‬‬
‫‪x ' = ‬‬
‫∣∣' ‪∣∣Q '−P‬‬

‫=∣‪ ∣v‬ואז‬

‫נשים לב שהתמרה זו מגדירה טרנסלציה‪ ,‬רוטציה וכן ‪.scaling‬‬

‫מה קורה כשיש אוסף קווים בתומנה – התמרות לוקאליות‬
‫עבור מספר קווים המוגדרים בתמונה‪.‬‬
‫ראשית מחשבים את המיקום בתמונת היעד לפי כל קו )בשיטה הקודמת( ' ‪ . x  x i‬ואז מיקום הסופי של‬
‫הפיקסל בתמונה החדשה הוא לפי ממוצע משקולות לכל הקוים‪∑ w i⋅x i ' :‬‬
‫=' ‪. x‬‬
‫‪∑ wi‬‬
‫‪p b‬‬

‫‪‬‬

‫‪‬‬

‫‪Length‬‬
‫כאשר את המשקל מחשבים לפי‬
‫‪adist‬‬
‫אורך הקו ∣∣‪ ∣∣Q− p‬ו ‪ dist‬הוא המרחק של הנקודה מהקטע )קרי מהנקודה לקו או מהנקודה לנקודות‬
‫הקצה – הקטן מביניהם‪.‬‬

‫‪ ,‬כאשר ‪ a,b,p‬הם קבועים שנקבעים מראש ‪ length‬הוא‬

‫‪ -‬מגדירים לכל פיקסל משקל לפי כל קו ואז מיקום הנקודה בתמונה החדשה‬

‫‪Morphing‬‬
‫עירבוב של פיקסלים בין ‪ 2‬תמונות‪ ,‬כאשר העירבוב נעשה ‪ – radiometically‬כלומר ברמות העפור‪.‬‬
‫האתגר הוא – איך לערבב רמות עפור בין ‪ 2‬תמונות כך שהתמונה שמתקבלת תראה "טובה"‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪10.3.10‬‬

‫שיעור ‪3‬‬
‫‪Retargeting‬‬
‫‪ Resizing‬של תמונה בתלות בתוכן שבתמונה )‪.(content-aware‬‬
‫למשל כאשר מציגים סרט ביחס ‪ 3:4‬או ‪ 9:16‬יש צורך להתמיר את הסרט כך‬
‫שהפרצופים או האלמנטים החשובים לא יראו לנו "מרוחים"‬
‫)האלגוריתמים מתעסקים במתיחה ובכיווץ(‬
‫נדון במספר שיטות‪.‬‬

‫‪ - Seam Carving‬כיווץ‬
‫כדי להקטין תמונה בגודל ‪ m×n‬ולהוריד מספר מסויים של עמודות‪ .‬השיטה של‬
‫‪ Seam Carving‬מורידים כל פעם עמודה אחת‪ .‬הרעיון הוא למצוא מסלול אנכי נקרא‬
‫‪ Seam‬שאותו נשמיט מהתמונה‪.‬‬
‫)זאת סוג של הכללה ל ‪ crop‬שמוריד את העמודות שבצדדים(‬
‫ובצורה פורמלית ‪ x i . s x ={ s ix }mi=1={ x i i x }mi=1 ; such that ∀ i ∣x i −x i−1∣1‬הינה‬
‫פונקציה שאומרת עבור כל פיקסל ‪ i‬מהו העמודה שצריך להוריד‬
‫בצורה אינטואיטיבית ‪ seam‬צריך להיות קשיר )קו אחד(‪ ,‬וחייב להיות "חד חד ערכי"‬
‫)הקווים האדומים לא טובים(‬
‫בנוסף נגדיר פונקציית שגיאה ‪ E‬עבור כל פיקסל בתמונה‪ .‬נרצה כי הפיקסלים שה ‪ sim‬עובר עליהם יהיו עם‬
‫*‬
‫השגיאה הטובה הקטנה ביותר‪E  s  :‬‬
‫‪. s =argmin‬‬
‫‪s‬‬
‫איך מגדירים את פונקציית המשקל של ‪?E‬‬
‫•‬

‫לפי קירבה למרכז התמונה‬
‫‪ - E=∇ I‬כלומר גילוי של קצוות ושימורם )שיטה לוקאלית( – כנראה השיטה‬

‫•‬

‫גרדיאנט בתמונה‬
‫הטובה ביותר‪.‬‬

‫•‬

‫באמצעות אנטרופיה )גם כן שיטה לוקאלית(‬
‫‪1‬‬
‫‪H I ‬‬

‫•‬

‫באמצעות שכיחות הצבע בתמונה‬

‫•‬

‫באמצעות ‪ machine vision‬חיפוש אובייקטים משמעותיים‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫איך מוצעים את המסלול עם המשקל המינימלי‬

‫* ‪ ? s‬באמצעות אלגוריתם ‪dynamic programing‬‬

‫איך ממשים ‪-‬במצגת שלו‬
‫עבור כל פיקסל בשורה השנייה מוסיפים לערך של השגיאה בפיקסל את הערך המינימלי של השגיאה‬
‫בפיקסל הקודם וכן הלאה עד סוף התמונה‪ .‬בצורה פורמלית בונים מטריצה ‪ m‬באמצעות מטריצת השגיאה‬
‫‪mi , j=e i , jmin[mi−1, j−1 , mi−1, j  , mi−1, j1] e‬‬
‫בשורה האחרונה נבחר הפיקסל על המכיר הקטן ביותר‪ ,‬ונלך אחורה בכל שורה נבחר את הפיקסל עם‬
‫הערך הקטן ביותר‪.‬‬
‫נשים לב שאלגוריתם זה אינו משתמש ב ‪ resampling‬או החוכמות של השיעור הקודם‬
‫כדי להוריד יותר מעמודה אחת‪ ,‬ישנן ‪ 2‬דרכים לפעול‪:‬‬
‫•‬

‫להוריד עמודה עמודה ולחשב את ‪ E‬כל פעם מחדש – בפועל זה השיטה שבשימוש‬

‫•‬

‫להשתמש באותו ה ‪ E‬ולהוריד כל פעם עמודה‪.‬‬

‫איך מחליטים אם התמונה טובה או לא?‬
‫•‬

‫לפי הציון – שיטה בעייתית כי לפעמים נכנסו ארטיפקטים )גרדיאנטים חדשים בעיקבות קירוב ‪2‬‬
‫פיקסלים רחוקים(‪.‬‬

‫•‬

‫באמצעות הסתכלות‬

‫שיטה אוטומתית מסתכלים על פונקציית האנרגיה )שגיאה( ‪ .E‬בגדול האלגוריתם ‪ Seam Carving‬תחת‬
‫הסתכלות האנרגיה עושה ‪ packing‬לתמונה‪ .‬במקרה ה"אידיאלי" אלגוריתם טוב הוא כזה שזורק הכי פחות‬
‫אנרגיה )כלומר זורק בכל שורה את הפיקסל עם הכי פחות אנרגיה ללא האילוץ של קשירות(‬
‫זה נותן לנו ממד להשוות בין אלגוריתמים שונים – נרצה לבנות אלגוריתם שמשמר הכי הרבה אנרגיה מצד‬
‫אחד ומצד שני כן מכניס אילוץ על קשירות כדי לא ליצור אקטיפקטים‪.‬‬

‫‪ Seam Curving‬לניפוח תמונה‬
‫כדי להגדיל את התמונה ב ‪ n‬פיקסלים‪ ,‬נמצא את ה ‪ n‬המסלוללים באנרגיה הנמוכה ביותר ונשכפל אותם‬
‫פעמיים‪.‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪Image Warping‬‬
‫נגדיר מפת מחיר לפי הנגזרות שבתמונה ‪ I‬בכיוונים השונים ‪ . S=  I 2x I 2y‬נחפש פונקציית ‪Warp‬‬
‫התאמה ‪ f‬שתקטין את התמונה מגודל ‪ mxn‬לגודל ' ‪) m ' ×n‬הפונקציה ‪ f‬אומרת כל פיקסל‬
‫מפונקציית המקור לאן הוא הולך בתמונה המוקטנת‪ ,‬במקרה הטריוויאלי ‪.( f  x , y = x , y‬‬
‫נסמן ‪ F  x , y = F x  x , y , F y  x , y ‬ודרוש כי הפונקצייה תקיים את התנאי השפה הבאים‪:‬‬
‫' ‪. F x 0=0 ; F x m=m ' ; F y 0=0 ; F y n=n‬‬
‫אינטואיציה‪ :‬ניתן לחשוב על התמונה כאל יריאת גומי אלסטית )האלסטיות נקבעת לפי ‪ (s‬ואנחנו רוצים‬
‫לקווץ את היריאה‪ .‬המקומות האלסטיים יותר יתכווצו יותר‪.‬‬
‫בצורה פורמלית‪ ,‬נסתכל על התנהגות של ‪ F‬בסביבה של הנקודה ‪  x , y ‬ונמדוד את טיב של ‪ F‬על פי‬
‫היעקוביין )היעקוביאן ל ‪ F‬הוא המישור המשיק למשיק לפונקציה ‪ (F‬נרצה שהוא יהיה מטריצת היחידה‪:‬‬
‫‪Fx  Fx‬‬
‫‪ F F‬‬
‫‪y‬‬
‫‪,‬‬
‫‪= x‬‬
‫=‪ . J f  x , y ‬אנחנו כמובן לא יכולים לדאוג שהיעקובייאן יהיה מטריצת‬
‫‪x y‬‬
‫‪ F y  Fy‬‬
‫‪x‬‬
‫‪y‬‬
‫היחידה בכל מקום ולכן נשתמש בפונקציית המשקל ‪ S‬כדי למשקל את הרצון לקירבה למטריצת היחידה‬
‫‪2‬‬
‫‪1 0 dx dy‬‬
‫‪. E  f = ∬ s  x , y  J f  x , y−‬‬
‫בפיקסלים השונים ולקבל פונקציית שגיאה ‪:E‬‬
‫‪0 1‬‬
‫‪x=0, y=0‬‬

‫‪ ‬‬

‫‪‬‬

‫‪‬‬

‫∣‪ ‬‬

‫∣‬

‫נבצע דסקרטיזציה )עד כה ‪ f‬פונקציה רציפה(‬
‫נגדיר שריג ‪ M v , E , Q‬עם קודקודים ‪ ,V‬קשתות ‪ E‬ומרובעים ‪ .Q‬כאשר נתון המיקומים של‬
‫] ‪ V =[V 0,. .. ,V end‬ואנחנו מחפשים מיקומים חדשים ] ‪ V ' =[V 0 ' ,... , V ' end‬כך ש ' ‪F V i =V i‬‬
‫‪F‬‬
‫את הנגזרת נקרב באופן הבא‪ v =v i ' −v j ' :‬‬
‫‪x i‬‬
‫עתה פונקציית המכיר תהיה‪:‬‬

‫)כאשר ‪ j‬לימין ‪ ,(I‬בצורה דומה עבור ציר ‪.y‬‬

‫‪2‬‬

‫∣∣‪E  f =∑ S v i ∣∣V ' i−V ' j −V i−V j ‬‬
‫‪i,j‬‬

‫משמעות הפונקציית המחיר‬

‫היא שנרצה שהמרחק בין הפיקסלים ‪ j‬השכנים ל ‪ i‬יישמר עד כדי פונקציית המחיר ‪ .s‬לדוגמה בדחיסה של ‪1‬‬
‫ל‪ 10-‬נרצה שהמרחק בין ‪ 2‬פיקסלים סמוכים ‪. V i −V j=10‬‬
‫בסופו של דבר אנחנו פותרים אוסף של הרבה משוואות ליניאריות דלילה ממושקלת‪.‬‬
‫‪2‬‬
‫‪2‬‬
‫שיטה נוספת‪ E  f =∬ s∣∣J F −kI ∣∣ 1−k ∣∣J F − A∣∣ :‬כאשר‬
‫‪scaling factor x‬‬
‫‪0‬‬
‫=‪. A‬‬
‫‪, k =min scailing factor x , scaling factor y ‬‬
‫‪0‬‬
‫‪scailing factor y‬‬

‫‪‬‬

‫‪‬‬

‫המשמעות של הפונקציה הזו היא שעבור משקל ‪ s‬גבוהה ‪ f‬ינסה למקסם את האיבר ‪ J F −kI‬כלומר עבור‬
‫ריבוע בתמונה המקורית הפונקציה תנסה לשמור על הצורה הריבועית‪.‬‬
‫עבור משקל קטן ימוקסם האיבר ‪ J F − A‬שפירושו למחוץ את הריבוע בתמונה למלבן בהתאם ליחס‬
‫המתיחה \ דחיסה הרצוי )‪(scailing factor‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪Bidirectional Similarity‬‬
‫שיטה בכיוון ההפוך – קודם נגדיר מדד לטיב התמונה ואז נעשה מינימזציה‪.‬‬
‫הם מגדירים מדד להשוואה בין ‪ 2‬תמונות‪:‬‬
‫•‬

‫‪ – Coherent‬כל פץ' )תלאי ריבועי( בתמונת המקור נמצא בתמונת היעד‪:‬‬
‫‪1‬‬
‫= ‪d complete‬‬
‫‪∑ min D P , Q‬‬
‫‪N s P ∈S Q∈ T‬‬
‫‪ S‬הוא תמונת המקור‪ T ,‬הוא תמונת היעד‪ P ,‬הוא פץ' בתמונת המקור‪ Q ,‬פץ' ביעד ‪ D‬מרחק‪.‬‬
‫טרמינולוגיה‪ :‬נחפש לכל פץ' בתמונת המקור נחפש את הפץ' המתאים לו ביותר בתמונת היעד‬
‫ונחשב את המרחק ביניהם‪ - .‬מונע עיבוד מידע‬

‫•‬

‫‪ -Complete‬לכל פץ' בתמונת היעד מגיע מתמונת המקור‪:‬‬
‫‪1‬‬
‫‪∑ min DQ , P‬‬
‫=‪ - d cohere  S ,T ‬מונע ארטיפקטים‪.‬‬
‫‪N T Q ∈T P ∈ S‬‬

‫בסה"כ הציון נקבע לפי ‪. d S , T =d complete d coherent‬‬
‫בשיטה זו עובדים על פצ'ים בכמה גדלים החל מ‪ 5-‬על ‪ 5‬ועד ‪ 30‬על ‪ 30‬פיקסלים כדי למנוע היפוך של‬
‫פצ'ים ועיוותים בסקאלות גדולות‪.‬‬
‫עתה נעבור לבעיית האופטימיזציה‪ ,‬בהינתן ‪ ,S‬נמצא את ‪ T‬לפי המדד שהוצע‪.‬‬
‫נסתכל על פיקסל ‪ q‬בתמונת היעד ‪ T‬ונשאל כמה הוא תורם לפונקציית השגיאה‪:‬‬
‫‪1‬‬
‫‪1‬‬
‫‪2‬‬
‫‪S  P i −T q 2‬‬
‫∑‬
‫‪) . E T  q= ∑  S  p i −T q ‬להסתכל במצגת(‬
‫‪Ns j‬‬
‫‪NT i‬‬
‫הרעיון הוא‪ ,‬נבחר את כל החלונות ‪ Qi‬שסביב הנקודה ‪ q‬ונעביר אותם לתמונת המקור‪ .‬בתמונת המקור‬
‫החלון המתאים הוא ‪ . P i‬בחלון ‪ P i‬הפיקסל נמצא במקום ‪p i‬‬
‫להשלים‬
‫כדי לקבל מינימום על האנרגיה גוזרים את הביטוי לפי ‪ T  q‬ומשווים ל‪.0-‬‬
‫זאת בעיית אופטימיזציה קשה ולכן עושים אותה ב ‪ .gradient disent‬מקטינים את גודל התמונה כל פעם‬
‫בקצת ונותנים לאלגוריתם להתכנס‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪17.3.10‬‬

‫שיעור ‪4‬‬
‫‪Shift Maps‬‬
‫להשלים‬

‫סינטנזה של טקסטורה‬
‫באמצעות פרמידת לפלס‬
‫מתחילים מתמונה קטנה של טקסטורה ורוצים לנפח אותה להלשים‬
‫למה חייבים לעשות ‪ collapse‬כדי לייצר תמונה לפני שעוברים לשלב הבא בפרמידה? בגלל ה ‪histogram‬‬
‫‪ matching‬צריך לעשות ‪ collapse‬כדי לשמר את התדרים שבתמונה לשלב הבא בפרמידה‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪24.3.10‬‬

‫שיעור ‪5‬‬
‫‪Image Composition‬‬
‫הבעיה‪ :‬נתונות ‪ 3‬תמונות ורוצים לשתול ‪ 2‬תמונות בתוך תמונת היעד‪ .‬המשתמש מסמן את האזורים‬
‫הרלוונטים בתמונות המקור וממקם את התמונה בתמונת היעד ושזה יראה "טוב"‪.‬‬
‫השיטה שנשתמש הינה ‪ Poisson Image Editng‬והיא מורכבת מ‪ 3-‬שלבים‪:‬‬
‫•‬

‫להפוך את התמונה לתמונת נגזרת‬

‫•‬

‫לבצע פעולות כלשהן על תמונת הנגזרות‬

‫•‬

‫לבסוף לשחזר את התמונה – זה האתגר האמיתי‪.‬‬

‫כדי לשחזר את התמונה יש לפתור משוואת אוילר לגראנג'‪ .‬עבור התמונות הללו נשתמש בפותר יחסית‬
‫מיהר‪ Conjugate Gradient :‬או בקיצור ‪ .CG‬הפותר הזה מתאים למערכת משוואות דלילה מהצורה‬
‫‪. Ax=b‬‬

‫תאוריה‬
‫ראשית נתייחס לתמונה כאל שדה סקלרי כלומר פונקציה‪:‬‬
‫האפור שלו‪.‬‬

‫‪2‬‬

‫‪f :R R‬‬

‫המתאימה לכל פיקסל את רמת‬

‫בנוסף נגדיר שדה ווקטורי כ‪ G : R2  R 2 :‬כך שהפונקציה ‪ G‬מחזירה ווקטור עבור כל נקודה‪:‬‬
‫]‪. G x , y=[u  x , y , v  x , y ‬‬
‫בהקשר של שיעור זה נסתכל על שדה נגזרות והוא שדה ווקטורי המכיל נגזרות של השדה הסקלרי בכל‬
‫‪ f x , y  f x , y‬‬
‫‪,‬‬
‫=‪. G x , y‬‬
‫מקום‪:‬‬
‫‪x‬‬
‫‪y‬‬

‫]‬

‫[‬

‫נשים לב שבמקרים של תמנות יכול להיווצר ‪ .Curl‬למשל בתמונה הבאה מצויינים‬
‫הנגזרות בכל אחת מהנקודות‪.‬‬

‫‪9‬‬

‫)‪(2,2‬‬
‫‪5‬‬

‫‪7‬‬

‫ניתן להגיע לנקודה הימנית העליונה ב‪ 2-‬מסלולים ולקבל ערך אחר בכל מסלול‪.‬‬
‫שדה שיש בו ‪ curl‬הוא לא קונסרבטיבי ולא ניתן למצוא שדה סקלארי שיצר אותו!‬

‫‪6‬‬
‫)‪(0,3‬‬

‫‪5‬‬
‫)‪(1,0‬‬

‫מילוי החור )‪(Image in-paynting‬‬
‫נניח כי יש בתמונה חור‪ ,‬ואנחנו רוצים למלא אותו בצורה הטובה ביותר‪.‬‬
‫הבעיה שאנחנו רוצים לפתור היא למעשה למצוא את השדה ‪ f‬המינימלי בתוך כך‬
‫‪2‬‬
‫שהגרדיאנטים בחור יהיו קטנים‪ f) min ∬∣∣∇ f −∇ g∣∣ :‬מוגדרת רק בתוך‬
‫‪‬‬

‫‪f‬‬

‫‪edge‬‬

‫‪f‬‬

‫החור(‪ .‬תחת תנאי השפה )אנחנו נרצה שעל ספת החור ערך השדה הסקלארי )הצבע( יהיה כמו בתמונה‬
‫המקורית(‪f ∣ = f *∣ :‬‬
‫נשים לב לבעייתיות אנחנו רוצים למצוא פונקציה מתוך מרחב הפונקציות כך שהאינטגרל עליה יהיה מינמלי‬
‫– בשביל זה צריך חשבון וריאציות‪.‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫"חשבון וריאציות בחד ממד"‬
‫בהתאם לחשבון וריאציות אנחנו יודעים כי הפונקציה המינמילית המקיימת תנאי שפה תחת האינטגרל היא‬
‫‪x2‬‬

‫‪x2‬‬

‫‪dx∫  f '  x2‬‬

‫כזאת המקיימת )בחד ממד(‪:‬‬

‫‪2‬‬

‫‪∫  f '  x  '  x ‬‬

‫‪x1‬‬

‫פונקציית פרטובציה קטנה‬

‫‪ .‬כלומר נרצה למצוא ‪ f‬עבורו כל‬

‫‪x1‬‬

‫‪  x‬תגדיל את האינטגרל‪, g  x= f  x  x  :‬‬

‫‪∫  g  x 2 dx‬‬

‫‪.‬‬

‫כאשר דורשים כי הפרטובציה תתאפס בקצוות כדי לקיים את תנאי השפה‪.‬‬
‫ראשית נפתח סוגריים )ונזניח איברים מסדר ‪:( 2‬‬
‫עתה נגזור לפי ‪ ‬ונשווה ל‪0-‬‬
‫‪x2‬‬

‫‪∫ f '  x 2 2  '  x  f '  x‬‬

‫‪∫ 2 '  x  f '  x =0‬‬

‫‪.‬‬

‫ומתוך נגזרת לפי חלקים מקבלים כי‬

‫‪  x  f '  x ∣ −∫  '  x  f ' '  x  dx=0‬בגלל ש ‪ ‬מקיימת תנאי שפה ‪.  x 1 = x 2 =0‬‬
‫‪x2‬‬
‫‪x1‬‬

‫‪x1‬‬
‫‪x2‬‬

‫ולכן קיבלנו לבסוף‬

‫‪∫  '  x  f ' '  x  dx=0‬‬

‫‪ .‬ומשום ולא הגבלנו את ‪ ‬בכלל‪ ,‬אנחנו חייבים לדרוש כי‬

‫‪x1‬‬

‫‪ f ' '  x =0‬זהותית – כלומר ‪ f‬חייבת להיות קו ישר‪.‬‬

‫משוואות אוילר לגראנג'‬
‫משוואת אולר לגראנג' היא הדרך הכלליות יותר לפתור את הבעיה הזו‪:‬‬
‫‪x2‬‬

‫רוצים לעשות מינמיזציה על הפונקציונל‪ , J =∫ F  x , f , f '  dx :‬אזי ל ‪ J‬נקודת קיצון עבור ‪ f‬המקיים‬
‫‪x1‬‬

‫‪F d  F‬‬
‫–‬
‫‪=0‬‬
‫' ‪.  f dx  f‬‬
‫את התנאי הבא‪:‬‬
‫במקרה שלנו של התאמת חור מתקיים‪:‬‬

‫‪2‬‬
‫‪2‬‬
‫‪2‬‬
‫‪ . F =∣∣∇ f ∣∣ = f x  f y‬נציב זאת לתנאי למינימום‪:‬‬

‫‪F d  F d F‬‬
‫‪2 f 2 f‬‬
‫–‬
‫–‬
‫‪=0‬‬
‫נציב ונקבל ‪ 2 =0‬‬
‫‪.‬‬
‫‪2‬‬
‫‪ f dx  f x dy  f y‬‬
‫‪x‬‬
‫‪y‬‬
‫כלומר המינמום מושג כאשר ‪ f =0‬‬

‫בתוך החור ‪) ‬לפלסיאן על ‪ (f‬ועל השפה נדרוש כי‬

‫‪f ∣ = f *∣‬‬
‫‪f‬‬
‫נעשה קירוב דיסקרטי לפתרון הבעיה‪≈ f x1, y − f x , y :‬‬
‫‪x‬‬

‫ובסהכ‪:‬‬

‫‪−4 f x , y =0‬‬

‫‪x , y−1‬‬

‫וכן‬

‫‪2 f‬‬
‫‪≈ f x1, y −2 f x , y  f x−1, y‬‬
‫‪2‬‬
‫‪x‬‬

‫‪.  f = f x1, y  f x−1, y  f x , y 1 f‬‬

‫עתה נוכל לכתוב זאת כאוסף של משוואות לינאריות‪:‬‬

‫‪‬‬

‫‪‬‬

‫‪1 1 −4 1 1 ...‬‬
‫=‪A‬‬
‫‪,‬‬
‫‪0 1 1 −4 1 1‬‬
‫‪0 .. 0 1 0 ...‬‬

‫‪‬‬

‫‪0‬‬
‫‪...‬‬
‫=‪. b‬‬
‫‪0‬‬
‫‪f *i‬‬

‫כאשר מחפשים את ‪ A x=b :x‬כאשר השורות העליונות של ‪ A‬ו ‪ b‬הם למעשה הדרישה לאיפוס‬
‫הלפלסיאן‪ .‬ובשורות התחתונות הינה הדרישה לתנאי שפה‪.‬‬
‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪.‬‬

‫נשים לב שלא חייבים להשתמש בשפה עגולה וחור באמצע‪ .‬אפשר להעביר בתמנה קווים בצורה אקראית‬
‫ולקרוא להם" שפה"‪.‬‬
‫ההנחות הבסיסיות מאחורי ייצירת תמונה שכזו היא‪ :‬דרישה לתמונה חלקה ‪ +‬עמידה בתנאי השפה‪.‬‬

‫שחזור תמונה מתוך תמונת גרדיאנטים‬
‫בהינתן שדה וקטורי ‪ G=u  x , y  , v  x , y‬באזור סופי ‪ . ‬מצא ערכי ‪) f‬ערכי הפיקסלים‬
‫‪2‬‬
‫שבתמונה( שממזערים את‪ ∬∣∣∇ f −G∣∣ :‬תחת האילוץ ‪. f ∣ = f *∣‬‬
‫‪‬‬

‫‪x 2‬‬

‫‪y 2‬‬

‫‪2‬‬

‫נפתור גם כאן באמצעות חשבון וריאציות כאשר‪ . F =∣∣∇ f −G∣∣ = f x −G   f y −G  :‬והצבה‬
‫‪G x G y‬‬
‫‪ G‬‬
‫הזאת למשוואות אוילר לגראנג' יתן את התנאי‪ :‬‬
‫=‪( f‬‬
‫⋅∇ = ‪)  f‬כלומר‬
‫‪‬‬
‫‪x‬‬
‫‪y‬‬
‫בפועל כדי להשתיל תמונה בתמונה לוקחים את התמונה שממנה משטלים‪ ,‬מייצרים מטריצת גרדיאנטים‪,‬‬
‫שוטלים את המטריצה הזו במקום חור שועשים בתמונת היעד ואז משחזרים את החור באמצעות‬
‫הגרדיאנטים‬

‫שחזור תמונת מתוך נקודת מבת של אלגברה לינארית‬
‫בהינתן תמונה המסודרת כווקטור עמודה ‪ .I‬נוכל להגדיר מטרציה ‪ D x‬כאופרטור גזירה לפי ‪ x‬של‬
‫התמונה ‪ - D x = ... 0 −1 1 0 ...  :I‬למרות ש ‪ I‬היא ווקטור עמודה עדיין אפשר למצוא איפה‬
‫לשים ‪ −1 ; 1‬בהתאם למיקום הפיקסלים בתמונה המקורית‪.‬‬
‫‪ D x I =u‬וכן ‪) D y I =v‬כאשר‬

‫נרצה למצוא תמונה ‪ I‬כך ש‬
‫‪D x  I = U‬‬
‫‪ .‬נסתכל על משוואות הנורמל ונקבל לבסוף‪:‬‬
‫‪V‬‬
‫‪Dy‬‬

‫‪  ‬‬

‫] ‪ .( G=[U , V‬בסה"כ נקבל‪:‬‬
‫‪ DTx D x  DTy D y  I =DTx U DTy V‬‬

‫זו היא משוואה לינארית ענקית במיוחד עבור תמונות גדולות אבל דלילה‪ .‬כדי לפתור אותה נשתמש בשיטת‬
‫‪.CG‬‬

‫‪Conjugate Gradient‬‬
‫לקוח מתוך המאמר‪:‬‬
‫‪Jonathan Shewchure – An Introduction to the CG method without the agonizing Pain‬‬
‫הרעיון הוא שבמקום לפתור מערכת משוואות לינארית‪:‬‬
‫נסתכל על הבעיה כאל בעיית אופטמיזציה‪.‬‬

‫‪ Ax=b‬בהנחה ש ‪ A‬סימטרית ‪, AT = A‬‬

‫‪1 T‬‬
‫נרצה לבצע מינימום ל‪ . f  x = x A x−b xc :‬נגזור ונקבל‪:‬‬
‫‪2‬‬
‫‪1 T‬‬
‫‪1‬‬
‫‪. f '  x= A x A x−b=0  Ax=b‬‬
‫‪2‬‬
‫‪2‬‬
‫עתה איך נמצא את ‪ - ?x‬למשל באמצעות ‪ ,gradient descent‬או באמצעות ‪.CG‬‬
‫ב ‪ CG‬השיטה בגדול היא‬
‫•‬

‫מתחילים מנקודה אקראית‬

‫•‬

‫מחפשים את כיוון גרדיאנט השגיאה בנקודה‪ ,‬נסמנו ב ‪a‬‬
‫‪‬‬

‫•‬

‫‪ ‬עד שקיוון גדיאנט השגיאה מאונך לכיוון ‪a‬‬
‫הולכים לאורך כיוון ‪a‬‬
‫‪‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫•‬

‫ואז חוזרים לשלב ‪2‬‬

‫בגלל שהפונקציה היא פונקציה קוודרטית )משוואה מסדר שני( מתחייב שיהיה לה מינמום גלובלי‪CG .‬‬
‫מהיר יותר מהשיטות האחרות בגלל שהוא מבטיח שבכל שלב אנחנו הולכים בכיוון ניצב לכל הכיוונים‬
‫שהלכנו עד כה – ולכן הוא הכי מהיר! במטלאב הפונקציה היא ‪.cgs‬‬
‫על רגל אחת בהינתן תמונת יעד ‪ I‬ותמונת מקור ‪ .S‬לוקחים את הגרדיאנטים ב ‪ S‬ו‬
‫•‬

‫או מחליפים את הגרדיאנטים ב ‪ I‬בגרדיאנטים מ ‪S‬‬

‫•‬

‫או לוקחים ממוצע של הגרדיאנטים‬

‫•‬

‫או לוחקים את המקסימום בין הגרדיאנטים של ‪ S‬ו ‪ – I‬זו היא שטילה "שקופה"‪.‬‬

‫•‬

‫שיטות נוספות לקבלת תמונת גרדיאנטים "טובה"‬

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

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪7.4.10‬‬

‫שיעור ‪6‬‬
‫פילטרים לשימור קצוות‬
‫בניגוד לפילטר עם גאוסיאן המחליק תמונה נדון בפילטרים המחזקים את הקצוות‬

‫‪Median Filter‬‬
‫הגדרה‪ :‬בהינתן סידרה של איברים‬

‫} ‪ S={ a n‬החציון )‪ (Median‬הינו האיבר האמצעי כשהם ממויינים‪.‬‬

‫‪ – Median Filter‬לוקחים חלון‪ ,‬מסדרים את הפיקסלים בחלון ולוקחים חציון‪.‬‬
‫הפילטר הזה פחות רגיש ל ‪ .outliers‬אבל איך אפשר לכמת את זה – איך מכמתים רגישות ל ‪.outliers‬‬

‫‪Breakdown Point‬‬
‫מגדירים ‪ – Breakdown Point‬והיא כמות ה ‪ outliers‬שיש בנתונים כדי שהפילטר לא יעשה את מה שהוא‬
‫אמור לעשות‪.‬‬
‫בצורה פורלמילת‪ :‬מגדירים אופרטור ‪ T‬הממפה ‪) T : S  Rd‬כאשר ‪ S‬הוא סידרת האיברים‬
‫( יהי } ‪ P={ P 1,. .. , P n‬יקרה הקבוצה המזהמת ‪.Polluting Set‬‬

‫} ‪S={ a n‬‬

‫נאמר כי ‪ T‬נשבר )‪ (Break down‬ב ‪ S‬עם הקבוצה המזהמת בגודל ‪ P‬אם‪:‬‬
‫∞=}∣∣‪. sup {∣∣T  s −T S ∪P ‬‬
‫)כאשר ה ‪ sup‬הסופרימום( נלקח על כל הקבוצות המזהמות ‪ P‬בגודל ‪.P‬‬
‫המשמעות היא‪ :‬אם ניתן לקחת ‪ outliers‬קרצונינו ונוכל לקחת את המרחק של תוצאת האופרטור על ‪ S‬ועל‬
‫‪ S‬עם הזיהום גדול קרצונינו‪.‬‬
‫נאמר כי‬

‫' ‪ p‬הוא הגודל ה ‪ P‬הקטן ביותר שצריך כדי ש ∞=}∣∣‪sup {∣∣T  s −T S ∪P ‬‬

‫ה ‪ break down‬של ‪ T‬יוגדר כ‪:‬‬

‫'‪p‬‬
‫' ‪n p‬‬

‫=‪) T , S ‬כאשר ‪ n‬הוא גודל הקבוצה ‪.(S‬‬

‫לדוגמה‬
‫עבור אופרטור ממוצע‪ ,‬מספיק ‪ outlier‬אחד בשביל להרחיק את הממוצע כרצונינו‪ ,‬ולכן ‪ p ' =1‬ו‬
‫‪1‬‬
‫=‪. ‬‬
‫‪n1‬‬
‫עבור החציון צריך כמות ‪ outliers‬כגודל הקבוצה )כשגודל ‪ P‬זהה לגודל ‪ S‬נוכל לשלוט בחציון כרצונינו( ולכן‪:‬‬
‫‪ p ' =n‬וכן ‪=0.5‬‬

‫חישוב ה ‪Median Filter‬‬
‫בצורה הנאיבית‪ ,‬לוקחים חלון בתמונה ממינים פיקסלים ולוקחים את החצי – הבעיה היא שזה איטי מאוד‪.‬‬
‫שיטה אלטרנטיבית )‪ (Huarg's Algorithem‬היא לחשב היסטוגרמה לחלון ולקחת את מחצית‬
‫מההיסתוגרמה‪.‬‬
‫הבעיה היא שלחשב היסתוגרמה זה יקר‪ ,‬אבל אפשר לקחת ‪ 2‬חלונות קרובים‪ ,‬להוריד את‬
‫השורה שאינה חופפת ולהוסיף את השורה החדשה להסתוגרמה‪.‬‬
‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫חציון ברב ממד ‪Multi Dimensional Median‬‬
‫בפועל כשעובדים על תמונה לפיקסלים יש ערך ‪ ,RGB‬ולכן יש צורך בחציון רב ממדי‪.‬‬
‫אופציה אחת היא לעשות חציון על כל ‪ RGB‬בנפרד‪ ,‬אבל זה אופציה זו שוברת את היחסים בין ערוצי‬
‫הטבע‪.‬‬
‫יישנם מספר שיטות להגדיר חציון בכמה ממדים‬
‫•‬

‫‪ – Geometric Median‬בהינתן אוסף נקודות‪,‬‬
‫אזי הממוצע הוא כזה הממזער את ריבוע המרחקים לכל הנקודות‪ ,‬והחציון הוא זה הממזער את‬
‫‪n‬‬

‫סכום המרחקים לכל הנקודות‪ .‬בצורה פורמלית‪GM =argmin ∑ d  y , x i  :‬‬
‫‪i‬‬

‫‪d‬‬

‫‪y∈ℝ‬‬

‫דוגמה‪ :‬בהינתן ‪ 3‬הנקודות‪ .0,2,100 ,‬הממוצע הוא ‪ ,34‬וסכום המרחקים הוא‬
‫‪ 343266=132‬בעוד שעבור החציון )‪ (2‬סכום המרחקים קטן יותר‪. 2098=100 :‬‬
‫טענה‪ :‬בחד ממד ה ‪ GM‬מתלקד עם החציון המוכר לנו – אינטואציה )במקום הוכחה( בהינתן‬
‫שאנחנו עומדים על החציון וזזים קצת לכיוון כלשהו אנחנו נתרחק מיותר נקודות מאשר כאילו‬
‫שנתקרב עליהם‬
‫ניתן לנסח את הבעיה גם כבעיה של חקר בצועים‪ – Facility Location :‬תמקם מפעל כך שתמזער‬
‫את המרחק לאוסף מחסנים ידוע‪.‬‬
‫‪n‬‬

‫‪x‬‬

‫∣∣ ‪∑ ∣∣x −j y‬‬
‫‪j‬‬

‫‪i‬‬

‫‪j=1‬‬
‫‪n‬‬

‫=‪ - y i1‬זו‬

‫את החציון הגיאומטרי מחשבים באמצעות ‪Weiszfeld's Algorithem‬‬
‫‪1‬‬
‫∣∣ ‪∑ ∣∣x − y‬‬
‫‪j=1‬‬
‫‪j‬‬
‫‪i‬‬
‫שיטה איטרטיבית כאשר ‪ y 0‬נלקח כממוצע )השיטה מתכנסת לרוב לאחר איטרציה או ‪(2‬‬
‫•‬

‫החציון כ ‪ – Depth Order Function‬כאן יש ‪ 2‬הגדות אלטרנטיביות‬
‫◦‬

‫‪ – Converx Hull Peeling‬בהינתן אוסף נקודות‬
‫▪‬

‫חשב ‪) Convex Hull‬הספירה אשר תוחמת בדיוק את הנקודות(‬

‫▪‬

‫כל הנקדות על ה ‪ CH‬מקבלות עומק ‪1‬‬

‫▪‬

‫זרוק )‪ (Peel‬את הנקודות הללו‬

‫▪‬

‫חזור על השלב הראשון‬

‫החציון הוא הנקודה עם העומק הגבוהה ביותר‬
‫◦‬

‫‪) Tukey Median‬שיטה טובה יותר מבין ה‪ ,2-‬על שם מתמטיקאי סיני(‪ .‬החציון לפי הגדרה זו‬
‫הוא הנקודה עם העמוק ‪ Tukey‬המקסימלי‪ .‬כאשר עומק ‪ Takey‬מוגדר‬
‫‪0‬‬
‫כמספר המינימלי של נקודות על צד אחד של מישור מפריד העובדר דרך‬
‫הנקודה‪.‬‬
‫‪3‬‬
‫כדי לחשב עומק ‪ Tukey‬הרעיון הוא כי נקודות שבצד נוכל למצוא מישור כך‬
‫שכמות הנקודות שבצד אחד הוא ‪ .0‬אבל לנקודות במרכז לא נמצא‬
‫מישורים כאילו‪.‬‬
‫בפועל‪ ,‬יקר לחשב את העומק ‪ Tukey‬על כל המישורים ולכן מגרילים כזה עומק‪.‬‬
‫בהינתן מישור מפריד ‪ V‬נגדיר‪:‬‬

‫]∣‬

‫} ‪ a j ={ V T⋅a j∣V T⋅a jV T⋅a i‬‬
‫‪ rank‬ואז‬
‫‪V‬‬

‫[‬

‫‪min Rank a j  , n− Rank a j  ‬‬
‫‪) Depth a i=min‬מינימום בין ‪ 2‬הצדדים ואז מינימום‬
‫‪V‬‬
‫‪V‬‬
‫‪v‬‬
‫‪MedianS‬‬
‫‪=max‬‬
‫‪Depth‬‬
‫‪a‬‬
‫‪‬‬
‫‪i‬‬
‫‪.‬‬
‫על כל המישורים ‪) V‬כאשר ‪ V‬מקיים ‪ ( ∣V ∣=1‬כאשר‬
‫‪a‬‬

‫∣ ∣‬

‫∣‬

‫‪i‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪Bilateral Filter‬‬
‫המטרה כאמור היא לבצע החלקה רגישה לשפות‪ .‬בחד מימד‪:‬‬
‫נרצה לעשות פילטר על הפיקסל המרכזי‪.‬‬
‫גאוסיאן יתן ממוצע ממשוכל לפיקסלים בקירבה מרחבית לפיקסל‪.‬‬
‫בנוסף לגאוסיאן זה ניתן משכול לפי הקירבה של הפיקסלים מבחינת העוצמה‪.‬‬
‫ככה לא "נערבב" פיקסלים מהצד האחד של השפה עם פיקסלים מהצד השני‪.‬‬
‫המקור )‪ (Reference‬הוא‪.Fredo Durand, Sylvain Paris :‬‬
‫נתחיל‪,‬‬
‫יישנם מספר פילטרים שנוכל להשתמש בהם‪:‬‬
‫‪ :Box Average‬עבור קופסא ‪‬‬

‫•‬

‫סביב פיקסל ‪ P‬עבור תמונה ‪BA [ I ] p=∑ B  p−q I q :I‬‬
‫‪q ∈I‬‬

‫) ‪ B  x ‬מחזיר ‪ 1‬עם ‪ x‬בתוך קופסא בגודל ‪( ‬‬
‫‪ :Gaussian Blur‬עתה משתמשים במישקול גאוסיאני‪:‬‬

‫•‬

‫‪2‬‬

‫‪−x‬‬

‫‪e 2‬‬
‫‪2‬‬

‫‪1‬‬

‫‪ 2 ‬‬

‫‪ GP [ I ] P ∑ G  ∣∣ p−q∣∣ I q‬כאשר‬
‫‪q∈ I‬‬

‫=‪. G   x ‬‬

‫עתה נוכל להגדיר את ה ‪ Bilateral Filter‬הנותן משכל לא רק לפי הפרש מרחבי אלא גם לפי הפרש‬
‫‪1‬‬
‫בעוצמה‪∑ G ∣∣ p−q∣∣G ∣I q −I p∣ I q :‬‬
‫= ‪ . BF [ I ]P‬כאשר ‪ W p‬הוא משכל עליו נדבר‬
‫‪W p q∈ I ‬‬
‫בהמשך‪.‬‬

‫•‬

‫‪s‬‬

‫‪r‬‬

‫החלקה זו לא מתאימה לניכוי רעשים מסוג ‪) impulse‬רעש ‪.(delta‬‬
‫כדי לעבור לצבע יש לעבור ממרחק בעוצמה למרחק תלת ממדי ב ‪G ∣∣I p−I q∣∣ :RGB‬‬
‫‪r‬‬

‫חישוב ‪ Bilateral Filter‬בצורה מהירה‬
‫בדוגמה חד ממדית‪ ,‬מגדירים סביב כל נקודה אליפסה )מעלים מימד( ואז‬
‫תוצאת ה ‪ BF‬היא קונבולוציה של עוצמת האות עם אליפסה‪.‬‬
‫בנוסף צריך לחשב את גורם הנירמול‬
‫דומה )מעלים ממד(‪.‬‬

‫‪ - W p‬את זה מחשבים גם כן בצורה‬

‫‪1‬‬
‫ובצורה ריגורוזית‪∑ G ∣∣q− p∣∣G  ∣I p−I q∣ I q :‬‬
‫‪W p q ∈I ‬‬
‫‪. W p =∑ G ∣∣q− p∣∣G  ∣I p−I q∣‬‬
‫‪r‬‬

‫‪r‬‬

‫‪s‬‬

‫‪q∈ I‬‬

‫האלגוריתם הוא‪:‬‬
‫•‬

‫להשלים מהשקף שבאתר‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪s‬‬

‫= ‪ BF [ I ]p‬כאשר‬

‫‪Joint Bilateral Filter / Cross Bilateral Filter‬‬
‫ניתן לקחת את הגאוסיאנים של העוצמה והמרחק מ‪ 2-‬תמונות שונות‪ .‬הדוגמה הנפוצה היא כאשר יש ‪2‬‬
‫תמונות אחת עם פלאש ואחת ללא פלאש‪ .‬התמונה ‪ A‬ללא פלש היא עם יותר צבעים )הצבע יותר עשיר(‬
‫אבל רועשת‪ ,‬אבל התמונה עם פלש ‪ B‬היא ללא רעש אבל אין כלכך צבע – הצבע הולך לעיבוד‪.‬‬
‫‪1‬‬
‫‪∑ G ∣∣q− p∣∣G  ∣∣B p−B q∣∣ Aq‬‬
‫‪W p q ∈S ‬‬
‫התמונה עם הפלש אבל לא מפסידים את העושר של הצבע‪) .‬יש תמונה במצגת(‬
‫‪r‬‬

‫= ‪ - BF [ I ] p‬בתמונה הזאת אנחנו מרוויחים את האי רעש של‬

‫‪s‬‬

‫‪Video Enhancement Using Per Pixel Exposure‬‬
‫האלגוריתם נקרא‪Adaptive Space Time Accumulation :‬‬
‫בהנחה שיש סרט וידיו באיכות נמוכה ורוצים לעלות את איכות הפריים‬
‫‪1‬‬
‫‪G ∣∣q− p∣∣ G  D I p , I q  I q‬‬
‫= ‪. BF [I ]p‬‬
‫∑‪W p‬‬
‫‪q ∈S‬‬
‫‪r‬‬

‫‪s‬‬

‫כאשר הפונקציה ‪ D‬יכולה להיות כללים ולו דווקא מרחק אוקלידי – הייתרון הוא שפונקציה כללית‬
‫המסתמכת על פריימים קודמים יכולה להתאלם מ ‪impulse Noise‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪14.4.10‬‬

‫שיעור ‪7‬‬
‫‪Local Mode Filtering‬‬
‫להשלים‬
‫נגדיר הסתוגרמה מקומית סביב פיקסל ‪ p‬שהעוצמה שלו היא ‪) i‬נעלם(‪:‬‬
‫‪3‬‬
‫‪ - H  p , i , r , s =∑ G ∣∣ p−q∣∣G   I q−i‬החלון הוא גאוסיאני )כי חלון חלוני יש לו ארטיפקטים‬
‫‪s‬‬

‫‪r‬‬

‫‪q∈ S‬‬

‫חמורים(‬
‫‪H3‬‬
‫היינו רוצים להראות כי אכן הפילטרים מתלקדים כלומר‪∣I =I =0 :‬‬
‫‪i‬‬
‫‪∑ G ∣∣ p−q∣∣G   I q −i I q‬‬
‫‪i= q ∈S‬‬
‫ולכן ‪ i ∑  I q −i G  ∣∣ p−q∣∣G   I q−i=0‬המקיים זאת הוא‬
‫‪q ∈S‬‬
‫‪G‬‬
‫‪‬‬
‫∣‬
‫∣‬
‫‪p−q‬‬
‫∣‬
‫∣‬
‫‪G‬‬
‫‪‬‬
‫‪I‬‬
‫‪−i‬‬
‫‪∑ ‬‬
‫‪‬‬
‫‪q‬‬

‫‪ .‬נציב )וזכור ש ‪ G‬הוא גאוסיאן(‬

‫‪p‬‬

‫‪r‬‬

‫‪r‬‬

‫‪s‬‬

‫‪s‬‬

‫‪s‬‬

‫‪r‬‬

‫‪q∈ S‬‬

‫)המכנה הוא גורם נרמול(‪.‬‬
‫‪G ∣∣ p−q∣∣G   I tq −I tp I tq‬‬
‫∑‬
‫‪q ∈s‬‬
‫‪I t1‬‬
‫= ‪p‬‬
‫‪∑ G  ∣∣ p−q∣∣G  I tq− I tp ‬‬
‫‪R‬‬

‫מציאת ‪ i‬הוא באמצעות סכמה אינטרטיבית‬

‫‪R‬‬

‫‪s‬‬

‫‪s‬‬

‫‪ .‬מה שקורה הוא‬

‫‪q∈ s‬‬

‫שבכל איטרציה עוברים על כל התמונה ואז עושים עוד איטראציה וכן הלאה‪.‬‬
‫ניתן לראות כי הנוסחא מאוד קרובה ל ‪ – bilateral filter‬למעשה ה ‪ LMF‬בחלון שכול ל ‪bilateral Filter‬‬

‫‪ Weighted Least Square‬ו ‪Robust Estimation‬‬
‫לוו דווקא בהקשר של ‪ .denoising‬נניח כי התמונה הרועשת שיש לנו ‪ Y‬מורכבת מתמונה הנקייה ‪ X‬ורעש‬
‫‪. Y =X V :V‬‬
‫לכעורה לא ניתן לחלץ את ‪ X‬מ ‪ Y‬אלא אם מניחים הנחות‪ Weighted Least Square WLS .‬המוגדר‬
‫באופן הבא‪:‬‬

‫‪1‬‬

‫‪T‬‬
‫‪T‬‬
‫] ‪ WLS  X = 2 [ X −Y ] [ X −Y ]/ 2 [ X −DX ] W Y [ X − D X‬כאשר ‪ D‬היא מטריצה‬

‫המזיזה דגימה אחת ימינה‪ X −DX :‬הוא קירוב דיסקרטי של הנגזרת‪ W Y  .‬היא מטריצת מש ‪e‬ולות‬
‫– ניתן למשקל כל ערך של נגזרת אחרת‪ ,‬למשל נגזרות קטנות מקבלות משקל גבוהה ולכן האלגוריתם ינסה‬
‫להחליק נגזרות קטנות( ‪ Y ,‬הינו מטריצה שקיבלנו אבל היא מיוחסת כאן כווקטור‪.‬‬
‫פירוש הנוסחא‪ :‬האיבר השמאלי ממזאר את המרחק בין ‪ X‬ל ‪ ,Y‬והאיבר השני מנסה למזאר נגזרות‪.‬‬
‫בעצם ההנחה היא שהתמונה ‪ Y‬היא חלקה למקוטעין‬
‫ואילו ‪ Rubust Estimation‬מוגדר כך‪:‬‬

‫‪1‬‬
‫‪‬‬
‫‪T‬‬
‫} ‪ - R E = X = 2 [ X −Y ] [ X −Y ] 2 { X − DX‬יותר כללי מ‬

‫‪) .WLS‬נדון ב ‪ ‬מאוחר יותר(‪.‬‬

‫פתרון בעיית ה ‪least Square‬‬
‫נגזרות את השגיאה לפי ‪ X‬ונשווה ל‪:0-‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪WLS‬‬
‫‪=[ X −Y ] [ I −D] T W Y [ I − D] X‬‬
‫‪x‬‬

‫וכן‬

‫‪R E  X ‬‬
‫} ‪=[ X −Y ] [I −D] ' {[I −D] X‬‬
‫‪X‬‬
‫כדי לפתור את בעיית המנימיזציה נעשה איטרציות ‪:Steapest Desent‬‬
‫‪  x ‬‬
‫‪X WLS‬‬
‫‪= X WLS‬‬
‫‪− WLS‬‬
‫‪∣X = X =Y − I − DT W Y  I − DY‬‬
‫‪1‬‬
‫‪0‬‬
‫‪X‬‬
‫‪WLS‬‬
‫‪0‬‬

‫בצורה דומה‪X 1R E =Y −  I −DT  ' { I −DY } :‬‬
‫‪ RE‬שכול ל ‪ WLS‬כאשר‬
‫‪ ' Y [ K ]−Y [ k −1]‬‬
‫]‪Y [ K ]−Y [ K−1‬‬

‫כך לדוגמה עבור‬

‫} ‪ ' { I −DY‬‬
‫‪−DY‬‬

‫=‪ , W Y ‬כלומר לכל פיקסל ‪ K‬נקשור את‬

‫‪ ‬עם ‪:W‬‬

‫=] ‪. W [k‬‬

‫‪1 2‬‬
‫‪ = x‬מקבלים ‪. W =1‬‬
‫‪2‬‬

‫השוואה בין ‪ WLS,RE‬ל ‪bilateral Filter‬‬
‫הרעיון הוא – יום אחד מישהו הגה את ‪ BF‬אבל איך הוא קשור למדע שהיה קודם קרי ‪.WLS, RE‬‬
‫נסתכל על פונקציית המשקל הבאה‪:‬‬
‫‪N‬‬

‫‪1‬‬
‫‪1‬‬
‫‪T‬‬
‫‪n‬‬
‫‪n‬‬
‫] ‪ .  x = [ X −Y ] [ X −Y ] ∑ [ X −D X ]W Y , n[ X −D X‬כאשר‬
‫‪2‬‬
‫‪2 n=1‬‬
‫צעדים‪ .‬כלומר ‪ X −D n X‬הינו החיסור בין ‪ 2‬דגימות במרחק ‪n‬‬

‫‪ D n‬הוא תזוזה של ‪n‬‬

‫כדי למצוא את המינימום שגיאה נגזור לפי ‪ X‬ונשווה ל‪ .0-‬לבסוף נקבל כי צעד אחד של איטרציית‬
‫‪N‬‬

‫‪ Steapest Desecent‬יראה כך‪X 1=[ I − ∑  I −D−nW Y , N  I −Dn ] X 0 :‬‬
‫‪n=1‬‬

‫)כאשר ‪( D −n = D nT‬‬
‫לכעורה לא כדאי להשתמש ב ‪ ‬אותו סקאלר לכל הנגזרות – ולכן נשתמש בשיטת יעקובי ונחליף את‬
‫‪ ‬במטריצת משקולות אלאכסונית כדי להעיץ את ההתכנסות‪ .‬נשתמש בהסיאן‪:‬‬
‫‪2‬‬
‫‪N‬‬
‫‪  X ‬‬
‫‪=H‬‬
‫‪Y‬‬
‫‪=I‬‬
‫‪‬‬
‫‪ I −D−n W Y , N  I −Dn ‬‬
‫ואז נגדיר מטריצה‬
‫∑‬
‫‪2 X‬‬
‫‪n=1‬‬
‫‪  ) M Y =[ I diag  H Y ]−1‬הינו פרמטר שאמור לעזור לייציבות נומרית עבור מספרים‬
‫‪N‬‬

‫‪−n‬‬
‫‪n‬‬
‫קטנים( ‪. X 1=[ I − M Y  ∑  I −D W Y , N  I −D ] X 0‬‬
‫‪n=1‬‬

‫‪n‬‬

‫‪ ' [ pI − D ]Y  n‬‬
‫עתה נגיע לביטוי לאיבר ספציפי )פיקסל( באיטרציה תוך שימוש ב ‪‬‬
‫‪I − Dn‬‬
‫‪−2‬‬
‫[ ‪=− 2R exp‬‬
‫‪ 01‬אומר שאנחנו לא סומכים על נגזרת של דגימות רחוקות‪ .‬בלהבלה ]‬
‫‪2‬‬
‫‪2 R‬‬

‫=‪ W  y , n‬כאשר‬

‫כלומר בשורה התחתונה קיבלנו ‪.Bilateral Filter‬‬
‫כלומר ‪ BF‬הינו הכללה של השיטות הקודמות‪ ,‬השיטות הקודמות מסתכלות על הנגזרת בין ‪ 2‬פיקסלים‬
‫קרובים בעוד ש ‪ BF‬הוא מסתכל על הנגזרות בין פיקסלים רחוקים‪:‬‬
‫‪N‬‬
‫‪1‬‬
‫‪1‬‬
‫] ‪ x = [ X −Y ]T [ X −Y ] ∑ [ X −D n X ]W Y , n[ X −D n X‬‬
‫‪2‬‬
‫‪2 n=1‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫מהו מדד ‪Rubust‬‬
‫מדד רובוסטי הוא כזה שמתעלם ממדידות גדולות‪ .‬פונקציית משקל ‪ =2‬אינו רובוסטי כי עבור צעד‬
‫האיטרציה הבאה נשתמש ב ‪ ' =‬‬
‫‪ ‬עבור גדול כלומר פיקסל רחוק המשקל שלה עולה‬

‫‪Non Local Means Filter‬‬
‫הרחבה ל ‪ .Bilateral Filter‬הרעיון הוא – אנו רוצים לתת ערך של לפיקסל בהתאם לממוצע של פיקסלים‬
‫הקרובים עליו או דומים לו‪.‬‬
‫ב ‪ bilateral Filter‬פיקסלים דומים הם פיקסלים בעלי אותו עוצמה ומקום‪ .‬ב ‪ NLM‬לוקחים מסביב לפיקסל‬
‫ריבוע ועושים ווקטור מעוצמות הפיקסלים שלייד ‪. V p‬‬
‫מחפשים פיקסלים ‪ q‬שהריבוע שסביבם‬

‫‪ V q‬קרוב‪.‬‬

‫‪1‬‬
‫ואז ערך הפיקסל הוא‪∑ G ∣∣V p −Vq∣∣ I q :‬‬
‫‪W p q ∈S ‬‬
‫לפיקסלים שהסיבבה שלהם דומה לפיקסל זה‪ .‬בפועל לא מבצעים חישוב של ‪ V q‬על כל הפיקסלים‬
‫בתמונה אלא רק בסביבה הקרובה מרחבית של הפיקסל ‪ – p‬אבל לכעורה אלגוריתם זה מתעלם מהמרחק‬
‫הגיאומטרי בין הפיקסלים‪.‬‬
‫‪‬‬

‫=‪ - ILMF p‬כלומר עושים ממוצע ממושקל בין היפקסל‬

‫נשים לב להבדל בין ‪ BF/WLS/RE‬לבין ‪ – LM‬הראשונים מניחים כי התמונה חלקה בעוד ש ‪ LM‬מניח‬
‫שלכל פטץ' בתמונה יש פטצ'ים דומים לו בתמונה‬
‫בדרך כלל משתמשים בריבועים של ‪ 5X5‬או ‪7X7‬‬

‫‪Scale Space‬‬
‫דרך נוספת להסתכל על תמונה‪ .‬נקח את התמונה ונעשה לה החלקה עם גאוסיאן נקבל ‪ stack‬של תמונות‬
‫כל אחת עם רמת החלקה אחרת‪.‬‬
‫לאחר מכן נחפש ‪Local Maxima‬‬
‫זו שיטה טובה לחפש ‪ ,Features‬לחפש את הסקאלות של ‪ Features‬בתמונה‪.‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪21.4.10‬‬

‫שיעור ‪Wavelets – 8‬‬
‫ושימושים בדיחיסת תמונה‬

‫פיתוח כהכללה של ‪Laplacian Pyramid‬‬
‫הרעיון הוא לקחת תמונה‪ ,‬לעשות ‪) downsampling‬נקרא ‪ .(Corse‬לאחר מכן ‪ upsampling‬ומחסרים‬
‫והתמונה החדשה את התמונה המקורית‪ ,‬שומרים את תמונת ההפרשים )נקרא ‪.(Fine‬‬
‫ניתן לעשות את התהליך שוב ושוב מתמונות ה ‪.corse‬‬
‫הדיחסה מתבצעת ע"י שמירת ה ‪ fine‬בלבד – זו היא מטריצה שרובה היא אפסים וחלק קטן ממנה מכיל‬
‫מידע‪.‬‬
‫הבעיה בפרמידות לפלס היא שעבור מתמונה ‪ n×n‬צריך לשמור ‪ n 3‬פיקסלים )עבור כל שכבה של‬
‫‪ – (downsampling‬נצטרך למצוא פיתרון יעיל יותר‪.‬‬

‫נפתח טרנספורם ‪Wavelet‬‬
‫נתחיל עם טרנספורם פשוט )עבור תמונה של ‪ 2‬פיקסלים( המעביר את הפיקסלים מהתמונה אל ה ‪wavelet‬‬
‫‪1 1 1‬‬
‫‪) . D−1‬הפאקטור‬
‫=‪ - D 1‬נשים לב שהמעבר ההפוך זהה להתמרה המקורית‬
‫‪1 = D1‬‬
‫‪ 2 1 −1‬‬
‫‪1‬‬
‫הוא בשביל שהבסיס יהיה אורטונורמלי(‬
‫‪2‬‬

‫]‬

‫[‬

‫נפעיל את האופרטור על תמונה ונקבל‪:‬‬

‫‪1 ab‬‬
‫‪a‬‬
‫‪= c‬‬
‫= ⋅‪ - D 1‬כאשר‬
‫‪b  2 a−b‬‬
‫‪d‬‬

‫][] [ ][‬

‫‪.wavelet‬‬

‫][‬
‫‪c‬‬
‫‪d‬‬

‫הינו התמונהב‬

‫‪ – C‬יהיה ה ‪ ,corse‬ו ‪- D‬יקרא ה ‪) detail‬יכיל את הפרטים ברזולוציה גבוהה(‪.‬‬
‫קוראים לחלק שהוא ‪ LPF‬בשם ‪ .Scaling Function‬ולחלק שהוא ‪ HPF‬קוראים ‪.Wavelet Function‬‬

‫בהכלל ל‪ M-‬איברים‬
‫בהינתן ] ‪ V [ M‬נקבל‬

‫‪1‬‬
‫‪1‬‬
‫‪V [2N]V [2N1] ; d [ N ]= V [2N ]−V [2N1] ; N =0,1,2... , N −1‬‬
‫‪2‬‬
‫‪2‬‬
‫כדי לשחזר יש להכניס )לדלל( ב‪ 0-‬גם את ‪ c‬וגם את ‪ .d‬להריץ ‪) LPF‬להפעיל את ‪ – C‬סכימה (על ‪ c‬וכן‬
‫‪) HPF‬להפעיל את ‪ - d‬חיסור( על ‪ d‬ולחשב את הסכום וההפרשים‪.‬‬
‫=] ‪c [ N‬‬

‫‪1‬‬
‫‪1‬‬
‫לדוגמה ]‪ c= [37 11 ...‬יהפוך ל ]‪[03 0 7 0 11 ...‬‬
‫‪2‬‬
‫‪2‬‬
‫‪1‬‬
‫כנ"ל לגבי ‪[0−1 0−1 0−1...] ) d‬‬
‫‪2‬‬
‫לפי ‪. V =LPF c −HPF d ‬‬

‫)הכללה מטריציונית‪:‬‬

‫]‬

‫‪0 0‬‬
‫‪1 1‬‬
‫‪0 0‬‬
‫‪1 −1‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫ולאחר מכן‬

‫‪1‬‬
‫]‪LPF c= [3,3,7,7....‬‬
‫‪2‬‬

‫‪1‬‬
‫]‪( HPF d = [1−11−1...‬ואז התמונה המקורית תתקבל‬
‫‪2‬‬

‫[‬

‫‪1 1‬‬
‫‪1 0 0‬‬
‫= ‪( D2‬‬
‫‪ 2 1 −1‬‬
‫‪0 0‬‬

‫במספר רזויולציות לוקחים את תמונת ה ‪ LPF‬ומבצעים עליה את אותו התהליך ואז מקבלים תמונות במספר‬
‫רזולוציות‪.‬‬
‫כדי לעבור לתמונות דו ממד יש לבצע את התהליך בכל מימד בנפרד )מימד ורטיקלי והרוזנטלי(‪.‬‬
‫כאשר באיטרציה הבאה לוקחים את הרביע של התמונה שהוא ‪ LowPass‬בציר ‪ X‬ובציר ‪ Y‬ועליה מבצעים‬
‫שוב את הפירוק‪.‬‬

‫‪LH‬‬
‫‪HH‬‬

‫‪L‬‬
‫‪L‬‬
‫‪H‬‬
‫‪L‬‬

‫‪L‬‬
‫‪H‬‬
‫‪H‬‬
‫‪H‬‬

‫‪LH‬‬

‫‪LL‬‬

‫‪HL‬‬

‫‪HH‬‬

‫‪HL‬‬

‫‪Original‬‬
‫‪Image‬‬

‫נשים לב שב ‪ Wavelet‬גודל התמונה נשמר )בניגוד לפרמידות לפלס( )פירוק זה נקרא ‪(Harwavelet‬‬

‫הסתכלות נוספת‬
‫נסתכל על סיגנל חד ממדי בקטע ) ‪ [ 0, 1‬נפרק אותו באופן הבא‪:‬‬
‫•‬

‫לפונקציה קבועה בקטע ) ‪ - [ 0, 1‬נקרא לפונקציה זו ‪, V 0‬‬

‫•‬

‫לפונקציה ‪ peasewise constant‬בקטעים ]‪) [0,1/2] ,[1 /2,1‬תמונה של ‪ 2‬פיקסלים( פונקציה זו‬
‫תקרא ‪V 1‬‬

‫•‬

‫וכן הלאה‬

‫מתקיימים הקשרים ‪ V 1=V 0W 1 ; V 2=V 1W 2‬כאשר נקרא ל ‪ V‬כ ‪ scaling‬ול ‪ w‬נקרא ‪wavelet‬‬

‫בצורה יותר פורמלית‬
‫עבור תמונות חד ממדיות‪ ,‬נתייחס לתמונה כפונקציה הקבועה למקוטעין בקטע ]‪. [0,1‬‬
‫תמונה של פיקסל אחד היא פונקציה קבועה על המקטע‪ .‬את המרחב הווקטורי של כל הפונקציות הללו נסמן‬
‫ב ‪. V0‬‬
‫תמונה של ‪ 2‬פיקסלים מכילה ‪ 2‬ערכים קבועים במקטעים ]‪ . [0,1/2] ,[1 / 2,1‬מרחב הפונקציות הללו‬
‫יקרא ‪. V 1‬‬
‫בהכללה פונקציה בעלת ‪ 2 j‬מקטעים היא כל הפונקציות הקבועות למקוטעין ב ‪ 2 j‬מקטעים‪.‬‬
‫ניתן לראות כי המרחבים הווקטורים מקיימים‪:‬‬

‫‪j‬‬

‫‪. V 0 ⊂V 1⊂...⊂V 2‬‬

‫נמצא בסיס‬
‫נגדיר בסיס למרחב ווקטורי‬
‫הבסיס הטבעי יהיה‬

‫‪Vj‬‬

‫)בסיס זה נקרא ‪.(Scaling Function‬‬
‫‪ e ij  x= 2 j x−i‬כאשר ‪  x={ 1 0≤x1‬‬
‫‪0 otherwise‬‬

‫‪i=0,... , 2 j−1‬‬

‫לדוגמה ‪e 10 ; e 11‬‬

‫‪e‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪e‬‬

‫‪X‬‬

‫‪1‬‬

‫‪1/2‬‬

‫‪X‬‬

‫‪1/2‬‬

‫נגדיר מרחב ווקטורי ‪ w j‬כמשלים האוגתוגונלי )‪ (orthogonal complement‬של‬
‫נגדיר בסיס ל ‪: W j‬‬
‫•‬
‫•‬

‫‪ V j‬ל ‪V j 1‬‬

‫‪ ij  x‬ונקרא לו בסיס ‪) wavelets‬גלונים( כך ש‪:‬‬

‫אברי הבסיס ‪ ij‬יחד עם ‪ e ij‬מהווים בסיס ל‬
‫כל פונקציות הבסיס‬

‫‪v j 1‬‬

‫‪ ij‬אורתוגונליות לאברי הבסיס של המרחב‬

‫נגדיר ‪ Hear Wavelet‬באופן הבא‪:‬‬

‫‪) v j‬לפי מכפלה פנימית(‬

‫‪1 0≤ x1/2‬‬
‫‪ij = 2 j x−i ;  x={ −1 1/2≤x1‬‬
‫‪0 otherwise‬‬

‫‪e0‬‬

‫‪psi0‬‬

‫בדוגמה הקודמת‬

‫‪X‬‬

‫‪1‬‬

‫‪1/2‬‬

‫‪X‬‬

‫‪1/2‬‬

‫נוכל לראות בדוגמה מספרית כי כאשר מפרקים תמונה לסכום‬
‫‪ . I = e00  x00  00  x 10 10  x11 11  x‬כאשר האיברים שבסוף הטור הולכים ל‪ ,0-‬ניתן לזרוק‬
‫אותם ולקבל דחיסה )תחת ההנחה כי התמונה היא ‪(peaswise smooth‬‬

‫הסתכלות נוספת על ‪ – Wavelets‬באמצעות פילטרים לתמונה‬
‫נניח תמונה ‪ ,m‬כאשר ‪ c‬הוא ‪ Course level‬ו ‪ f‬הוא ה ‪ . f =m−c :fine level‬כאשר ‪U) c=U⋅D⋅m‬‬
‫הינה מטריצה שבאמצעותה עושים ‪ ,upsampling‬וכן ‪ D‬היא מטריצת ה ‪(downsampling‬‬
‫המכפלה ‪ UD‬מגדירה את סוג ה ‪.wavelet‬‬
‫במקרה האידיאלי נרצה ‪) D⋅U = I‬המכפלה שלהם תהיה מטריצת היחידה(‪.‬‬
‫אנחנו יודעים כי ‪ UD2=UDUD=U  DU  D‬ולכן‬
‫‪ UD f =DUM −U DUD M =UDM −UD M =0‬כלומר ‪ f‬נמצא ב ‪ nullspace‬של ‪UD‬‬
‫)הטרנספורמציה ‪ UD‬שולחת את ‪ f‬ל‪ 0-‬ולכן ‪ f‬אורטוגונלי למרחב שפורש את ‪(UD‬‬
‫לעבור על השקפים באתר‬

‫תכנון פילטר‬
‫נסתכל על פילטר ‪ [a , b , c , d ] scaling‬להשלים‪.‬‬

‫נרצה כי הטרנספורם יקיים )‪UD=I (U-upsampling matrix, D -downsampling matrix‬‬
‫בנוסף נוסיף אילוצים ל‪..‬‬
‫להשלים‬
‫וקיבלנו פילטר‪.‬‬
‫הפילטר הזה יותר טוב כי הוא יותר חלק מ ‪) haar‬שינויי קטן בתמונה לא גורר איברים גבוהים בייצוג של ה‬
‫‪ wavelet‬כמו שבשקף הראשון שבמצגת(‬

‫הוצעת רעשים באמצעות ‪Wavelet‬‬
‫הרעיון הוא הקטנה של הערכים ב ‪ wavelet‬לכיוון ה‪ 0-‬לכל המקדמים בבת אחת‬
‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫תכנון ‪ Wavelet‬מודרני – ‪The Lifting Scheme‬‬
‫בניגוד לתכנון שעשו עד כה והוא להוסיף אילוצים עד שיוצאת מטריצת ‪ wavelet‬טובה‪.‬‬
‫עתה נקח ‪ x‬ווקטור בגודל‬

‫‪ N =2n‬איברים‪ .‬נסמן ‪P G 0= x‬‬

‫עתה נבחר רק את האיברים הזוגיים שב ‪P G 0‬‬
‫‪. P G 1=P even‬‬
‫ונקרא להם‪G 0 :‬‬
‫‪even‬‬
‫‪ f  P G 1≈ P odd‬ונחשב את‬
‫עתה נשתמש באיברים שב ‪ P G 1‬כדי לנבא את‬
‫‪G 0 : P G 0‬‬
‫השגיאה‪. P W  0=PGodd 0− f  PG 1 :‬‬

‫‪. f  P G 1= PG 1‬‬

‫דוגמה לניבוי טריוויאלי הוא ‪ nearest nabor‬ואז‬

‫‪L‬‬

‫כעת ניתן להגדיר פונקציות ‪prediction‬‬

‫]‪w [k ]= x odd [ k ]− ∑  k x even[ k − j‬‬

‫‪ f‬טובות יותר‪ ,‬למשל‪:‬‬
‫‪2‬‬

‫כאשר נרצה לבחור מקדמים ‪ ‬כך שנקבל מנימיזציה על ‪:w‬‬

‫]‬

‫‪j=− L‬‬
‫‪L‬‬

‫[‬

‫‪N/2‬‬

‫]‪min ∑ x odd [ k ]− ∑  j xeven [ k− j‬‬
‫‪j=− L‬‬

‫‪1,. .n k=1‬‬

‫אחרי שחשבנו את ‪ 1,. .. , n‬עבור הרמה הראשונה‪ ,‬נוכל למחזר את אותם המקדמים בשביל לדחוס את‬
‫הרמה השניה וגודל התמונה קטן בחצי שוב‪.‬‬
‫שיפור נוסף הוא‪ ,‬לאחר שמצאנו את המקדמים‪ ,‬נוכל לעדכן את ה ‪ x even‬לפי ‪. x even ' =x even g w‬‬
‫הרעיון בצעד זה הוא להיטיב את האות ‪ x even‬לפני סיום החישוב כדי שיהיה חלק יותר ולכן בעל פוטנציאל‬
‫דחיסה טוב יותר‪.‬‬
‫אם נניח שפונקציית החיזוי ‪ f‬והתיקון ‪ g‬הן לינאריות נקבל )במקום ‪ f‬נכתוב ‪) P‬לשם ‪ (Predict‬במקום ‪g‬‬
‫נכתוב ‪) U‬לשם ‪ (Update‬ואז‪ w= X odd −P X even :‬וכן‬
‫‪. X even '= X even U w= X even U x odd −UP X even‬‬
‫ובכתיב מטריציוני‪:‬‬

‫] []‬
‫‪X odd‬‬
‫‪X even‬‬

‫‪−P‬‬
‫‪I −UP‬‬

‫[] [‬

‫‪= I‬‬
‫‪U‬‬
‫' ‪x even‬‬
‫‪w‬‬

‫‪ -‬כלומר אנחנו עוברים מבסיס לבסיס יותר קומפקטי‪.‬‬

‫לכעורה היה ניתן להשתמש ב ‪ PCA‬במקום הפונקציות הלינאריות‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫שיעור ‪9‬‬
‫‪Scale Space‬‬
‫מה ניתן לעשות באמצעות ‪?Scale Space‬‬
‫•‬

‫‪Edge detection‬‬

‫•‬

‫‪ – Blob detection‬למעשה כל ‪ Edge‬כשמסתקלים עליו מרחוק נראה כמו ‪Blob‬‬

‫•‬

‫‪ – Anisotropic Diffusion‬שיטה של החלקה ביחד עם ‪ .edge detection‬בסוף השיעור נקשור את‬
‫‪ Anisotropic Diffusion‬עם ‪ Robust Statistics‬ו ‪) Line Process‬בדומה ל ‪.(bilateral filter‬‬
‫הראנו בעבר קשר בין ‪ Bilateral Filter‬ל ‪ Robust Statistics‬ולכן נוכל לחשוב על ‪Anisotropic‬‬
‫‪ Diffusion‬כי ‪Bilateral Filter‬‬

‫כל הדוגמאות יהיו בסיגנל חד ממדי‬

‫‪Edge Detection‬‬
‫)‪I(X‬‬

‫נניח אות‪ ,‬ונסתכל על הנגזרת והנגזרת השנייה‬
‫בשיטת ‪Zero-crossing‬‬

‫בפועל משתמשים בשיטת ‪ – LOG – Laplacian of Gausian‬קודם‬
‫מחליקים את התמונה עם גאוסיאן ואז עושים לפלסיאן?‬

‫)‪I’(X‬‬

‫לוקחים תמונה מריצים עליה נגזרת שנייה )לפלסייאן( ומחפשים פיקסלים‬
‫שבהם הנגזרת מתאפסת )פיקלים סמוכים שהלפלסיאן שלהם עם סימן‬
‫הפוך‬

‫‪X‬‬

‫‪X‬‬
‫)‪I’’(X‬‬

‫למה? כדי שרעש לא יכניס לנו ארטיפקטים‪.‬‬
‫בפועל הפעלה של גאוסיאן או החלקת התמונה קובעים את הסקאלה )‬
‫‪.(Scale space‬‬
‫‪X‬‬

‫מהלינאריות של גזירה ולפלסיאן ניתן ליצור אופרטור בודד ‪ LOG‬שאותו מריצים על התמונה‪ .‬בפועל ‪LOG‬‬
‫קצת מסובך למימוש ולכן מקרבים אותו ע"י ‪.DoG‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪Blob Detection‬‬
‫הטענה היא ש ‪ bolb‬הוא ‪ edge‬שמסתכלים עליו מרחוק‪:‬‬

‫)‪I(X‬‬

‫‪X‬‬
‫)‪I’’(X‬‬

‫)‪I’’(X‬‬

‫‪X‬‬

‫)‪I(X‬‬

‫‪From Far away‬‬

‫‪X‬‬

‫‪X‬‬

‫!‪Blob Detected‬‬
‫ה ‪ blob‬מתקבל כ נגזרת שנייה שלילית מאוד חזקה בנקודה שבה נמצא מרכז ה ‪) blob‬כלומר ה ‪ blob‬הופך‬
‫ל ‪ ,(Edge‬כמה היינו צריכים לטשטש כדי לקבל את המינמום החזק )סקאלת השטשוט( מגדיר את גודל ה‬
‫‪.blob‬‬
‫למה ‪ Blob‬יותר חשוב מ ‪ ?edge‬כי ‪ Blob‬מגדיר שטח – נוכל לסמן בלובים בתמונות שאותו העצם מופיע‬
‫בשתיהם )בלי קשר לגודל של התמונה( אחרי שזהינו בלוב עם שטח ב ‪ 2‬תמונות בגדלים שונים – נוכל‬
‫לנרמל את הגודל של התמונות וגם נוכל לזהות ‪) Features‬למשל במאמר ‪(Recognizing Panoramas‬‬
‫אבל ‪ Blob‬הופך ל ‪ edge‬בסקאלות גדולות ולכן אם יש לנו ‪ 2‬קלים אחד מטשטש ואח מוצא ‪ edge‬נוכל‬
‫למצוא ‪Blob‬‬
‫עד פה עשינו ‪ – Linear scale space‬הבעיה ב ‪ linear Scale Space‬היא שה ‪ Edge‬זז כאשר מחליקים‬
‫יותר ויותר‪ .‬בנוסף התמונה נעשת חלקה יותר ויותר קשה למצוא בה ‪.edge‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪Anisotropic Diffusion – Image Denoising‬‬
‫הרעיון – טישטוש של תמונה דומה למשוואת החום – איך חום מתפשט במישור‬
‫החידוש‪ :‬משתמשים במשוואת החום )משוואת הדיפונזיה(‪ - I t=div c ∇ I =c  I :‬כאשר ‪ I‬עוצמת‬
‫הפיקסל‪ t ,‬הוא האיטראציות של הטישטוש‪.‬‬

‫הבעיה היא "ביצה ותרנגולת" אם היינו יודעים איפה ה ‪ edge‬לא‬
‫היינו צריכים את האלגורתים הזה‪ .‬ולכן סקיצת האלגוריתם היא‪:‬‬

‫‪C=1‬‬

‫)‪I(X‬‬

‫במאמר שלהם הם בצעו שינוי קטן ואמרו‪:‬‬
‫‪ - I t=div c  x , y , t ∇ I ‬מה הוא השוני? הקבוע ‪ c‬תלוי‬
‫במיקום הפיקסל והאיטראציה‪ .‬הרעיון הוא שבסביבת ‪ edge‬נדרוש‬
‫‪ c=0‬ולכן נמנע מהטמפרטורה של הפיקסל )עוצמת הבהירות(‬
‫להמרח בין צדדי ה ‪ – edge‬בדומה ל ‪) bilateral Filter‬הרעיון הוא‬
‫למנוע מפיקסלים שאינם שייכים לאותם העצמים להתערבב(‬

‫‪C=0‬‬

‫‪C=1‬‬

‫‪X‬‬

‫האלגוריתם ‪ P-M‬לבעיית ‪Image Denoising‬‬
‫•‬

‫לשארך את מיקום ה ‪ edge‬באלגוריתם אחר )במקרה הזה ע"י נגזרת(‬

‫•‬

‫להחלקי על סמך המיקום המשוערך של ה ‪) edge‬ע"י קביעת ‪ c‬בכל נקודה(‬

‫•‬

‫לחזור לצעד ‪1‬‬

‫ולטענתם הקבוע ‪ C‬צריך להיות‬
‫הגרדיאנטים( ו ‪ g‬מהצורה‪:‬‬

‫‪) C=g ∣∣∇ I ∣∣‬כאשר הם מגדירים ‪ - ∇ I= E‬כאשר ‪ E‬היא תמונת‬

‫כלומר כאשר הנגזרת קטנה – אפשר להחליק ו ‪. g =1‬‬

‫‪g‬‬

‫‪1‬‬

‫בתחום הביינים לא בטוח אם ניתן להחליק ולכן ‪ g‬יקבל ערך ביניים‬
‫וכאשר הנגזרת גבוהה מאוד אזי בפרוש מדובר ב ‪ edge‬ולכן אסור‬
‫"לערבב" את ערך הפיקסלים‪g =0 :‬‬

‫||‪||E‬‬

‫תכונות של ‪Anisotropic Diffusion – AD‬‬
‫•‬

‫‪ – Causality‬לא נרצה שיווצרו ‪ edges‬חדשים כאילו שאינם נמצאים באיטראציה הקודמת‬

‫•‬

‫‪ – Localization‬נרצה שה ‪ edge‬ישאר במקום ולא ינדוד‬

‫•‬

‫להעדיף החלקה בתוך אזור על פני החלקה מעבר ל ‪edge‬‬

‫אנחנו נוכיח ש ‪ AD‬משפר ‪:edges‬‬
‫בלי הגבלת הכלליות נניח שה ‪ edge‬מקביל לציר ‪ .y‬כלומר‬

‫‪‬‬
‫‪ c  x , y , t I x ‬‬
‫‪x‬‬

‫=‪div  c  x , y , t ∇ I ‬‬

‫ונבחר את ‪ c‬באופן הבא‪. c  x , y ,t =g  I x  x , y , t :‬‬
‫נסמן ‪  I x =g  I x  I x‬ואז משוואת הדיפוזיה הופכת ל‪:‬‬
‫‪‬‬
‫‪‬‬
‫=‪c  x , y , t  I x ‬‬
‫‪ I x ='  I x  I xx‬‬
‫=‪. I t‬‬
‫‪‬‬
‫‪x‬‬
‫‪x‬‬
‫‪‬‬
‫אותנו מעניינת ההתנהגות של השפה‪ - t I x :‬נרצה לראות ש ‪ edge‬קטנה מתתשטשת ו ‪ edge‬גדולה‬
‫לא! נגזור את ‪ 2‬האגפים לפי ‪ x‬שוב‬
‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪2‬‬
‫בגלל ש ‪ I‬חלקה נחליף את סדר הגזירה‪I tx=I xt=  '  I x  I xx =' '  I x  I xx'  I x  I xxx :‬‬
‫‪x‬‬
‫‪ I =' I‬‬
‫‪xxx‬‬
‫בנקודה שבה יש ‪ edge‬בדיוק אזי ‪ I xx =0‬ולכן‬
‫‪t x‬‬
‫‪‬‬
‫משום ו ‪ , I xxx 0‬אם ‪ '  I x 0‬אזי ‪ t I x 0‬והביטוי של ה ‪ edge‬ילך ויקטן‪.‬‬
‫‪‬‬
‫לאומת זאת אם ‪ '  I x 0‬אזי ‪ t I x 0‬והביטוי של ה ‪ edge‬ילך ויגדל‪.‬‬

‫‪" ‬טוב" יראה כך‪:‬‬

‫‪x2‬‬
‫‪K2‬‬

‫‪1‬‬

‫)‪Phi(x‬‬

‫‪1‬‬

‫=‪ x= g  x ⋅x ; g  x ‬‬

‫‪.‬‬

‫הרעיו הוא‪ ,‬עבור ‪ edge‬קטנים הנובעים מרעש )‪ x‬קטן( הנגזרת של‬
‫‪ ‬חיובית ולכן ה ‪ edge‬ידאך‪.‬‬
‫עבור ‪ K‬גדולים הנגזרת של ‪ ‬שלילי וה ‪ edge‬יתחזק‪.‬‬

‫‪X‬‬

‫‪k‬‬

‫עדיין יש למצוא שיטה טובה למצוא את ‪ – K‬אחת השיטות היא להניח ש ‪ 90%‬מה ‪ edge‬שבתמונה‬
‫המקורית הם רעש ולכן ‪ K‬יהיה האחוזון ה ‪ 90%‬של עוצמות ה ‪ edge‬בתמונה המקורית‪.‬‬
‫עד פה החלק האלגנטי‪ ,‬יישנם ויקוחים לגבי באיזה פונקציה ‪ g‬יש להשתמש‪.‬‬

‫דסקרטיזציה של התהליך‬
‫נבצע דסקרטיזציה של המשוואה‪ I t=div c  x , y , t ∇ I  :‬היא‪:‬‬
‫‪t‬‬
‫‪t‬‬
‫‪ I it1‬כאשר ‪ I N‬הינה הנגזרת הצפונית של המטריצה ‪:I‬‬
‫‪, j =I i , j [ C N I N C S I S C E I E C W I W ]i , j‬‬
‫‪t‬‬
‫‪t‬‬
‫‪t‬‬
‫‪t‬‬
‫‪ , I N = I i−1, j −I i , j‬וכן ‪ C‬הוא המקדם ; ‪- C N - C N =g ∣I N∣‬הנגזרת הצפונית של המקדם ‪,C‬‬
‫‪- C S‬הנגזרת הדרומית‬
‫‪i,j‬‬

‫‪i, j‬‬

‫הבדל בין ‪ AD‬ל ‪bilateral Filter‬‬
‫נסתכל על ‪ 2‬התמונות הבאות‪:‬‬
‫בתמונה ‪ A‬שתי השיטות נותנות אותה תוצאה אבל בתמונה ‪ B‬הפילטר ‪ AD‬לא יערבב‬
‫בין הלבן של צד ימין והלבן של צד שמאל אלא יעצר בגבול השחור באוד ש ‪ BF‬יכול‬
‫לערבב בצבעים של ‪ 2‬התמונות כי הם "קרובים"‬

‫עתה נקשור ‪ Rubust Statistics‬ו ‪AD‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪A‬‬

‫‪B‬‬

‫‪Robust Statistics‬‬
‫‪ RS‬פותר את הבעיה הבאה‪:‬‬

‫‪∑ ∑  I p−I s ,‬‬
‫‪ - min‬כאשר‬
‫‪I s ∈I P ∈ N  s‬‬

‫‪ ‬היא פונקציה שגיעה עמידה‬

‫)כמו חציון בניגוד לממוצע – חציון פחות רגיש לרעש( ‪ Rubost‬ו ‪ ‬הוא פרמטר סקאלה‪.‬‬
‫‪. N  s‬‬

‫פרשנות‪ :‬לכל פיקסל ב ‪ I‬נרצה למזער את ההפרש בין פיקסל זה לשכינים שלו‬

‫אם העולם היה שמח ולא היו קצוות אזי ‪ least square‬היה פותר את זה מאוד פשוט אבל כן יש קצוות‬
‫וצריך להתפשר‪.‬‬
‫‪‬‬
‫‪ Robust‬פותר את הבעיה ב ‪ I s −I p ,   .gradient discent‬‬
‫∑∈‪∣N  s∣ p‬‬
‫‪N  s‬‬
‫כאשר‬

‫∣‪ ∣N s ‬הינו גודל "הסביבה" של ‪ ,s‬והפונקציה‬

‫דוגמאות‬

‫‪t‬‬
‫‪I t1‬‬
‫‪s =I s‬‬

‫'‪ =‬הינה ‪ influence function‬של הפיקסל‪.‬‬

‫‪‬‬
‫‪2‬‬

‫לדוגמה עבור ‪ - = x‬כלומר פותרים עבור ‪ least square‬נקבל ‪ . = x‬ולכן עבור ‪ outlier‬גדולים‬
‫מאוד אזי ‪ ‬גם תהיה מאוד גדולה והיא תתן משקל גדול מאוד ל ‪ – out-lier‬לכן ‪ least square‬הוא לא‬
‫רובוסטי‪.‬‬
‫דוגמה כן רובוסטית היא הלורנציאן )‪:(Lorenzian‬‬
‫‪2‬‬
‫‪2x‬‬
‫‪ x ,  = 2 2 ,  x , =log 1 1 x‬‬
‫‪2 x‬‬
‫‪2 ‬‬

‫‪psi‬‬

‫‪Y‬‬

‫‪X‬‬

‫‪Y‬‬

‫]‪[  ‬‬

‫פונקציה זו תתן משקל גדול לפיקסלים הקרובים בערך אבל‬
‫החל משגיאה גבוהה מדיי )בערך ‪ ( ‬הפונקציה נותנת‬
‫משקל קטן יותר ויותר לפיקסל‪.‬‬

‫‪rho‬‬

‫‪X‬‬

‫נראה שקילות מ ‪ AD‬ל ‪Robust Statistics‬‬
‫‪RS‬‬

‫‪AD‬‬

‫‪min ∫  ∣∣∇ I ∣∣ d ‬‬

‫‪I t=div c  x , y , t ∇ I ‬‬

‫‪‬‬

‫‪‬‬

‫‪∇I‬‬
‫∣∣‪∣∣∇ I‬‬

‫אם נגזיר‬

‫‪I‬‬

‫‪‬‬

‫‪I t=div  ' ∣∣∇ I ∣∣‬‬

‫‪' x‬‬
‫‪x‬‬

‫‪Objective function‬‬

‫‪I t=div  g ∣∣∇ I∣∣⋅∇ I ‬‬

‫=‪ g  x‬נקבל כי ‪ 2‬השיטות שכולות )כאשר‬

‫‪Gradient Descent Solver‬‬

‫‪(  x= '  x =g  x‬‬

‫‪‬‬
‫לפי ‪∑ g  ∇ I s , p  ∇ I s , p :AD‬‬
‫‪∣N  s∣ p∈ N  s‬‬
‫של ‪) p‬כלפי מעלה או מטה או ימינה או שמאלה בהתאם למיקום הפיקסל ‪(P‬‬

‫‪t1‬‬
‫‪t‬‬
‫‪) I s =I s‬כאשר ‪ ∇ I s , p‬הינה הנגזרת של פיקסל ‪ s‬בכיוון‬

‫‪‬‬
‫‪t‬‬
‫‪t‬‬
‫ובניסוח של ‪ I p −I s ,  :RS‬‬
‫∑‬
‫‪∣N  s∣ p∈ N  s‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪t‬‬

‫‪t1‬‬

‫‪. I s =I s‬‬

‫‪1‬‬
‫נוכל גם להראות כי עבור‬

‫נבחר ‪ K 2=2  2‬ונציב‬

‫‪x2‬‬
‫‪K2‬‬

‫=‪g  x‬‬

‫‪1‬‬

‫שהוצג ע"י ‪) P-M‬ב ‪ (AD‬מתקבל הלורנציאן בניסוח של ‪.RS‬‬

‫‪2x‬‬
‫‪= '  x ,‬‬
‫‪x2‬‬
‫‪2 2‬‬
‫‪‬‬

‫=‪= g  x ⋅x‬‬

‫נבצע אינטגרציה ונקבל כי‬

‫‪  x‬הוא‬

‫הלורנציאן‬
‫כלומר הלורנציאן ב ‪ RS‬הוא הניסוח שעשו ‪ P-M‬ב ‪.AD‬‬
‫למה דווקא הלורנציאן? אוליי יש פונקציות יותר טובות? ב ‪ RS‬ניתן "להנדס פונקציות" ע"י מחשב כמה‬
‫משקל לתת ל ‪ ,outliers‬האם להדאיך אותם וכמה מהר– ואכן מצאו פונקציות טובות יותר למשל ‪Tukey‬‬
‫‪biweight function‬‬
‫ניתן להשתמש ב ‪ RS‬בשביל למצוא קצוות‪ ,‬קצוות ב ‪ RS‬הם למעשה ‪.outliers‬‬
‫נוכל להוציא את מיקום הקוות ע"י סימון של ה ‪) outliers‬למשל ע"י סף על‬

‫‪1‬‬
‫‪x‬‬

‫(‬

‫כמה איטרציות לעשות ב ‪ ?gradient descent‬ע"פ פרון מליק )‪ (PM‬כמות האיטרציות משנה – בגלל שה‬
‫‪ outliers‬לא מקבלים משקל ממש ‪ 0‬אלא משקל קרוב ל ‪) 0‬לפי הלורנציאן( הם בסוף יפעפעו ויהרסו את‬
‫התמונה‪ ,‬בעוד ששימוש ב ‪ Tukey‬לא מאפשר ל ‪ outliers‬להכנס‪.‬‬

‫‪Line Process‬‬
‫‪ RS‬ממזער‬

‫‪E  I s‬‬
‫∑=‪ E  I ‬כאשר‬
‫‪s‬‬

‫‪) E  I s = ∑  I p−I s ,‬נזכור כי ‪N  s‬‬
‫‪p ∈ N  s‬‬

‫הוא הסביבה‬

‫של ‪(s‬‬
‫הגדרה שקולה היא ההגדרה הבאה‪:‬‬

‫‪‬‬

‫‪1‬‬
‫‪ I p – I s 2 l spP l sp‬‬
‫‪2 2‬‬

‫‪‬‬

‫∑‬

‫‪p ∈ N  s‬‬

‫‪ , E  I , l=∑ E  I s , l‬כאשר‬
‫‪s‬‬

‫=‪E  I s ,l ‬‬

‫כלומר נקח את התמונה ונחפש בה ‪ edges‬כאשר ‪ l‬הוא האינדיקטור שלנו ‪ 0≤l≤1‬האם יש גבול בין ‪s‬ו‬
‫‪) .p‬אם ‪ l‬קרוב ל‪ 0-‬אזי יש‪ ,‬אם ‪ l‬קרוב ל ‪ 1‬אז אין ‪(edge‬‬
‫‪ P‬הינה פונקציית עונש שמשלמים על הגדרת ‪ edge‬והוא הולך ל‪ 0-‬כאשר ‪ l‬הולך ל ‪) 1‬ו ‪ p‬הולכת ל‪ 1-‬כאשר‬
‫‪ l‬הולך ל ‪(0‬‬
‫הסבר נוסף‪ :‬אם נחליט שיש קו בין ‪ s,p‬אזי )‪ 0‬הוא ‪ (1‬אזי מתאלמים מהפרש הפיקסלים‬
‫‪1‬‬
‫‪2‬‬
‫‪ I p – I s  l sp 0‬‬
‫אבל משלמים משקל ‪.p‬‬
‫‪2‬‬
‫‪2‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪5.5.10‬‬

‫שיעור ‪10‬‬
‫עיבוד טקסטורות – מבוא‬
‫‪Image in-Painting‬‬
‫בתמונה נתונה עם חור ‪ ‬והשפה‬

‫‪ ‬נרצה למלא את המקום החסר בצורה “משכנעת”‪.‬‬

‫אינטואיטיבית‪ :‬אנו רוצים להמשיך קווי ‪ Isophote‬לתוך החור בצורה חלקה )כלומר נרצה למלא את החור‬
‫בטקסטורה וגבולות נכונים(‬
‫מה ההבדל בין ‪ Image in Paining‬או ‪ Texture Synthasis‬ל ‪?image denosing‬‬
‫כאן בניגוד ל ‪ – image denoising‬זה לא שמנסים להוריד את כמות הרעש אלא אין ידע לגבי החור‪ ,‬יש‬
‫יותר מתשובה נכונה אחת‪.‬‬

‫שיטת ‪PDE – Partial Defferential Equation‬‬
‫נבנה משפחה )סידרה( של תמונות ‪ I i , j , n :M ×N ℝ‬כאשר ‪ I i , j , 0‬היא התמונה המקורית‬
‫ו ‪ lim n  ∞ I i , j , n = I R i , j‬ו ‪ I R i , j‬היא התמונה המשוחזרת‪.‬‬
‫בכל צעד זמן נעדכן את הפיקסלים בחור‪. I n1 i , j = I n i , j t I nt i , j ; ∀ i , j∈ :‬‬
‫תמונת העדכון ‪ - I nt = Ln i , j N n i , j‬כאשר ‪ L‬הוא האינפורמציה‬
‫שרוצים להוסיף ו ‪ N‬הוא הנורמל‪.‬‬
‫בעצם נרצה להטיל את האינפורמציה )חלקות‪ ,‬שפה וכו( שנוספת בניצב לחור‪.‬‬

‫‪L‬‬

‫מה שיקרה הוא שבכל איטרציה אנחנו מקטינים מאט את גודל החור עד שהוא‬
‫נעלם‪.‬‬

‫‪N‬‬

‫‪f‬‬

‫נבחר לדוגמה את ‪ – L‬האינפורמציה להיות חלקות התמונה )הלפלאסייאן(‪:‬‬
‫‪. L n i , j=I nxx i , jI yy i , j ‬‬
‫איך נגדיר את כיוון הנורמל? הנורמל לא צריך להיות בניצב לחור אלא‬
‫בכיוון הגרדיאנטים שבתמונה‪.‬‬

‫‪f‬‬

‫‪f‬‬

‫בדוגמה ניתן לראות מה יקרה אם פעפע את הגבול בניצב לשפה ולא‬
‫בדרך הנכונה )משמאל לפני השלמת החור ומימין לאחר השלמת החור(‬
‫ובדרך הנכונה‪:‬‬
‫‪f‬‬

‫‪f‬‬

‫האלגוריתם המלא‬
‫‪ Ln i , j⋅N i , j , n‬‬
‫נבחר ∣‪∣∇ I n i , j‬‬
‫∣∣‪∣∣N i , j , n‬‬
‫] ‪ -  Ln i , j=[ L n i1, j− Ln i−1, j , Ln i , j1− Ln i , j−1‬זה הגרדיאנט באזור השפה וכן‬
‫‪n‬‬
‫=‪ . I t i , j‬כאשר‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪n‬‬
‫‪n‬‬
‫] ‪N i , j , n [ −I y i , j , I x i , j‬‬
‫=‬
‫ זה הנורמל לגרדיטנט בתמונה‪ .‬כמו כן נגדיר‪:‬‬‫‪∣∣N i , j , n∣∣  I nx i , j2 I y i , j2‬‬
‫‪ L n i , j⋅N i , j , n‬‬
‫‪n‬‬
‫=‪.  i , j‬‬
‫∣∣‪∣∣N i , j , n‬‬

‫את ∣‪∣∇ I n i , j‬‬

‫נגדיר כ‪:‬‬

‫‪n0‬‬
‫‪n‬‬

‫‪ 0‬‬

‫‪2‬‬

‫‪  I xfM   I ybM   I yfM ‬‬
‫‪∣∇ I n i , j∣={  I xbM‬‬
‫‪n‬‬
‫‪2‬‬
‫‪n‬‬
‫‪2‬‬
‫‪n‬‬
‫‪2‬‬
‫‪n‬‬
‫‪2‬‬
‫‪n‬‬

‫‪2‬‬

‫‪n‬‬

‫‪2‬‬

‫‪n‬‬

‫‪n‬‬

‫‪2‬‬

‫‪  I xfm   I ybm   I yfm ‬‬

‫‪xbm‬‬

‫‪ I‬‬

‫אינדקס‪ – m :‬מינימום בין הנגזרת לבין ‪ – M ,0‬מקסימום בין הנגזרת ל‪ f .0-‬נגזרת קידמית‪ b ,‬נגזרת‬
‫אחורית‪.‬‬
‫איבר זה הוא רק לשם הגדלת ייציבות נומרית‪.‬‬
‫כל פעם מתקדמים פיקסל אחד או ‪ 2‬לתוך החור ועוברים לאיטרציה הבאה‬
‫נשים לב כי אנחנו מתקדמים מהקצוות כלפי פנים – מי מבטיח שזה "יסתדר" במרכז? ‪-‬אף אחד‬
‫התהליך הזה הוא לקולי השיפור במילוי החור הוא לוקלי אבל כמו ב ‪ – Anisotropic Diffusion‬מבצעים‬
‫שינויים לוקאלים ובסוף מקבלים שיפור גלובלי‪.‬‬
‫המשוואה ה ‪ PED‬שאנחנו פותרים היא דומה ל ‪) Fluid Dynamics‬כמו ש ‪Anisotropic Diffusion‬‬
‫משתמש במשוואת החום( מתייחסים לעוצמת הפיקסלים כזרמים‪.‬‬

‫‪Texture Analysis - Syntheses‬‬
‫הרעיון הוא להסתכל על ‪ 2‬חלקים של טקסטורה ולהחליט האם הטקסטורות דומות או שונות‪ .‬נעשה זאת‬
‫כדי לסמן למשל גבולות – לא למצוא ‪ edge‬בתמונות במובן של פיקסלים אלא ‪ edge‬בין טקסטורות‪.‬‬
‫נוכל לעשות זאת באמצעות פילטר למשל‪ ,‬נוכל לעשות זאת באמצעות מספר )בנק( פילטרים ואז לעשות‬
‫‪ Matchine Learning‬בשביל להפריד בין טקסטורות שונות‪.‬‬
‫נוכל לעשות גם את הדבר ההפוך ‪ Texture Syntheses‬ולהפעיל את אותם הפילטרים על תמונת רעש‬
‫באמצעות ‪ Histogram Match‬ולקבל טקסטורה בכמות שרוצים – התוצאה אומנם לא משהו‪ ..‬למה?‬
‫אנחנו מתעלמים מהיחסיים המיקומיים שבין הפיקסלים ואנחנו יכולים לקבל ‪) artifacts‬עושים ‪Marginal‬‬
‫‪(Statistics‬‬
‫שיטה אלטרנטיבית נסתכל על הפרמידה של תמונת הרעש )‪ (Synthesis‬ותמונת המקור )‪(Analysis‬‬
‫נבנה מסלולים לאורך הפרמידה )כמו פרמידת לפלסיאן( ונחפש ב ‪ synthesis‬מסלולים דומים מ ‪analysis‬‬
‫ונבחר את ערך הפיקסל ברמה הבאה בפרמידה )את ‪ Synthesis‬יוצקים מהרמה הגבוהה כלפי מטה‪,‬‬
‫‪ Analysis‬מלמטה למעלה( כהגרלה מתוך המבנים הקרובים‪.‬‬
‫כלומר מחשבים מרחק בין המסלולים ‪) D ui , v i ‬הסף‬
‫‪ ‬הינו פרמטר( ואז ערך הפיקסל ברמה הבאה של היציקה‪:‬‬
‫}‪C={ v i∣ Dv i , ui ‬‬
‫שיטה זו היא ‪.Conditional Statistics‬‬
‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪Analyisis‬‬

‫‪Synthesis‬‬

‫‪Nonparametric Sampling‬‬
‫נפתור את בעיה ‪ Texture Synthesis‬בשיטה אחרת‪ .‬נסתכל על בעיה דומה‪ :‬תחזית מזג האויר‪.‬‬
‫נניח כי נתון מזג האוויר היום ונרצה לנבה את ערכו מחר‪.‬‬
‫נוכל לבנות אלגוריתם המשתמש במידע היסטורי בשביל לבנות אוסף של הסתברויות מותנות‬
‫‪ . P  rain tommrow∣sun today ,...‬ובהינתן מזג האויר היום נחבר את ההסתברות שמביאה למקסימום‬
‫אפוסטריורי )‪.(MAP‬‬
‫ההנחה הסמוייה כאן היא שרשרת מרקוב – לא מעניין מה קרה לפני אתמול – אבל אם כן היה מעניין אותנו‬
‫‪ n‬דגימות אחרונות יכולנו לעשות חיזוי טוב יותר‪.‬‬
‫בנושא של עיבוד תמונה נבחר ‪ Patch‬מסביב לפיקסל ונראה לאיזה פיקסלים אחרים יש ‪ Patch‬דומים‬
‫ונבצע השלמה באותו האופן – כמובן שגודל ה ‪ patch‬חשוב מאוד!!!‬

‫אופטמיזציה באמצעות ‪Image Quilting – Efros, Freeman‬‬

‫‪B‬‬

‫‪A‬‬

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

‫באזור החפיפה נחשב תמונת הפרשים‪ .‬בתמונת ההפרשים נחפש קו לפי שיטת ‪A B – seam curving‬‬
‫זה הוא הקו שבו ההפרש בין התמונות הוא המינמלי‪.‬‬

‫לאחר שמצאנו קו כזה נפתור את עזור החפיפה משמאל לקו נשתמש ב ‪ patch‬השמאלי וכן הלאה‪.‬‬
‫למה זה עובד? כי באזור שבו ההפרש בין התמונות הוא המינמלי ולכן לא נראה ארטיפקטים‪.‬‬
‫שיטה זו עובדת מהר יותר כי היא לא עובדת פיקסל פיקסל אלא על ‪.Patches‬‬
‫שיטה זו נקראת הפרופסור המושחט – תמלא את החור ותשקר כמה שאתה יכול כדי לטשטש עקבות‪.‬‬

‫חזרה למילוי חורים‬
‫נוכל להשתמש בשיטה עם ה ‪ patch‬למלא כל פעם שכבה קטנה של החור בדומה ל ‪ – PDE‬אבל יש עם זה‬
‫בעיות לא תמיד הוא משלים כמו שאנחנו מצפים‪.‬‬
‫התוצאה תלויה מאוד בסדר של המילוי‪.‬‬

‫‪Image Completion by Exmample – based Inpating‬‬
‫מבוסס על מאמר של ‪ .Criminisi, Perez, Toyama‬הרעיו הוא‪ :‬לכל טלאי לאורך גבול החור נגדיר מדד‬
‫עדיפות ‪ . P  p ‬המורכב מ ‪ Confidence C‬ומ ‪. P  p =C  p⋅D  p :Data D‬‬
‫כאשר האלגוריתם הוא‪ :‬לכל פיקסל לאורך גבול החור חשב מדד עדיפות – ערך הפיקסל יהיה הערך עם‬
‫מדד העדיפות הגבוהה ביותר‪.‬‬

‫‪∑  C q ‬‬
‫‪q∈‬‬
‫‪∩‬‬
‫‪‬‬
‫הינו טלאי שמכיל‬
‫=‪ , C  p‬כאשר‬
‫בצורה פרקטית נגדיר את ‪ C  p‬באופן הבא‪:‬‬
‫‪p‬‬
‫∣‪∣ p‬‬
‫את הפיקסל ‪ – p‬לכל פיקסל ‪ p‬נבחר את הפיקסלים שנמצאים בתלאי ובמשלים של ‪) ‬כלומר עבור‬
‫‪‬‬
‫‪1 ; p∈ ‬‬
‫{=‪ . C  p‬משמעות הדבר –‬
‫התמונה ללא החור‪ .‬כאשר נאתחל את ‪ C‬עם הערכים הבאים‬
‫‪0 ; p∈‬‬
‫‪p‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫עבור האיטרציה הראשונה ‪ C‬של הפיקסלים שהם הכי קרובים לשפה‪ ,‬כלומר שיש להם הכי הרבה פיקסלים‬
‫שלידם שהם בתוך התמונה )למשל בפינות( ולכן הביטחון שלנו ב ‪ patch‬הכי גבוהה‪.‬‬

‫∣‪∣∇ I Np⋅n p‬‬

‫=‪ D p‬כאשר‬

‫‪ I Np‬הוא כיוון בניצב לגרדיאנט של‬

‫את ה ‪) data‬או הביטחון ב ‪ (data‬נגדיר כ‬
‫‪‬‬
‫התמונה‪ n p ,‬הוא גרדיאנט בכיוון הניצב לחור – הרעיון כאן הוא לתת ציון גבוהה לפיקסלים שכיוון השפות‬
‫)מבחינת הצבע בתמונה( הוא ככיוון שבו רוצים להשלים את החור‪.‬‬
‫‪ - ‬משקל‬
‫כלומר ה ‪ patch‬שנבחר הוא שילוב של‬
‫•‬

‫לוודא שיש לנו הרבה פיקסלים שכנים שהם בתוך התמונה )‪(C‬‬

‫•‬

‫לבחור נקודות שבהם כיוון השפה הוא ככיוון הנורמל של החור )‪(D‬‬

‫האלגוריתם הכללי הוא‪:‬‬
‫•‬

‫חשב את ‪ P‬לכל הפיקסלים המועמדים להשלמה‬

‫•‬

‫השלם את הפ ‪ patch‬שסביב הפיקסל עם הציון ‪ P‬הטוב ביותר‬

‫•‬

‫חזור להתחלה‬

‫‪Space Time Completion‬‬
‫‪Wexler, Shechtman, Irani 2004‬‬
‫אילו מאתרגרים את העבודה שבסעיף הקודם ואומרים כי לא צריך לשנות סדר השלמת הפיקסלים‪ ,‬אלא‬
‫צריך לעשות מינמום )אופטימיזציה( לפונקציה גלובלית‬
‫‪Choerence S *∣D= ∏ max sim W p , V q ‬‬
‫‪p ∈S * q∈ D‬‬

‫כאשר ‪ S‬הוא החור שצריך למלא‪ S * ,‬הינו המילוי הטופטימלי‪ D .‬הינו ‪ database‬של טלאים‪.‬‬
‫‪ - w p ∈S‬הינו טלאי בחור שמכיל את ‪,P‬‬

‫‪ v q ∈D‬טלאי ב ‪ database‬שמכיל את ‪.q‬‬

‫הרעיון הוא בהינתן ‪ 2‬אפשרויות למילוי נוכל להחליט מי מהם טובה יותר‪.‬‬
‫האלגוריתם יבצע השלמה טובה אם‪:‬‬
‫•‬

‫•‬

‫‪k‬‬
‫‪ w 1,.‬המכילים את ‪ P‬יש טלאים מקבילים להם בתמונה‬
‫לכל הטלאים בחור ‪p .. , w p‬‬
‫‪exist vi ∈ D ; wip=vi‬‬

‫כל הטלאים ‪ v 1,. . v k‬ב ‪ database‬מסכימים על הצבע ‪ c‬בפיקסל ‪. c=v1  p=... v k  p p‬‬

‫כמובן במציאות זה לא קורה‪ ,‬נצטרך לבצע אופטמיזציה – נבחר את ‪ c‬שמביא למינמום את‬
‫‪i‬‬
‫‪i 2‬‬
‫‪ (weighted least squeare) ∑  p  c−c ‬כאשר המשקל ‪) i =i ⋅sim w i , v i‬‬
‫‪i‬‬

‫‪p‬‬

‫‪p‬‬

‫‪p‬‬

‫שנועד כדי למנוע פיתרון טריוואלי ו ‪ c i‬הוא הצבע שמתאים לפיקסל ‪ p‬לפי ה ‪ patch‬מספר ‪i‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪ ip‬הוא קבוע‬

‫הפיתרון ל ‪ c‬הינו‬

‫‪∑ ip ci‬‬
‫‪c= i‬‬
‫‪∑ ip‬‬
‫‪i‬‬

‫להשלים איך האלגוריתם עובד‪.‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪12.5.10‬‬

‫שיעור ‪11‬‬
‫מהר יותר – איך ניתן להריץ ‪ texture synthesis‬או ‪ hole filling‬מהר יותר מאי פעם?‬

‫‪Texture Synthesis‬‬
‫לפי מאמר של ‪Eduos & Long‬‬
‫הרעיון הוא עבור כל פיקסל שרוצים ‪ -‬להשלים‬

‫השיטה החדשה‪ – Propagation :‬להשלים‬
‫‪Ashegman‬‬
‫במקום לעבור על כל פיקסל ולחפש איזה פיקסלים בתמונת המקור הם בצורה דומה לפיקסל הזה‬
‫נעשה כך‪:‬‬
‫•‬

‫נגריל מקומות‬

‫•‬

‫בכל שלב נחפש את הפיקסל באמצעות השכנים )משתמשים במקומות שכבר מצאנו(‬

‫•‬

‫לוקחים מבין המועמדים שסומנו את המועמד הטוב ביותר‬

‫הסבר נוסף‪ ,‬ניח כי מיפינו ‪ 3‬פיקסלים סביב‬
‫הפיקסל המועמד "?” ואנחנו רוצים למצוא את‬
‫הערך של "?” בשיטה הוקדמת ) ‪ (E&L‬היינו‬
‫צריכים לחפש את הסביבה של "?” בכל‬
‫התמונה! זה חיפוש ארוך מאוד‪.‬‬
‫במקום זה‪ ,‬בשיטה הנוכחית אנחנו משתמשים‬
‫בעובדה שאנחנו יודעים מאיפה הפיקסלים של‬
‫"?” הגיעו ולכן נוכל לבחור את הערך של "?”‬
‫מבין הערכים של "?” ביחס לתמונת המקור‬

‫‪Output‬‬

‫‪Input‬‬

‫?‪1‬‬

‫‪23‬‬
‫?‪1‬‬

‫למשל את הערך ביחס ל‪ 2-‬נבדוק את הפיקסל‬
‫באלכסון‪ ..‬בלה בלה בלה להשלים‬

‫?‬

‫‪2‬‬
‫‪3‬‬
‫?‬

‫כל זה חוסך את החיפושים הנישנים ונותן חיפושים קצרים בלבד‬

‫‪K-Coherence‬‬
‫‪Tong et al 2002‬‬
‫אלגוריתם יותר כללי מ ‪) ,propagation‬הם טוענים ש ‪ propagation‬הוא למעשה‬
‫האלגוריתם מבוסס על שלב מקדים ואז הרצה של ‪.Propagation‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪1−Coherence‬‬

‫הרעיון הוא בתמונת המקור נסתכל על ה ‪ musk‬ונחפש ‪ K‬שכנים הקרובים ביותר‬
‫)מבחינת ערכי עפור(‪.‬‬

‫‪Input‬‬

‫אחרי שלב ה ‪preprocessing‬‬
‫מריצים את ‪ ,propagation‬רק שבמקום לעבור על צורת "ר"‬
‫אחת עוברים עליה ועל כל השכנים הקרובים‪:‬‬

‫‪Input‬‬

‫?‪1‬‬

‫)במקום פיקסל ‪ 1‬מסוג ‪ 1‬עכשיו יש ‪ k‬פיקסלים כאילו‬

‫?‪1‬‬
‫?‬

‫‪2‬‬

‫?‬

‫‪2‬‬

‫‪3‬‬
‫?‬

‫‪3‬‬
‫?‬

‫‪Patch Match‬‬
‫‪B‬‬

‫עד פה הסגנו שיפור של פי‪ .10-‬עתה אנחנו נשפר עוד יותר‪.‬‬

‫‪A‬‬

‫הבעיה ש ‪ patch Match‬פוצר היא בהינתן ‪ 2‬תמונות ‪ A,B‬מצא את הזוגות‬
‫שהם השכנים הקרובים ביותר )לפי ה ‪ patch‬שנמצא סביבם( בין ‪ A‬ל ‪.B‬‬
‫איך עושים את זה מהר?‬
‫•‬

‫‪ - Initialization‬בהתחלה מגרילים לכל פיקסל בתמונה ‪ A‬מיקום מתאימים בתמונה ‪B‬‬

‫•‬

‫‪ – Propagation‬נעבור על כל ‪) patch‬פיקסל ו ‪ patch‬מסביבו( ונסתכל על השכן הממשי של ה‬
‫‪ patch‬מימין ומלמעלה‪ .‬במידה והמרחק יותר קצר לאחד מה‬
‫‪ patch‬הללו )של למעלה ולמטה( יותר קצר מאשר המרחק‬
‫‪B‬‬
‫‪A‬‬
‫של ה ‪ patch‬נחליף את הניחוש‪.‬‬
‫בתמונה הזאת משווים לפיקסלים כלפי מטה וימינה‪ .‬בפועל‬
‫מחפשים פעם כלפי מעלה ושמאלה ופעם כלפי מטה וימינה‬

‫‪B‬‬
‫•‬

‫‪A‬‬

‫‪ –Search‬שלב זה מאפשר לצאת מ ‪ .local min‬עבור כל‬
‫פיקסל מגרילים פיקסל סביב ה ‪ patch‬במעגלים הולכים‬
‫וגדלים‪.‬‬

‫למה זה עובד? כי מספיק שמעט מאוד ‪ Patch‬במקרה יוגרלו למקום הנכון בשביל שהאינפורמציה תפעפע‬
‫מהר בתוך התמונה‪.‬‬
‫שלבי הריצה הם ‪ propagation‬ואז ‪ search‬ואז שוב ‪ propagation‬וכן הלאה‪.‬‬

‫למה זה עובד – יותר מסודר‬
‫בהינתן ‪ 2‬תמונות ‪ A,B‬בגודל ‪ M‬פיקסלים‪ .‬מה הסיכוי שמצאנו הצבעה "במקרה" אל ה ‪nearest nabor‬‬
‫‪M‬‬
‫הסיכוי שלפחות פיקסל אחד יפול "נכון" הוא‪1−e−1 :‬‬
‫‪. P=1−1−1/ M  M‬‬
‫∞‪‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫במידה ואנחנו מרשים לפגוע ברדיוס התכנסות ‪) C‬כלומר התמונה יכולה להיות קרובה עד כדי ‪ – C‬אנחנו‬
‫‪M‬‬
‫מרשים חופש פעולה בגלל שהתמונות הם דיי הומוגניות( פיקסלים‪1−e−C :‬‬
‫‪. P=1−1−C / M  M‬‬
‫∞‪‬‬
‫נתרכז באזור קטן ב ‪) A‬בעל ‪ m‬פיקסלים( ונרצה שלפחות אחד‬
‫מהפיקסלים באזור זה "יצלוף לתמונה‪P R =1−1−C /M m :‬‬

‫‪B‬‬

‫‪A‬‬
‫‪m‬‬

‫מה ההסתברות שנצליח לצלוף אחרי ‪ t‬ניחושים )ניסינו ‪ t‬פעמים ונכשלנו‬
‫ובפעם ה ‪ t1‬הצלחנו( ‪. Pr t =P R 1−P R t‬‬
‫‪c m −1‬‬
‫‪M‬‬
‫‪ t =[1−1−  ] −1 M‬‬
‫זו היא התפלגות גיאומתרית והתוכלת שלה‪−0.5 :‬‬
‫∞‪‬‬
‫‪M‬‬
‫‪Cm‬‬
‫ההגרלות שנצטרך‪.‬‬

‫‪ -‬זה כמות‬

‫עתה נוכל לטעון כי אנחנו מחפשים אזורים שהם פרורפוציוניים לגודל התמונה למשל ‪m=M⋅5%‬‬
‫ולכן נצטרך לעשות כמות קטנה של הגלות ‪ t‬כדי שזה יתכנס‪.‬‬

‫בשביל מה צריך ‪?Patch Match‬‬
‫נוכל להכניס את ‪ Patch Match‬לאלגוריתם ‪) Bidirectional Similarity‬האלגוריתם שנועד כדי למצוא‬
‫דימיון בין ‪ 2‬תמונות( – נרצה לסנטז תמונה ‪ B‬מתוך ‪ A‬כך שכל המידע ב ‪ A‬יופיע ב ‪) B‬כל ‪ patch‬ב ‪ A‬יהיה‬
‫בעל מקביל ב ‪ (B‬וכמו כן שלא יהיה ארטיפקטים ב ‪ B‬שלא הופיעו ב ‪) A‬כל ‪ patch‬ב ‪ B‬יהיה בעל מקביל ב‬
‫‪.(A‬‬
‫למדנו באחד השיעורים הראשונים על הקטנה של תמונות או הזזה של אובייקטים בתמונה‬

‫‪Video Texture‬‬
‫בדומה לתמונות נרצה לקחת קטע וידאו של טקסטורה קצר )למשל דגל מתנופנף ברוח( ואנחנו רוצים לקבל‬
‫וידאו ארוך כמה שנרצה עם הטקסטורה הזו‪) .‬אם נתחיל מסוף הסרט ונחזור להתחלה הקפיצה לא תהיה‬
‫יפה בעין(‬
‫איך נעשה את זה? נחפש עבור כל זוג פריימים ‪ i , j‬נחפש "ציון" או פונקציית מכיר המגדריה כמה‬
‫הפריימים קורבים זה לזה‪.‬‬
‫נגדיר ‪ c i  j =Di1, j‬כלומר המרחק בין פריים ‪ i‬לפריים ‪ j‬הוא לפי הדמיון ‪) D‬במאמר הם‬
‫משתמשים בפונקציית מרחק ריבועי ברמות אפור( בין הפריים שאחרי ‪ i‬לבין ‪ .j‬אם המרחק קטן אזי יש‬
‫סיכוי טוב שהפריים ‪" j‬יראה טוב אחרי פריים ‪.”i‬‬
‫‪2‬‬

‫ואז יש לנו מרחב מדגם של הסתברויות‪ - P i  j =e−C / :‬לכל פריים ‪ i‬יש מרחב הסתברות לאיזה‬
‫פריימים ‪ j‬הוא יכול לקפוץ‪ ,‬נוכל כל פעם להגריל פריים לפי ההסתבריויות‪.‬‬
‫‪i j‬‬

‫זה לא מושלם? זה לא משמר את התנועה בתמונה ‪ – Preserving Dynamics‬יכול להיות שדמות‬
‫בתמונה תלך קדימה ואחורה‪ .‬ולכן נגדיר את המרחק ‪ C i  j‬באמצעות מספר פריימים‪:‬‬
‫‪N‬‬

‫‪W k Di k1, j k‬‬

‫∑‬

‫‪k=−N‬‬

‫=‪Ci j‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫בעיה נוספת‪ :‬מבוי סתום – בגלל שאנחנו מגרילים כל הזמן פריימים אנחנו עלולים להתקל במבוי סתום –‬
‫כלומר קטע וידאו שאינו דומה לשום קטע אחר ואז הוידאו יגיע לסופו ונתקנו‪.‬‬
‫הפיתרון‪ :‬מגדירים נוסחאת עדכון‪F j  k :‬‬
‫‪ - F i  j=C i  j min‬נריץ נוסחא זו מספר פעמים – מספר‬
‫‪k‬‬
‫איטרציות )עבור ‪ ‬קבוע כלשהו( תפקידו להתחמק מ ‪ .dead endings‬לאחר מספר הריצות פונקציית‬
‫המכיר מוחלפת מ‪ C-‬ל ‪.F‬‬
‫הרעיון הוא שהמכיר לעבור מ ‪ i‬ל ‪ j‬היא לא רק שהמעבר נראה טוב אלא גם הסתכלות קדימה )לעבור מ ‪j‬‬
‫לפריים אחר ‪(k‬‬
‫)אלגוריתם זה נקרא ‪(Q – Learning‬‬
‫לא נקבל את כל האינפורמציה בטקסטורה אבל נקבל טקסטורה שיכולה לחזור על עצמה כל הזמן‪.‬‬
‫שיפור נוסף – אם בכל זאת עדיין יש בעיה של קפיצה‪ ,‬ניתן לעבור מפריים לפריים באמצעות ‪ Fade‬או‬
‫‪.Morph‬‬

‫‪Graphcut Texture‬‬
‫הכללה לוידיאו וטקסטורה‪ .‬כדי לממש זאת נשתמש ב ‪ – Min cut / Max Flow‬בעיה קלאסית‬

‫‪Mean cut / Max Flow‬‬
‫זו היא בעיה קלאסית )‪ (1962‬יש לנו רשת עם ‪ 2‬נקודות מיוחדות‪ :‬התחלה ‪ s‬וסיום ‪ .t‬כל קשת בגרף‬
‫מציינת למשל ספיקה של צינור מים‪ .‬נרצה למצוא כמה מים ניתן להעביר )ספיקה( בין ‪ s‬ל ‪.t‬‬
‫המאמר גורס כי בעיה זו שכולה לבעיה‪ :‬אם נחתוך את הגרף ל‪ 2-‬ע"י‬
‫חתיכה של קשתות שסכומם הוא מינמילי – הסכום הזה הוא גם קצב‬
‫הספיקה המקסימלי‬

‫יישומים בתמונה‬
‫נניח כי יש לנו ‪ patch 2‬ואנחנו רוצים לעבור ביניהם נצטרך למצוא באמצעות ‪seam curving‬‬
‫כפי שפתרנו לפני מספר שיעורים‪.‬‬
‫נוכל לנסח את הבעיה גם כ ‪ Min cut Max Flow‬ע"י בנייה של הרשת‬
‫הבאה מהפיקסלים באזור החפיפה‬
‫)כאשר פונקציית הספיקה בין פיקסלים ‪ s,t‬היא‪:‬‬
‫∣∣‪ M i , j=∣∣Ai−B  j∣∣∣∣Ai−B  j‬והמשקל בין הפיקסלים‬

‫‪A B‬‬

‫‪A‬‬

‫‪B‬‬

‫‪S‬‬

‫‪t‬‬

‫בשפה ל ‪ S,t‬הוא אינסוף (‬

‫‪B‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪A‬‬

‫מה ההבדל בין השיטה הזו לשיטה של ‪ Dynamic Programing‬שלמדנו‬
‫עליה בשיעור הקודם? את שיטה זו ניתן להכליל גם לציר הזמן‪.‬‬
‫כך נוכל לחתוך בין ‪ 2‬קטעי וידיאו כך שבאזור החלוקה נקבל פריימים‬
‫שמכילים פיקסלים מ‪ 2-‬קטעי הוידאו‬
‫איך מייצרים טקסטורה אין סופית?‬
‫נוכל להכניס שוב ושוב ‪ patch‬שונים‪.‬‬
‫נשים לב שאנחנו לא חייבים לשים את קוביית הוידאו בחפיפה מלאה‪ ,‬ניתן לעשות הזחה במרחב‬
‫‪A‬‬

‫נוכל להשתמש באלגוריתם זה כדי לעשות החלפה בין ‪ 2‬תמונות בקו‬
‫תפר יותר מורכב )חיתוך של שטח או מעגל(‬

‫‪B‬‬

‫‪t‬‬

‫‪S‬‬

‫איך כל זה מתפתח כתוצאה מהאינטרנט‪Scene Completion Using Millions of :‬‬
‫‪Images‬‬
‫נניח יש לנו תמונה ואנחנו רוצים למחוק ממנה קטע‪ .‬כל האלגוריתמים שתארנו עד עכשיו משתמשים במידע‬
‫שנמצא בתמונה הונכחית – כמות מידע מוגבלת‪.‬‬
‫אבל באינטרנט יש המון תמונות‪ ,‬נוכל להשתמש בתמונה שלנו בשביל למצוא תמונה דומה מהאינטרנט‬
‫ולמלא את החור‪.‬‬
‫הבעיה העיקרית – איך מוצאים תמונה דומה? האלגוריתם במלואו מתואר במצגת‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪2.6.10‬‬

‫שיעור ‪12‬‬
‫‪Super Resolution‬‬
‫הקלט‪ :‬אוסף של תמונות ברזולוציה נמוכה‪ ,‬והפלט תמונה ברזולוציה גבוהה‪.‬‬
‫אזהרה‪ :‬הבעיה ב ‪ Super Resolution‬היא שלא מובטח שמתקבלת תמונת "אמת"‪.‬‬
‫קצת מספרים‪ :‬ניתן לעשות סופר רזולוציה של עד פי ‪.4‬‬

‫פתרון ‪ Least Squares‬לבעיה )סופר רזולוציה קלאסית(‬
‫)‪Irani & Peleg (91‬‬
‫אינטואיציה‪ :‬אם יש לנו ‪ 4‬גרידים ברזולוציה נמוכה‪ ,‬נוכל להכפיל את הרזולוציה ע"י מיקום של הגרידים זה‬
‫ביחס לזה‪.‬‬
‫בצורה פורמלית‪ :‬נסמן ב ‪ X‬את התמונה באיכות גבוהה )שאין לנו(‪ .‬נסמן ב ‪ Y‬את המדידה )התמונה באיכות‬
‫נמוכה שיש לנו(‪.‬‬
‫תהליך הדגימה של ‪ Y‬מ‪ X-‬מורכב מ ‪ LPF‬ו ‪ H ) Y =D H F X :downsample‬הינו ‪Low pas‬‬
‫‪ (cernel‬ו ‪ D‬מטריצת דגימה‪ ,‬ו ‪ F‬הינה מטריצת ‪ warp‬גיאומטרי‪ X ,‬היא התמונה )ווקטור יחידה(‬
‫למעשה יש לנו אוסף של תמונות‪Y 1= DH X ; Y 2=DH F 2 X ; Y 3= DH F 3 X ; ... :‬‬
‫נניח כי התמונה הראשונה היא תמונת ‪ Refference‬ולכן הגיאומטריה שלה היא מטרצית יחידה‪F 1=I :‬‬
‫•‬

‫בדרך כלל ‪ H‬ממודל על ידי גאוסיאן או ‪Point Spread Function‬‬

‫•‬

‫איך ממדלים את ‪ ?F‬בדרך כלל מקובל לעבוד עם טרנספורמציות של עד ‪ – 2D Projective‬כלומר‬
‫מניחים כי התמונה ‪ X‬היא קשיכה ועצמים בה לא זזים בין התמונות ‪. Y 1 ,Y 2 , ....‬‬
‫בקורס זה נסתכל על מספר טרנספורמציות אפשריות‪:‬‬
‫◦‬

‫דימיון אוקלידי קשיח – הזזה וסיבוב של כל פיקסל‬

‫◦‬

‫דימיון ‪ – scale +‬הזזה‪ ,‬סיבוב והקטנה והגדלה של הצירים ביחד‬

‫◦‬

‫דמיון ‪ – non uniform scale +‬כמו הקודם רק שניתן להגדיל את כל אחד מהצירים בנפרד‬
‫)ריבוע הופך למלבן מסובב(‬

‫◦‬

‫‪ – 2D Affine‬כמו הקודם רק שניתן לשנות את הזוויות בין ציר ‪ X‬ו ‪) Y‬מלבן מסובב הופך‬
‫למקבילית(‬

‫◦‬

‫‪ – 2D proj‬התלה דו ממדית ‪ +‬פרספקטיבה – סיבוב‪ ,‬מתיכה בצירים בנפרד‪ ,‬והמלבן יכול‬
‫להפוך למקבילית ולטרפז‪.‬‬

‫עם כן‪ ,‬באופן כללי אוסף התמונות הוא‪ - V k ) {Y k = Dk H k F k X V k }Nk=1 :‬מטריצת רעש‪ ,‬נניח‬
‫‪ - H k =H‬אותה ‪ ,Point Spread Function‬ואותו ‪.( D k =D :down sampling‬‬
‫נשים לב ש ‪ D‬הוא פרמטר שנחבר ע"י המשתמש‪ ,‬הוא אומר מהו ה ‪ downsampling‬שקרא לתמונה‬
‫המקורית ‪X‬‬
‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫הפתרון‬
‫•‬
‫•‬

‫ראשית יש לשארך את ‪ - F k‬נלמד ביום שישי‬
‫לאחר מכן יש לפתור את המשוואה הבאה לקבלת ‪) X‬פתרון ‪:(least square‬‬
‫‪y1‬‬
‫‪D1 H 1 F 1‬‬
‫‪V1‬‬
‫= ‪Y = ...‬‬
‫‪x ...‬‬
‫‪...‬‬
‫‪yN‬‬
‫‪DN H N F N‬‬
‫‪VN‬‬

‫[] [‬

‫][]‬

‫מימודים של המטריצה ‪:Y‬‬

‫‪ , N M 2×1‬המטריצה‬

‫]‬

‫‪D1 H 1 F 1‬‬
‫‪...‬‬
‫‪DN H N F N‬‬

‫[‬

‫‪2‬‬

‫‪2‬‬

‫‪2‬‬

‫‪ . N M ×R M‬כאשר‬

‫‪ M‬הוא גודל התמונה ‪ Y‬בכל ציר‪ R ,‬הוא פאקטור ההגדלה )פי ‪ ,2‬פי ‪ 4‬וכו(‬

‫נקודת מבט סטטיסטית‬
‫)‪Elad Fuire (97), Freeman at al (2002‬‬

‫‪Maxmimum Liklihood‬‬
‫‪ Least square‬ניתן להיות מנוסך כבעיית ‪ .Maximum liklyhood‬נרצה לבחור ‪ X‬באופן הבא‪:‬‬
‫‪2‬‬

‫‪N‬‬

‫∣∣‪) X =argmin ∑ ∣∣D HF k X −Y k‬נשמש בנורמת‬
‫‪k =1‬‬

‫‪x‬‬

‫‪2‬‬

‫‪L‬‬

‫∣‪∑ ∣‬‬

‫‪2‬‬

‫=∣∣‪.( ∣∣‬‬

‫הבעיה היא שבגלל שהמידול שלנו לא מושלם יש הרבה תמונות ‪ X‬שמביאות את הסכום למינמום‪:‬י ש הרבה‬
‫תמונות ‪ X‬שהם דומות אחת לשנייה אבל לא כולן מקיימות את הכללים של תמונה צורות גיאומטריות‬
‫מוגדרות וכו‪ .‬ולכן ‪) least square‬או ‪ ML‬במקרה הזה( הוא לא פיתרון טוב‪..‬‬
‫נפתור את ה ‪ ML‬ונראה שהוא בדיוק ‪ .Least Squares‬הביטוי לשגיאה הוא‪:‬‬
‫‪N‬‬

‫‪2‬‬

‫∣∣‪2ML  X =∑∣∣DHF K X – Y k‬‬
‫‪k =1‬‬

‫‪N‬‬
‫‪2ML  X ‬‬
‫נגזור לפי ‪ X‬ונשווה ל‪=2 ∑ F Tk H T DT  D H F k X – Y =0 0-‬‬
‫‪X‬‬
‫‪k=1‬‬

‫וקיבלנו‪:‬‬
‫‪N‬‬

‫‪AX =b‬‬

‫‪‬‬

‫]‬

‫‪F h D D H F k X =∑ F Tk H T DT Y k‬‬
‫‪k=1‬‬

‫‪T‬‬

‫‪T‬‬

‫‪T‬‬

‫∑[‬
‫‪N‬‬

‫‪k =1‬‬

‫ואת משוואה זו פוטרים ב ‪ .least square‬הבעיה היא שהמטריצות כאן הם מטריצות מאוד גדולות ולכן‬
‫נבחר בשיטה ‪) iterative solution‬במורד התלול ביותר(‬
‫‪N‬‬

‫‪ = xn− ∑ F Tk H T DT  D H F k X n −Y k ‬‬
‫‪. x n1‬‬
‫‪k =1‬‬

‫שיטה זו היא ‪ ,iterative back projection‬כי החלק הזה ‪ D H F k X n−Y k‬הוא שיארוך השגיאה של‬
‫‪ xn‬כאשר מורידים את הרזולוציה לדגימה של ‪ .Y‬לאחר מכן התלה של השגיאהלמרחב התמונה ‪xn‬‬
‫באמצעות ‪. F Tk H T D T‬‬
‫בנוסף‬

‫‪ ‬הוא מקדם משקל‪.‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫הבעיה היא שעדיין המטריצות הם ענקיות‪ .‬ולכן נצטרך לעזוב לרגע את האלגברה הלינארית ולהבין ש ‪D,‬‬
‫‪ H, F‬הם אופרטורים המציינים תהליך של תשטוש והחלקה ובפועל יישנם אלגוריתמי החלקה יעילים מאוד‪.‬‬
‫התהליך הוא‪:‬‬
‫קח את ‪ ,X‬תעשה ‪ ,warp‬תתשתש‪ ,‬תוריד רזולוציה ותחסר את ‪ Y‬לקבלת השגיאה‪ .‬לאחר מכן כך את‬
‫השגיאה תעלה את הדגימה‪ ,‬תוריד את התשתוש ותעשה ‪ warp‬לנקודה המקורית‪.‬‬
‫נוכל לפתור זאת גם בצורה בסיינית )‪.(Base‬‬
‫‪T‬‬

‫‪T‬‬

‫‪−Y −GX   Y −GX ‬‬
‫‪2 2‬‬

‫‪−V V‬‬

‫‪ Pr  v=c e 2 ‬וכן‬
‫נניח ‪ Y =GX V‬ו ‪ V‬הוא רעש לבן גאוסי‪:‬‬
‫‪Pr Y ∣ X =c e‬‬
‫‪ ML‬מנוסח כך‪ :‬מצא את התמונה שהמדידות הםןה כי מסתברות‪X ML=argmax Pr Y ∣ X  :‬‬
‫‪x‬‬
‫‪2‬‬

‫ואז‬

‫)נשים לב כי ‪Pr Y ∣ X =argmin∣∣GX −Y ∣∣2‬‬
‫‪. X ML =argmax‬‬
‫‪x‬‬
‫‪x‬‬

‫)‪Maximum Aprostrory (MAP‬‬
‫כדי לבחור מתוך המרחב העצום של ‪ X‬רק את התמונות "הטובות" )כלומר שמקיימות כללים של תמונות(‬
‫‪N‬‬

‫‪2‬‬

‫] ‪. X =argmin ∑ ∣∣D HF k X −Y k∣∣  A[ X‬‬
‫‪k =1‬‬

‫‪x‬‬

‫‪N‬‬

‫כאשר נקרא לחלק הזה‬

‫‪∑∣∣D HF k X −Y k∣∣2‬‬

‫‪ – Data term‬נובע מהנתונים‪ ,‬ולחלק הזה‪ A[ X ] :‬‬

‫‪k =1‬‬

‫חלק הרגולטורי ‪ .regularization term‬החלק הרגולטורי תפיקדו לתת ציון ל ‪ – X‬כמה הוא נראה כמו‬
‫תמונה ) ] ‪ A[ X‬הוא אופרטור ציון לתמונה(‪.‬‬
‫המשקל ‪‬‬

‫אמור לאזן בין הדרישה להיות תואם ל ‪ data‬לאומת הדרישה לתמונה‪.‬‬

‫נוכל בצורה נאיבית לבחור אופרטור ‪ A‬של חלקות – ככל שתמונה חלקה ככה היא טובה יותר‪.‬‬
‫כדי לפתור את ‪ MAP‬נסתכל בהסתכלות בייסיאנית )‪ .(Bayse‬ב ‪ ML‬מקסמנו את‬
‫למקסם את ‪. Pr  X ∣Y ‬‬

‫‪ . Pr Y ∣ X ‬אבל עלינו‬

‫‪Pr Y ∣ X  Pr  X ‬‬
‫נשתמש בכלל ‪:Bayes‬‬
‫‪Pr Y ‬‬
‫‪Pr  X ∣Y =argmax Y ∣ X  Pr  X ‬‬
‫‪. X MAP=argmax‬‬
‫‪x‬‬
‫‪Pr‬‬

‫=‪ Pr  X ∣Y ‬ונקבל את‪:‬‬

‫בנוסחא זו כל הדברים ידועים פרט ל ‪ - Pr  X ‬אין נוסחא סגורה לדעת האם אוסף של פיקסלים הוא‬
‫תמונה‪ ..‬בשנים האחרונות עובדים על כתיבת פונקציית ההסתברות הזאת‪.‬‬

‫איך פותרים בפועל – ‪Map Reconstruction‬‬
‫נניח פונקציית אנרגיה ] ‪ A[ X‬כ ‪ prior‬ונניח התפלגות ‪) Gibbs‬התפלגות בהנחה שקשרים קיימים אך ורק‬
‫בין פיקסלים שכנים בתמונה ] ‪ Pr  X =c e− A[ X‬ולכן‪:‬‬
‫‪2‬‬
‫] ‪ X map=argmax Pr Y ∣ X  Pr  X =argmin∣∣GX −Y ∣∣  A[ X‬כאשר השגיאה היא‬
‫‪x‬‬

‫‪X‬‬

‫‪2‬‬
‫] ‪∣∣GX −Y ∣∣2 A[ X‬‬
‫‪. MAP =rgmin‬‬
‫‪x‬‬

‫נשים לב שפיתרון זה גם כן קשה בגלל גודל המטריצות ויש לבצע ‪ – steapest decent‬להסתכל בשקפים‪.‬‬
‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫דוגמאות לפונקציות רגולריזציה‬
‫•‬

‫•‬

‫] ‪A[ X‬‬

‫]‬

‫[‬

‫‪1 1 1‬‬
‫‪1‬‬
‫‪1 −8 1 - Tikonov Cost Function‬‬
‫‪8‬‬
‫‪1 1 1‬‬
‫הלפלסיאן‪ - .‬פירוש הדבר הוא שאנחנו מאמינים יותר לתמונות חלקות – נפוץ ביותר‬
‫‪2‬‬

‫=‪ A[ X ]=∣∣LX ∣∣ ; L‬כאשר ‪ L‬היא אופרטור‬

‫‪ A[ X ]=∣∣∇ X ∣∣1 - Total Variation‬כלומר נורמה ‪ ( L1 ) 1‬של הנגזרות‪:‬‬

‫∣ ‪∣Xx ∣∣Xy‬‬

‫‪-‬‬

‫עובד מאוד טוב‬

‫התמודדות עם צבע‬
‫בצבע אנחנו ברצה לעבור למרחב ‪) YcbCr‬או ‪ .(YUV‬לבצע את הסופר רזולוציה על ‪ Y‬בלבד‪ ,‬ולבצע‬
‫אינטרפולציה ב ‪CbCr‬‬

‫נקודת מבט מודרנית‬
‫בעשור האחרון התפתחה הנוטציה כי אין פונקציית "קסם" אנליטית של ‪ A‬ויש לעבור לכיוון שונה‬

‫‪Example Based Super Resolution‬‬
‫הרעיון הוא לבנות ‪ Data Base‬של הרבה מאוד פטצ'ים שיש להם דוגמה ברזולוציה נמוכה ‪5×5‬‬
‫ורזולוציה גבוהה ‪ . 7×7‬את הפטצ'ים בונים ע"י לקיחה של תמונה אקראיות ותשטושם לרזולוציה נמוכה‪.‬‬
‫בהינתן תמונה דגומה ‪ ,Y‬נחלק אותה לפטצ'ים ונחפש כל ‪ patch‬ב ‪ ,Data Base‬כשנמצא התאמה ב ‪DB‬‬
‫נחליף את ה ‪ patch‬בדגימה ברזולוציה הגבוהה שלו‪ - .‬בפועל קודם גוזרים את התמונה לתמונת נגזרת ואז‬
‫מחפשים ב ‪ DB‬של הנגזרות‪.‬‬
‫מבחינה פרקטית ישנן ‪ 3‬שיטות להרכיב את התמונה ברזולוציה גבוהה‬
‫•‬

‫‪ – Nearest Neigbor‬נחליף כל ‪ patch‬בתמונה בנפרד‪ .‬שיטה זו מהירה מאוד אבל אין הבטחה‬
‫שתהיה קונסיסטנטיות בין ה ‪ patch‬הסמוכים‪ .‬לא עובד טוב‬

‫•‬

‫‪ – Markov Network‬הרעיון הוא להביא את הביטוי הבא למינימום ‪-‬‬
‫‪1‬‬
‫‪ j∈ N i ) Pr  X ∣Y = ∏  ij  X i , X j  ∏  X i , Y i ‬פירושו ‪ j‬בסביבה של ‪.(N‬‬
‫‪z j∈ N i‬‬
‫הרעיון הוא‪ :‬עבור כל פיקסלים ‪ i‬נרצה שה ‪ patch‬הסמוכים ‪ j‬יסכימו איתו‪, ij  X i , X j  :‬‬
‫ובנוסף נרצה שהפיקסל ברזולוציה הנמוכה של ‪ X‬יתאים עם אותו הפיקסל במדידה ‪Y‬‬
‫‪ -  X i ,Y i‬ניצור איזון בין אמונה ל ‪ data‬לבין המעבר בין ‪ patches‬הסמוכים )למשל שקווי‬
‫התפר בין ה ‪ patch‬ברזולוציה הגבוהה יהיו חלקים(‪.‬‬
‫הדרך לפתור את הבעיה היא באמצעות ‪ Belief Prorogation‬או ‪ .Graph Cuts‬עובד טוב אבל לאט‬

‫•‬

‫‪ – Single Pass‬נניח כי ששיבצנו חלק מהתמונה ברזולוציה הגבוהה ב‬
‫‪ patch‬ואנחנו רוצים להוסיף ‪ patch‬נוסף‪ .‬נחפש ב ‪ database‬פטשים שהם‬
‫מצד אחד תואמים )בגרסת הרזולוציה הנמוכה( את הדגימה ‪ ,Y‬ומצד שני‬
‫השפה של ה ‪ high resolution patch‬צריך להתאים לחלק של התמונה‬
‫שכבר מצאנו‪.‬‬
‫למעשה הגדרנו ‪ database‬בעל יכולת חיפוש יותר מתוחכמת‪ ,‬אנחנו מחפשים גם התאמה ל ‪y‬‬
‫בחלק של ‪ low resolution patch‬וגם התאמה לפיקסלים הידועים בחלק של ה ‪high resolution‬‬
‫‪.patch‬שיטה זו גם יפה וגם אופה‪ ,‬אבל תלוי בסדר המילוי של התמונה ברזולוציה הגבוהה‬

‫נשים לב שבפועל צריך רק דגימה אחת ‪ – Y‬לא צריך יותר מזה כדי להגדיל רזולוציה‪ ,‬כל הכוחמה ב ‪DB‬‬
‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫שילוב בין ‪ Example Based‬לבין סופר רזלוציה קלאסית‬
‫הרעיון – בהינתן תמונה ברזולוציה נמוכה ‪ ,Y‬נייצר מתמונה זו תמונה ברזולוציה עוד יותר נמוכה ' ‪Y‬‬
‫באמצעות גאוסיאן ודגימה מחדש‪.‬‬
‫עתה נבנה ‪ DataBase‬שמתאים את ‪ patch‬ב ' ‪ Y‬בגודל ‪ 5×5‬ל ‪ patch‬בגודל ‪ 11×11‬בתמונה ‪.Y‬‬
‫עתה נחפש את ה ‪ patch‬ה ‪ i‬בגודל ‪ 5‬על ‪ 5‬מהתמונה ב ‪ Y‬ב ‪.database‬‬
‫מבחינה סכמתית זה נראה כך‪:‬‬
‫•‬

‫רוצים למצוא ‪ patch‬בגודל ‪ 11‬על ‪ 11‬ב ‪ X‬במקום‬
‫שבו יש ‪ patch‬בגודל ‪ 5‬על ‪ 5‬ב ‪.Y‬‬

‫•‬

‫ראשית נחפש את ה ‪ patch‬הנ"ל בתמונה ' ‪- Y‬‬
‫נשים לב שזה ממש לא טריוויאלי‪ ,‬למה שיהיה‬
‫אותו ה ‪ patch‬בדיוק גם ב ' ‪ Y‬וגם ב ‪) Y‬ואם לא‬
‫אותו ‪ patch‬לפחות אחד הדומה לו בשגיאה‬
‫ריבועית(‪ .‬מבחינה סטטיסטית זה קורה הרבה‪,‬‬
‫אומנם ה ‪ patch‬לא נמצא באותו מקום אבל ניתן‬
‫לנמצוא התאמה‪ .‬כמו ‪non local means‬‬
‫שמשתמש בכל התמונה כדי לחפש ‪ patch‬דומים‬
‫במקום שפיסיקלית לא צריך להיות דמיון‪.‬‬

‫•‬

‫לאחר שמצאנו את ה ‪ patch‬ב ' ‪ Y‬ננפח אותו‬
‫באמצעות הדואל שלו ב ‪ Y‬ונשתול את הדואל‬
‫בתמונת הפלט ‪.X‬‬

‫’‪Y‬‬

‫‪Y‬‬

‫‪X‬‬

‫?‬

‫?‬

‫‪Space Time SR‬‬
‫‪Irani 2002‬‬

‫‪Single SR‬‬
‫‪Irani 2009‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫?‬

‫‪4.6.10‬‬

‫שיעור ‪13‬‬
‫‪Motion Tracking‬‬
‫חברה מסחרית מאוקספורד ‪2d3‬‬
‫יישנם ‪ 3‬סוגים של ‪Motion tracking‬‬
‫•‬

‫‪Pixel Based‬‬

‫•‬

‫‪Feature Based‬‬

‫•‬

‫‪Object Based‬‬

‫מודלים לתנועה‬
‫ניתן לתאר מספר מודלים לתנועה בתמונה )תיאור מתמטי של פונקציית הפרספקטיביה ‪ F‬בשיעור הקודם(‪:‬‬
‫•‬

‫‪ xy  = xy  ef  :2D Translation‬‬
‫‪cos  sin  x‬‬
‫‪ e  :2D Euclidean‬‬
‫‪ xy  =−sin‬‬
‫‪ cos   y ‬‬
‫‪f‬‬
‫‪cos  sin  x‬‬
‫‪) 2D similarity‬סקאלה שונה בכל ציר(‪ e  :‬‬
‫‪‬‬
‫‪ xy  =s0 s0 −sin‬‬
‫‪‬‬
‫‪‬‬
‫‪ cos  y‬‬
‫‪f‬‬
‫‪cos  sin  x‬‬
‫‪ e‬‬
‫‪‬‬
‫‪ xy  =ac db −sin‬‬
‫‪‬‬
‫‪‬‬
‫‪) 2D Affine‬מלבן יכול להפוך למקבילית(‪ f  :‬‬
‫‪ cos  y‬‬
‫‪a b cos  sin  x‬‬
‫‪ e ‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪c‬‬
‫‪d‬‬
‫‪−sin‬‬
‫‪‬‬
‫‪cos‬‬
‫‪‬‬
‫‪y‬‬
‫‪f‬‬
‫= ‪x‬‬
‫‪) 2D Perspective‬ריבוע יכול להפוך לטרפז(‪:‬‬
‫‪y‬‬
‫‪x‬‬
‫‪ g h  1‬‬
‫‪y‬‬
‫‪t−1‬‬

‫•‬

‫‪t‬‬

‫‪t −1‬‬

‫•‬

‫‪t‬‬

‫‪1‬‬

‫‪t −1‬‬

‫•‬

‫‪2‬‬

‫‪t−1‬‬

‫•‬

‫‪t‬‬

‫‪t‬‬

‫‪t −1‬‬

‫‪t‬‬

‫‪t −1‬‬

‫מתי נשתמש בכל מודל? כאשר עושים ‪ tracking‬על איזורים קטנים בתמונה אין סיבה לעשות ‪2D‬‬
‫‪ – Perspective‬זה יקר מבחינת משאבים מספיק לעבוד עם השיטות היותר פשוטות‪ .‬אבל כאשר רוצים‬
‫לקחת מספר תמונות ולהפוך אותם לתמונת פנורמה חשוב לנו לסובב את כל התמונה לפרספקטיבה ואז‬
‫‪ 2D Perspective‬יותר טוב‪.‬‬
‫הבעיה ש ‪ 2D Perspective‬מניח מישור תמונה בודד ואז אם יש דברים מעל המישור לדוגמה עצים או‬
‫מכוניות בתמונה הם יצאו מעוותים‪.‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪Block Matching‬‬
‫כדי להתאים ‪ 2‬תמונות זול זו‪:‬‬
‫•‬

‫קח את תמונה ‪ , t−1‬שבור אותה‬
‫לריבועים לא חופפים בגודל ‪8×8‬‬

‫•‬

‫מצא את המקביל שלהם בתמונה בעזרת‬
‫‪) SSD‬מרחק אוקלידי של רמות האפור(‬
‫את ווקטור התנועה הטוב ביותר‪.‬‬

‫‪Search‬‬

‫הבעיות באלגוריתם זה‪:‬‬
‫•‬

‫ישנה סטטיסטיקה‪ ,‬לא כל הריבועים מסכימים זה עם זה‬

‫•‬

‫האלגוריתם עובר על חלונות קטנים‬

‫•‬

‫יש בעיה בפונקציית הדימיון ‪ – SSD‬היא מניחה רציפות בבהירות של העצמים‬

‫•‬

‫פיתרון זה מניח טרנסלציה בחלונות קטנים בלבד‬

‫•‬

‫בלוקים עם ‪ edges‬יותר חשובים לעקיבה מאשר כאילה בלי ‪ ,edges‬הם מכילים יותר מידע‪ .‬אבל‬
‫יש ב ‪ edge‬כמה בעיות‬
‫◦‬

‫על ‪ edge‬יש בעיה שנקראת ‪ Apreture Problem‬לאורך קו ישר יהיו הרבה‬
‫בלוקים מתאימים‬

‫◦‬

‫אם ‪ edge‬הוא בין אובייקט לרקע והאובייקט זז ביחס לרקע אזי ‪ SSD‬יכשל‬

‫?‬

‫‪Pixel Based Motion Tracking – Optical Flow‬‬
‫נגדיר ‪ Motion Field‬כתנועה האמיתית של כל הנקודות בסצינה )בעולם תלת ממדי(‪ .‬ה ‪ OF‬הוא ההיטל של‬
‫‪ MF‬על מישור התמונה‪.‬‬
‫נשים לב כי לא ניתן במקרה הכללי לשחזר את ‪ MF‬האמיתי‪.‬‬
‫המטרה שלנו היא לשחזר לכל נקודה בעולם שנופלת בפיקסל בזמן ‪ t−1‬לאותה נקודה ברגע ‪. t‬‬
‫כלומר למצוא את ‪I  x , y , t= I  xdx , ydy , tdt  :dx,dy‬‬
‫הנחות‪:‬‬
‫•‬

‫‪ – Brightness Constancy‬רמות האפור נשמרות‬

‫•‬

‫תנועה קטנה בין תמונות )נניח כי אנחנו מקבלים וידאו(‬

‫•‬

‫אין השתקפויות \ הסתרה – כלומר פיקסלים לא נעלמים או מופיעים‪.‬‬

‫‪I‬‬
‫‪I‬‬
‫‪I‬‬
‫‪dx‬‬
‫‪dy‬‬
‫ניתן להשתמש בקירוב טור טיילור‪dt :‬‬
‫‪x‬‬
‫‪y‬‬
‫‪t‬‬
‫עתה בגלל שהפיקסל ‪ I  x , y , t‬נמצא בדיוק ב ‪ I  xdx , y dy ,tdt‬נוכל להניח‬
‫‪I  xdx , ydy ,tdt= I  x , y , t‬‬

‫‪I  xdx , y dy ,tdt=I  x , y , t ‬‬

‫ולכן נקבל את המשוואה שמתארת את התנועה‪ I x dxI y dyI t dt=0 :‬נחלק ב ‪ dt‬ונקבל את משוואת‬
‫‪dx‬‬
‫‪dy‬‬
‫=‪; v‬‬
‫=‪. u‬‬
‫ה ‪ I x uI y v=−I t Optic Flow‬כאשר הנעלמים ‪ u,v‬מקיימים‪:‬‬
‫‪dt‬‬
‫‪dt‬‬
‫בגלל שזו משוואה אחת ב‪ 2-‬נעלמים לכל פיקסל‪ ,‬לא ניתן לפתור אותה ויש לבצע הנחות נוספות‪.‬‬
‫כל אלגוריתם מבצע הנחה אחרת‪.‬‬
‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪Normal Flow‬‬
‫נגדיר ‪ – Normal Flow‬ה ‪ NF‬הוא רכיב התנועה בכיוון ניצב לגרדייינט הבהירות בתמונה‪ .‬ניתן לחלץ רק‬
‫את ‪ NF‬ממשוואת ה ‪) .OF‬לא ניתן לחלץ את התנועה לאורך גרדיינט התנועה(‬
‫הסבר‪ :‬נסתכל על מישור התנועה‪ u I x v I Y  I t =0 :‬מישור זה חייב להיות‬
‫‪Ix‬‬
‫=‪. ∇ I‬‬
‫במקביל ל‬
‫‪Iy‬‬

‫‪edge‬‬

‫‪‬‬

‫זאת היא ה ‪ - Apreture Problem‬לא ניתן לדעת האם ה ‪ edge‬נע רק ימינה או גם‬
‫למעלה ולמטה בגלל שכיוון ‪ y‬ניצב לגרדיטנט התאורה )כיוון ‪(x‬‬

‫‪edge‬‬

‫?‬

‫אלגוריתם )‪Lukas-Kande (81‬‬
‫אלגוריתם זה מניחה שבסביבה קטנה ה ‪ OF‬מתנהג באותה צורה )אותם ‪.(u,v‬‬
‫נבחר סביבה קטנה סביב כל פיקסל ‪ patch -‬בגודל ‪ 5‬על ‪:5‬‬

‫‪]   ‬‬

‫‪I x  P1  I x  P 1 ‬‬
‫‪I t P1‬‬
‫= ‪u‬‬
‫‪...‬‬
‫‪...‬‬
‫‪...‬‬
‫‪v‬‬
‫‪I x  P 25  I x  P 25‬‬
‫‪I t  P 25‬‬

‫[‬

‫זו היא משוואה‪ . Ax=b :‬משוואה זו היא ‪) over complete‬משוואה עם יותר משוואות מנעלמים(‪ ,‬כדי‬
‫להפוך אותה למשוואה ‪ complete‬בלבד נכפיל ב ‪ AT‬את ‪ 2‬האגפים )כשאנחנו מכפילים ב ‪ AT‬אנחנו‬
‫למעשה ממשים ‪ (least squares‬ונקבל‪:‬‬

‫] ∑∑[ ‪] ‬‬
‫‪IxIt‬‬
‫‪I yIt‬‬

‫= ‪u‬‬
‫‪v‬‬

‫‪∑ IxI x ∑Ix I y‬‬
‫‪∑ IxI y ∑I yI y‬‬

‫[‬

‫‪AT A x=AT b ‬‬

‫לעיתים מוסיפים פאקטור גאוסי ‪ g‬שתפיקדו לתת משקל לפיקסל המרכזי ב ‪patch‬‬

‫] ∑∑[ ‪] ‬‬
‫‪gI x I t‬‬
‫‪gI y I t‬‬

‫= ‪u‬‬
‫‪v‬‬

‫נסתכל על המטריצה‬

‫‪∑ gI x I x ∑ gI x I y‬‬
‫‪∑ gI x I y ∑ gI y I y‬‬

‫]‬

‫[‬

‫‪∑ gI x I x ∑ gI x I y‬‬
‫‪∑ gI x I y ∑ gI y I y‬‬

‫[‬

‫‪T‬‬
‫=‪ A A‬ונשאל מתי היא הפיכה‪ .‬התשובה תלויה בערכים‬

‫העצמיים של המטריצה נסמנם ‪ . 12‬נגדיר ערך שפה ‪‬‬
‫•‬

‫•‬
‫•‬

‫אם ‪ 1, 2‬אזי המטרציה לא הפיכה ולכן לא ניתן להאמין לה – זה קורא כאשר אין‬
‫‪ edge‬ב ‪patch‬‬
‫אם ‪ 1 ; 2‬אזי הנקודה על שפה ולא ניתן למקם אותה בשפה‪:‬‬
‫אם‬

‫‪ 1 , 2‬אזי הפיקסל ממוקם היטב )בין ‪(edges 2‬‬

‫נוכל להגדיר מדד ביטחון בכמה מיקום הפיקסל אמין‪:‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪score=1⋅2‬‬

‫מימוש ב ‪ .MATLAB‬קלט‪ 2 :‬תמונות‬

‫‪ . I 1, I 2‬פלט‪ :‬שדה התנועה‬

‫‪: u ,v‬‬
‫; ‪[ I x , I y ]=gradient  I 1‬‬
‫; ‪I t=I 2−I 1‬‬

‫נסמן‪:‬‬

‫‪I xx= I x .∗I x ; I xy= I x .∗I y ; I yy= I y .∗I y ; I xt =I x .∗I t ; I yt =I y .∗I t‬‬
‫;‪g = fspecial ' Gaussian ' , 5‬‬
‫‪G xx =imfilter  I xx , g  ; G xy =imfilter  I xy , g  ; G yy =imfilter  I yy , g  ; G xt , G yt ...‬‬
‫‪u=G yy .∗G xt −G xy .∗G yt /G xx .∗G yy−G xy .∗G xy ‬‬
‫‪v=G xx .∗G yt −G xy .∗G xt /G xx .∗G yy −G xy .∗G xy ‬‬

‫הערות‪:‬‬
‫•‬
‫•‬

‫המידע של ‪ motion field‬עבור כל פיקסל מגיע מ ‪ patch‬של ‪ 5×5‬שסביבו‪.‬‬
‫כדי לקבל ‪ u,v‬הפכנו מטריצה‬

‫‪ 2×2‬וקיבלנו ביטוי סגור ל ‪.u,v‬‬

‫‪Multi Resolution‬‬
‫קירוב ‪ LK‬עובד רק כאשר התנועה היא לפיקסל הקרוב‪ .‬לא ניתן לעבור יותר מפיקסל אחד‪ .‬אבל אם יישנם‬
‫רזולוציות שונות של תנועה בתמונה או לחלופין התנועה היא חדה מאוד יש לבצע את הפעולות‪:‬‬
‫•‬

‫בונים פרמידה גאוסיאנית לכל אחת מהתמונות‬

‫•‬

‫מריצים ‪ LK‬על הרמה העליונה‪ ,‬מתקנים את התנועה באמצעות מודל ‪ 2D‬כלשהו ברמה זו )‪(warp‬‬
‫ואז פותרים את הרמה הנמוכה יותר‪.‬‬

‫בפועל‪:‬‬
‫•‬

‫יש לבצע כמה איטרצות בכל רמה‬

‫•‬

‫ברמות הגבוהות )תשתוש גדול( משתמשים במודל ‪ 2DTrans‬וברמות הנוכות ‪.2DAffine‬‬

‫אלגוריתם )‪Horn-Schunk (81‬‬
‫‪2‬‬
‫לפי אלגוריתם זה נרצה למזער את‪ . E c =∬  I x uI y v I t  dx dy :‬הבעיה היא שאין מספיק אילוצים‬
‫במשוואה זו‪ .‬ולכן בדומה לשיאור הקודם נוסיף משקל ‪ prior‬שיאמר מהוא הסבירו ששדה התנועה הוא שדה‬
‫‪2‬‬
‫‪2‬‬
‫‪2‬‬
‫‪2‬‬
‫תנועה "אמיתי" – נניח כי ‪ OF‬חלק הם יותר טוב‪) E s =∬ u x u y  v x v y  dx dy :‬כלומר פיקסלים‬
‫סמוכים נעים בצורה דומה(‬

‫ובסה"כ נמזער‪. E c  E s :‬‬
‫נכתוב את הבעיה בכתיב מטריציוני‪ .‬נגדיר‪) :‬כאשר ‪ n‬הוא מספר הפיקסלים בתמונה(‬

‫‪   ‬‬
‫‪v  P1 ‬‬
‫‪...‬‬
‫‪v  P n‬‬

‫=‪; v‬‬

‫‪u  P 1‬‬
‫‪...‬‬
‫‪u  Pn‬‬

‫=‪u‬‬

‫‪H x =diag  I x  P 1 , .... , I x P n  ; H y =diag  I y  P 1 ,.... , I y  P n ‬‬

‫‪ ‬‬

‫‪I t P1‬‬
‫‪... = y‬‬
‫‪I t  P2‬‬
‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫=‪I t‬‬

‫][‬

‫‪u‬‬
‫ואז הבעיה בכיתב מטריציוני היא‪) [ H x H y ] = y :‬אילו הם מטריצות בלוקים(‬
‫‪v‬‬
‫ואז הפיתרון צריך להיות‪:‬‬

‫‪2‬‬

‫‪2‬‬

‫∣∣‪{ uopt , vopt }=argmin∣∣H x u−H y v − y∣∣ ∣∣D u D v‬‬
‫‪u ,v‬‬

‫כאשר ‪ D‬היא מטריצת אופרטור הלפלאסיאן‪ .‬כדי לפתור נגזור את הביטוי ונשווה ל‪ 0-‬ונקבל‪:‬‬
‫‪−1‬‬

‫‪] ‬‬
‫‪Hx y‬‬
‫‪Hy y‬‬

‫‪HxHy‬‬
‫‪H y H y  DT D‬‬

‫[‪ ‬‬

‫‪T‬‬
‫‪uopt = H x H x  D D‬‬
‫‪v opt‬‬
‫‪H yH x‬‬

‫הבעיה היא שהמשוואה היא ענקית ולכן צריך לפתור באיטרציות של ‪ steapest descent‬עם פרמטר‬
‫התכנסות‬

‫‪: ‬‬

‫‪][ ] [ ]‬‬

‫‪H xHy‬‬

‫‪u − Hxy‬‬
‫‪H y H y D D v m H y y‬‬
‫‪T‬‬

‫‪H x H x  DT D‬‬
‫‪HyHx‬‬

‫[‪‬‬

‫][ ][‬

‫‪= u −‬‬
‫‪v m‬‬
‫‪m1‬‬

‫‪u‬‬
‫‪v‬‬

‫‪.‬‬

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

‫הרחבה רובוסטית‬
‫במקום להשתמש בנורמה רגילה ניתן להשתמש בנורמה רובוסטית שפחות רגישה ל ‪.outlyers‬‬

‫‪Feature Detection‬‬
‫‪Haris Corrnor Detector‬‬
‫המטרה‪ :‬למצוא נקודות שהם בהצטלבות של ‪ edges‬שונים‪.‬‬

‫הרעיון הוא לתת לכל נקודה ‪u , v‬‬
‫דומה ל ‪.(L-K‬‬

‫בתמונה ציון‪:‬‬

‫‪) E u , v =∑  I  xu , yv −I  x , y 2‬נורא‬

‫הציון הזה הוא למעשה קח ‪ patch‬מסביב לפיקסל ותחפש סביבו‪ ,‬אם הפיקסים שסביב ל ‪ patch‬דומים לו‬
‫תתן ציון נמוך – זה לא ‪ edge‬טוב‪.‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪9.6.10‬‬

‫שיעור ‪14‬‬
‫תחומי מחקר עדכניים )פעילים(‬

‫‪Light Field – Plenoptic Function‬‬
‫הבעיה‪ :‬נרצה למדל את שדה הפוטונים שמגיע למצלמה מכל הכיוונים בערכי הגל השונים בזמן שונה‪:‬‬
‫‪ . P  ,  , , t ‬נוכל להכליל למדל את כל המצלמות‪. P  ,  , , t , x , y , z  :‬‬
‫אם היתה לנו הפונקציה הפלנופטית )‪ (P‬יכולנו למדל כל תמונה שנרצה ומכל כיוון‪.‬‬
‫בפועל אנחנו יכולים )כמו באפליקציה של ‪ (google earth – street view‬לעשות מספר תצלומי פנורמה של‬
‫המרחב‪.‬‬
‫נתחיל למדל‪ ,‬ראשית נזניח צבע‪ ,‬זמן ונניח כי אין דיספרציה של האור ולכן ‪ P‬היא פונקציה ‪ 4‬ממדית‬
‫המכילה ווקטורים‪.‬‬
‫איך נעשה מידול?‬
‫נניח כי הצבנו ‪ 2‬מצלמות אדומה וירוקה ונשמור את הקרניים שהם צילמו של‬
‫האובייקט בהתלה על ‪ 2‬מישורי ‪.reff‬‬
‫עכשיו נרצה למדל תמונה במקום הכחול ונרצה לשאול מהם רמות האפור ב‪2-‬‬
‫קרניים )‪ 2‬פיקסלים( ספציפיות על מצלמה הוירטואלית‪ .‬איך נעשה‬
‫זאת? נבחר בקרניים האדומה והירוקה שמתלקדות עם הקרניים‬
‫הוירטואליות הכחולות‪.‬‬
‫ניתן גם לייצר מצלמות שמשתמשות בעיקרון הזה ‪light field‬‬
‫‪ – cammera‬ומאפשרות הסתכלות על סצינה מסויימת בפוקוס שונה או ממקומות שונים‪.‬‬

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

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫‪Flutler Shutter‬‬
‫איך לשנות תכנון של מצלמה כדי שעיבוד תמונה דיגיטלי שיגיע לאחר מכן יהיה "יותר טוב"‪.‬‬
‫לייתר דיוק איך ניתן לעשות ‪.image – deblurring‬‬

‫נאמר כי יש לנו תמונה ‪ Y‬שמקורה בתמונה ‪ X‬שתושתשה עם פילטר ‪ H‬ורעש גאוסיאני ‪Y =X H v :v‬‬
‫ניתן לשחזר את ‪ X‬ע"י היפוך של ‪H‬‬
‫אבל‪..‬‬
‫איך נוצר ‪ ?blur‬הצמצם במצלמה רגיל נפתח‪ ,‬התמונה זזה ואז הוא נסגר – כלומר יש קונבולוציה בין‬
‫התמונה ל ‪ box‬בזמן )‪ H‬הוא ‪.(box filter‬‬
‫ניתן לעשות צמצם מתוחכם יותר שנפתח ונסגר בצורה טובה יותר כך שאין אפסים במרחב התדר )‪box‬‬
‫‪ filter‬במרחב התדר הוא ‪ (sinc‬ולכן הפונקציה הפיכה )בניגוד ל ‪ sinc‬שאינו הפיך ולכן לא ייציב(‬

‫‪Sparsity‬‬
‫ייצוג מקביל ל ‪ .laplacian pyramid‬יש לנו תמונה רועשת ואנחנו רוצים להוריד את הרעש לתמונה נקייה‪.‬‬
‫כזכור מהשיעורים הקודמים המטרה היא למצוא את ה ‪ prior‬של התמונה )מה הסיכוי שתמונה היא תמונה‬
‫אמיתית( – ‪ sparseland‬היא אחת האופציות‪.‬‬
‫הרעיון הוא כל ‪ patch‬בתמונה בגודל ‪ 8‬על ‪ 8‬נוכל להרכיב מבסיס יחסית גדול ולמדוד כמה ה ‪ patch‬הוא‬
‫קומבינציה לינארית של מספר קטן של איברים מהבסיס )‪ 3‬או ‪.(4‬‬
‫את הבסיס או המילון בונים מהתמונה עצמה‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

‫המבחן‬
‫•‬

‫שעתיים שלוש‬

‫•‬

‫יהיו ‪ 5-6‬שאלות כל אחד מהם ‪ 3‬סעיפים‪:‬‬
‫◦‬

‫חלק ראשון‪ :‬להציג כל אחד מהנושאים בפסקה בצורה ברורה‪ .‬לדוגמה ‪ – Bilateral Filter‬מה‬
‫זה‪ ,‬נוסחא‪ ,‬ולמה זה יותר טוב מ ‪.gausian filter‬‬

‫◦‬

‫מה הקשר בין נושאים אילו לנושאים אחרים שנלמדו )מחשבה עמוקה יותר(‬

‫◦‬

‫לא יהיה חישובים מתמטיים‬

‫החומר‬
‫לא כולל הנושאים מהיום‬
‫•‬

‫‪ – Sampling- Resampling‬תהליך רכישת התמונה‪ ,‬ההבדל בין מפוי ‪ Forward‬ל ‪– Backward‬‬
‫איך עושים אותם מה הבעיות בכל אחד‬

‫•‬

‫פרמידיות – איזה פרמידות יש‪ ,‬מהו הפילטר למה הוא נבחר‪ .‬שימושים לפרמידות‪.‬‬

‫•‬

‫‪Warping‬‬

‫•‬

‫‪ – Image Retargeting‬כל אחת מהשיטות מה היא מניחה כקלט מה היא עושה‬

‫•‬

‫•‬

‫◦‬

‫‪Seam curving‬‬

‫◦‬

‫‪Inhomogeneous Image scaling‬‬

‫◦‬

‫‪Bidirectional Similarity‬‬

‫◦‬

‫‪Shift Map‬‬

‫עריכה במרחב הגרדיאנטים‬
‫◦‬

‫משוואת ‪ Poisson‬ולפלס )ההבדל‪ :‬לפלס לא מניח מה צריכים להיות הגרדיאנטים בתוך‬
‫התמונה‪ ,‬ופואסון טוב להכנסה של תמונה בתמונה כאשר הגרדיאנטים בחור צריכים להתאים‬
‫לתמונה שמכניסים(‬

‫◦‬

‫שימושים‪:‬‬
‫▪‬

‫‪Image inpainting‬‬

‫▪‬

‫‪Image stitching‬‬

‫▪‬

‫‪) High Dynamic Range‬מכווצים גרדיאנטים גדולים(‬

‫▪‬

‫‪RGB2 Gray‬‬

‫פילטרים לשימור קצוות‬
‫◦‬

‫‪) Bilateral Filter‬וגם ‪ – cross Bilateral Filter‬עבור ‪ 2‬תמונות אחת שצולמה עם פלאש‬
‫והשנייה בלי פלאש באחת יש צבעים חמים אבל המון רעש ובשנייה הצבעים קרים אבל אין‬
‫רעש(‬

‫◦‬

‫‪) Anisotropic Diffusiion‬וגם ‪(scale space‬‬

‫◦‬

‫‪Non local means‬‬

‫◦‬

‫‪Robost Statistics‬‬

‫◦‬

‫שימושים‪:‬‬

‫לסיכומים נוספים‪www.mymentor.co.il/yonatan/ :‬‬

Edge Preseving Smoothing

Image Denoising

Bilateral Filter ‫ – בשיטה של‬HDR compression

Waveletes
Wavelet Function - HPF ‫ ו‬scale Function - LPF-‫איך עושים פירוק ל‬

Wavelet Compression, Wavelet Shrinkage for image denosing – ‫איך משתמשים‬

Image Completion

Textrure Synthesis

Super Resolution

(ML, MAP) ‫שיטה קלאסית‬

:‫שיטה מבוססת דוגמאות‬

Neatest Neighbors

MRF model

Single Scan

Single Image Super Resolution

Optic Flow
‫ הגדלה‬,‫ – איך נראה סוגים שונים – סיבוב‬Motion Filed

‫ההנחות‬

Normal Flow

Apreture Problem

LK, HS ,‫שתי השיטות לפיתרון‬

:‫להוסיף‬
2 ‫ – תרגיל‬Image Blending

www.mymentor.co.il/yonatan/ :‫לסיכומים נוספים‬

Related Interests