logo

מושג הקונבולציה

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

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

מושג הקונבולציה

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

ב-Convolution, המטריצה ​​אינה מבצעת כפל מטריצה ​​מסורתית, אך היא מסומנת ב-*.

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

להלן קוד פסאודו לתיאור תהליך הקונבולציה:

java ו-swing
 For each image row in input image: For each pixel in image row: Set accumulator to zero For each kernel row in kernel: For each element in kernel row: If element position corresponding* to pixel position then Multiply element value corresponding*to pixelvalue Add result to accumulator Endif Set output image pixel to accumulator 

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

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

כדי להתגבר על בעיות אלו ניתן לעשות את הדברים הבאים:

  1. אפשר להתעלם מאלה
  2. ניתן ליצור פיקסלים נוספים ליד הקצוות.

ניתן ליצור פיקסלים נוספים בדרכים הבאות:

  1. שכפול פיקסל קצה.
  2. משקף קצוות
  3. ניתן להעתיק פיקסלים מהקצה השני.