אינטרפולציה ביליניארית

במתמטיקה, אינטרפולציה ביליניארית היא מקרה פרטי של אינטרפולציה ליניארית עבור פונקציות אינטרפולציה של שני משתנים (למשל, x ו - y) על מרובע מרושת בשני ממדים (2D). רעיון המפתח הוא לבצע אינטרפולציה ליניארית קודם בכיוון אחד, ואז שוב לכיוון השני. למרות שכל צעד הוא ליניארי בערכו, האינטרפולציה בכללותה אינה ליניארית אלא ריבועית עבור מיקום הדגימה. נניח שאנו רוצים למצוא את הערך של הפונקציה הלא ידועה f {\displaystyle f} בנקודה ( x , y ) {\displaystyle (x,y)} . ההנחה היא כי אנחנו יודעים את הערך של f {\displaystyle f} בארבע הנקודות: Q 11 = ( x 1 , y 1 ) Q 12 = ( x 1 , y 2 ) Q 21 = ( x 2 , y 1 ) Q 22 = ( x 2 , y 2 ) {\displaystyle {\begin{aligned}Q_{11}=(x_{1},y_{1})\\Q_{12}=(x_{1},y_{2})\\Q_{21}=(x_{2},y_{1})\\Q_{22}=(x_{2},y_{2})\end{aligned}}} ראשית נעשה אינטרפולציה ליניארית בכיוון x {\displaystyle x} . זו מניבה: f ( x , y 1 ) ≈ x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) f ( x , y 2 ) ≈ x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) {\displaystyle {\begin{aligned}f(x,y_{1})&\approx {\frac {x_{2}-x}{x_{2}-x_{1}}}f(Q_{11})+{\frac {x-x_{1}}{x_{2}-x_{1}}}f(Q_{21})\\f(x,y_{2})&\approx {\frac {x_{2}-x}{x_{2}-x_{1}}}f(Q_{12})+{\frac {x-x_{1}}{x_{2}-x_{1}}}f(Q_{22})\end{aligned}}} נמשיך על ידי אינטרפולציה בכיוון y {\displaystyle y} כדי להשיג את ההערכה הרצויה: f ( x , y ) ≈ y 2 − y y 2 − y 1 f ( x , y 1 ) + y − y 1 y 2 − y 1 f ( x , y 2 ) ≈ y 2 − y y 2 − y 1 ( x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) ) + y − y 1 y 2 − y 1 ( x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) ) = 1 ( x 2 − x 1 ) ( y 2 − y 1 ) ( f ( Q 11 ) ( x 2 − x ) ( y 2 − y ) + f ( Q 21 ) ( x − x 1 ) ( y 2 − y ) + f ( Q 12 ) ( x 2 − x ) ( y − y 1 ) + f ( Q 22 ) ( x − x 1 ) ( y − y 1 ) ) = 1 ( x 2 − x 1 ) ( y 2 − y 1 ) [ x 2 − x x − x 1 ] [ f ( Q 11 ) f ( Q 12 ) f ( Q 21 ) f ( Q 22 ) ] [ y 2 − y y − y 1 ] {\displaystyle {\begin{aligned}f(x,y)&\approx {\frac {y_{2}-y}{y_{2}-y_{1}}}f(x,y_{1})+{\frac {y-y_{1}}{y_{2}-y_{1}}}f(x,y_{2})\\&\approx {\frac {y_{2}-y}{y_{2}-y_{1}}}\left({\frac {x_{2}-x}{x_{2}-x_{1}}}f(Q_{11})+{\frac {x-x_{1}}{x_{2}-x_{1}}}f(Q_{21})\right)+{\frac {y-y_{1}}{y_{2}-y_{1}}}\left({\frac {x_{2}-x}{x_{2}-x_{1}}}f(Q_{12})+{\frac {x-x_{1}}{x_{2}-x_{1}}}f(Q_{22})\right)\\&={\frac {1}{(x_{2}-x_{1})(y_{2}-y_{1})}}\left(f(Q_{11})(x_{2}-x)(y_{2}-y)+f(Q_{21})(x-x_{1})(y_{2}-y)+f(Q_{12})(x_{2}-x)(y-y_{1})+f(Q_{22})(x-x_{1})(y-y_{1})\right)\\&={\frac {1}{(x_{2}-x_{1})(y_{2}-y_{1})}}{\begin{bmatrix}x_{2}-x&x-x_{1}\end{bmatrix}}{\begin{bmatrix}f(Q_{11})&f(Q_{12})\\f(Q_{21})&f(Q_{22})\end{bmatrix}}{\begin{bmatrix}y_{2}-y\\y-y_{1}\end{bmatrix}}\end{aligned}}} יש לשים לב כי אנו מגיעים לאותה תוצאה אם נעשה אינטרפולציה קודם לאורך כיוון y {\displaystyle y} ואז לאורך כיוון x {\displaystyle x} . דרך חלופית לכתוב את הפתרון לבעיית האינטרפולציה: f ( x , y ) ≈ a 0 + a 1 x + a 2 y + a 3 x y {\displaystyle f(x,y)\approx a_{0}+a_{1}x+a_{2}y+a_{3}xy} כאשר המקדמים הם פתרון המערכת הליניארית: [ 1 x 1 y 1 x 1 y 1 1 x 1 y 2 x 1 y 2 1 x 2 y 1 x 2 y 1 1 x 2 y 2 x 2 y 2 ] [ a 0 a 1 a 2 a 3 ] = [ f ( Q 11 ) f ( Q 12 ) f ( Q 21 ) f ( Q 22 ) ] {\displaystyle {\begin{aligned}{\begin{bmatrix}1&x_{1}&y_{1}&x_{1}y_{1}\\1&x_{1}&y_{2}&x_{1}y_{2}\\1&x_{2}&y_{1}&x_{2}y_{1}\\1&x_{2}&y_{2}&x_{2}y_{2}\end{bmatrix}}{\begin{bmatrix}a_{0}\\a_{1}\\a_{2}\\a_{3}\end{bmatrix}}={\begin{bmatrix}f(Q_{11})\\f(Q_{12})\\f(Q_{21})\\f(Q_{22})\end{bmatrix}}\end{aligned}}} אם פתרון מועדף מבחינת (f(Q אז אנחנו יכולים לכתוב: f ( x , y ) ≈ b 11 f ( Q 11 ) + b 12 f ( Q 12 ) + b 21 f ( Q 21 ) + b 22 f ( Q 22 ) {\displaystyle f(x,y)\approx b_{11}f(Q_{11})+b_{12}f(Q_{12})+b_{21}f(Q_{21})+b_{22}f(Q_{22})} שבו המקדמים הם פתרון של: [ b 11 b 12 b 21 b 22 ] = ( [ 1 x 1 y 1 x 1 y 1 1 x 1 y 2 x 1 y 2 1 x 2 y 1 x 2 y 1 1 x 2 y 2 x 2 y 2 ] − 1 ) T [ 1 x y x y ] {\displaystyle {\begin{bmatrix}b_{11}\\b_{12}\\b_{21}\\b_{22}\end{bmatrix}}=\left({\begin{bmatrix}1&x_{1}&y_{1}&x_{1}y_{1}\\1&x_{1}&y_{2}&x_{1}y_{2}\\1&x_{2}&y_{1}&x_{2}y_{1}\\1&x_{2}&y_{2}&x_{2}y_{2}\end{bmatrix}}^{-1}\right)^{T}{\begin{bmatrix}1\\x\\y\\xy\end{bmatrix}}} אם אנו בוחרים מערכת קואורדינטות בה ארבע נקודות כאשר f {\displaystyle f} הידועות הן (0, 0), (0, 1), (1, 0), (1, 1), ואז אינטרפולציה הנוסחה מפושטת לכדי: f ( x , y ) ≈ f ( 0 , 0 ) ( 1 − x ) ( 1 − y ) + f ( 1 , 0 ) x ( 1 − y ) + f ( 0 , 1 ) ( 1 − x ) y + f ( 1 , 1 ) x y . {\displaystyle f(x,y)\approx f(0,0)(1-x)(1-y)+f(1,0)x(1-y)+f(0,1)(1-x)y+f(1,1)xy.} או באופן שקול, לפעולה המטריציונית: f ( x , y ) ≈ [ 1 − x x ] [ f ( 0 , 0 ) f ( 0 , 1 ) f ( 1 , 0 ) f ( 1 , 1 ) ] [ 1 − y y ] . {\displaystyle f(x,y)\approx {\begin{bmatrix}1-x&x\end{bmatrix}}{\begin{bmatrix}f(0,0)&f(0,1)\\f(1,0)&f(1,1)\end{bmatrix}}{\begin{bmatrix}1-y\\y\end{bmatrix}}.} בניגוד למה שהשם מרמז, אינטרפולציה ביליניארית, אינה ליניארית; אלא תוצר של שתי פונקציות ליניאריות. לחלופין, ניתן לכתוב: f ( x , y ) = ∑ i = 0 1 ∑ j = 0 1 a i j x i y j = a 00 + a 10 x + a 01 y + a 11 x y {\displaystyle f(x,y)=\sum _{i=0}^{1}\sum _{j=0}^{1}a_{ij}x^{i}y^{j}=a_{00}+a_{10}x+a_{01}y+a_{11}xy} כאשר a 00 = f ( 0 , 0 ) {\displaystyle a_{00}=f(0,0)} a 10 = f ( 1 , 0 ) − f ( 0 , 0 ) {\displaystyle a_{10}=f(1,0)-f(0,0)} a 01 = f ( 0 , 1 ) − f ( 0 , 0 ) {\displaystyle a_{01}=f(0,1)-f(0,0)} a 11 = f ( 1 , 1 ) + f ( 0 , 0 ) − ( f ( 1 , 0 ) + f ( 0 , 1 ) ) {\displaystyle a_{11}=f(1,1)+f(0,0)-(f(1,0)+f(0,1))} בשני המקרים, מספר הקבועים (ארבעה) תואמים את מספר נקודות הנתונים בהן נתון f {\displaystyle f} את האינטרפולנט הליניארי לאורך הקווים המקבילים בכיוון x {\displaystyle x} או y {\displaystyle y} , באופן שקול, אם x {\displaystyle x} או y {\displaystyle y} מוגדר כקבוע. לאורך כל קו ישר אחר, האינטרפולציה היא ריבועית. עם זאת, גם אם אינטרפולציה אינה ליניארי בנקודה ( x {\displaystyle x} ו - y {\displaystyle y} ), היא ליניארית במשרעת, כפי שיוצא מן המשוואות לעיל: כל מקדם b j , j = 1..4 {\displaystyle bj,j=1..4} , פרופורציונליים לערך של הפונקציה f ( , ) {\displaystyle f(,)} . התוצאה של אינטרפולציה ביליניארית, אינה תלויה בבחירת הציר הראשון לאינטרפולציה. כלומר אם נבחרלבצע את אינטרפולציה הליניארית קודם בכיוון y {\displaystyle y} ואז ב x {\displaystyle x} , תוצאת הקירוב תהיה זהה. הרחבה ברורה של אינטרפולציה ביליניארית לשלושה ממדים נקראת אינטרפולציה תרילינארית. בראייה ממוחשבת ו עיבוד תמונה, אינטרפולציה ביליניארית הוא טכניקה בסיסית של "Resampling". בתוך מיפוי מרקם, שימוש זה ידוע גם בשם סינון ביליניארי או מיפוי מרקם ביליניארי, ויכול לשמש כדי לייצר תמונה מציאותית סבירה. אלגוריתם משמש למפות מיקום של פיקסל, המקביל לנקודה על מפת המרקם. ממוצע משוקלל של מאפיינים (צבע, אלפא, וכו'.) של ארבעת הרכיבים שמסביב, מחושב, ומיוצר על המסך פיקסל. תהליך זה חוזר על עצמו עבור כל פיקסל ויוצרים את המרקם כולו. אינטרפולציה ביליניארית מחשיבה את 2x2 הערכים הקרובים של ערכי פיקסל ידועים לפיקסל הלא ידוע. אז נלקח ממוצע משוקלל של 4 הפיקסלים להגיע לערך הסופי של האינטרפולציה. המשקל שעל כל 4 הפיקסלים ערכים מבוסס על מרחק פיקסל מחושב (בשטח 2D) מכל אחת מהנקודות הידועות. כפי שניתן לראות בדוגמה משמאל, ערך העצמה בפיקסל שחושב להיות בשורה 20.2, וטור 14.5 יכול להיות מחושב על ידי אינטרפולציה ליניארית ראשונה בין הערכים בטור 14 ו-15 על כל שורות 20, 21, הנותנת: I 20 , 14.5 = 15 − 14.5 15 − 14 ⋅ 91 + 14.5 − 14 15 − 14 ⋅ 210 = 150.5 I 21 , 14.5 = 15 − 14.5 15 − 14 ⋅ 162 + 14.5 − 14 15 − 14 ⋅ 95 = 128.5 {\displaystyle {\begin{aligned}I_{20,14.5}&={\tfrac {15-14.5}{15-14}}\cdot 91+{\tfrac {14.5-14}{15-14}}\cdot 210=150.5\\I_{21,14.5}&={\tfrac {15-14.5}{15-14}}\cdot 162+{\tfrac {14.5-14}{15-14}}\cdot 95=128.5\end{aligned}}} ואז מבצעים אינטרפולציה באופן ליניארי בין ערכים אלה, הנותנת: I 20.2 , 14.5 = 21 − 20.2 21 − 20 ⋅ 150.5 + 20.2 − 20 21 − 20 ⋅ 128.5 = 146.1 {\displaystyle I_{20.2,14.5}={\tfrac {21-20.2}{21-20}}\cdot 150.5+{\tfrac {20.2-20}{21-20}}\cdot 128.5=146.1} אלגוריתם זה מפחית חלק מהעיוות החזותי שנגרם על ידי שינוי גודל תמונה על ידי רכיב "זום" (zoom) לא אינטגרלי, בניגוד לאינטרפולציה "השכן הקרוב", אשר תגרום לקצת פיקסלים להיראות גדולים יותר מאשר אחרים, בתמונה המוגדלת. קואורדינטות בריצנטריות מדיה וקבצים בנושא אינטרפולציה ביליניארית בוויקישיתוף Bilinear interpolation definition at www.pcmag.com "Digital Image Interpolation"