Interpolazione bilineare
L' interpolazione bilineare è un metodo di interpolazione per funzioni di due variabili su una griglia regolare (in) . Calcola il valore di una funzione in qualsiasi punto, dai suoi due vicini più vicini in ciascuna direzione. È un metodo ampiamente utilizzato nell'imaging digitale per il ridimensionamento delle immagini , che fornisce risultati migliori rispetto all'interpolazione del vicino più vicino, pur rimanendo di ragionevole complessità.
Principio generale
Contrariamente a quanto suggerisce il nome, la funzione di interpolazione non è una forma lineare ma quadratica, che può essere messa nella forma:
f(X,y)=aX+by+vsXy+d.{\ displaystyle f (x, y) = ax + by + cxy + d.}Il valore f ( x , y ) è il valore interpolato nel punto delle coordinate ( x , y ) e a , b , c , d sono costanti determinate dai quattro vicini ( x 1 , y 1 ), ( x 1 , y 2 ), ( x 2 , y 1 ), ( x 2 , y 2 ) del punto ( x , y ) di cui stiamo cercando il valore. Conoscendo i valori in questi punti, possiamo scrivere un sistema di 4 equazioni con 4 incognite :
{f(X1,y1)=aX1+by1+vsX1y1+df(X2,y1)=aX2+by1+vsX2y1+df(X1,y2)=aX1+by2+vsX1y2+df(X2,y2)=aX2+by2+vsX2y2+d{\ displaystyle \ left \ {{\ begin {matrix} f (x_ {1}, y_ {1}) = ax_ {1} + by_ {1} + cx_ {1} y_ {1} + d \\ f ( x_ {2}, y_ {1}) = ax_ {2} + by_ {1} + cx_ {2} y_ {1} + d \\ f (x_ {1}, y_ {2}) = ax_ {1} + by_ {2} + cx_ {1} y_ {2} + d \\ f (x_ {2}, y_ {2}) = ax_ {2} + by_ {2} + cx_ {2} y_ {2} + d \ end {matrice}} \ right.}L'interpolazione bilineare può essere interpretata come una successione di due interpolazioni lineari , una in ciascuna direzione.
Soluzione di sistema
Un cambio di variabile semplifica notevolmente il sistema da risolvere. Considera le seguenti nuove variabili:
dX=X-X1,dy=y-y1,{\ displaystyle dx = x-x_ {1}, \ quad dy = y-y_ {1},}dove ( x 1 , y 1 ) sono le coordinate dell'angolo inferiore sinistro. Viene quindi scritta la nuova funzione di interpolazione bilineare:
f(dX,dy)=adX+bdy+vsdXdy+d.{\ Displaystyle f (dx, dy) = a \, dx + b \, dy + c \, dx \, dy + d.}Introducendo le notazioni e , la matrice da invertire diventa:
ΔX=X2-X1{\ displaystyle \ Delta x = x_ {2} -x_ {1}}Δy=y2-y1{\ displaystyle \ Delta y = y_ {2} -y_ {1}}
A=(0001ΔX0010Δy01ΔXΔyΔXΔy1){\ displaystyle A = {\ begin {pmatrix} 0 & 0 & 0 & 1 \\\ Delta x & 0 & 0 & 1 \\ 0 & \ Delta y & 0 & 1 \\\ Delta x & \ Delta y & \ Delta x \ Delta y & 1 \\\ end {pmatrix}}} .
Resta da introdurre le seguenti notazioni:
ΔfX=f(X2,y1)-f(X1,y1),Δfy=f(X1,y2)-f(X1,y1),{\ displaystyle \ Delta f_ {x} = f (x_ {2}, y_ {1}) - f (x_ {1}, y_ {1}), \ quad \ Delta f_ {y} = f (x_ {1 }, y_ {2}) - f (x_ {1}, y_ {1}),}
ΔfXy=f(X1,y1)+f(X2,y2)-f(X2,y1)-f(X1,y2).{\ Displaystyle \ Delta f_ {xy} = f (x_ {1}, y_ {1}) + f (x_ {2}, y_ {2}) - f (x_ {2}, y_ {1}) - f (x_ {1}, y_ {2}).}
La soluzione della funzione di interpolazione bilineare del problema viene quindi direttamente:
f(X,y)=ΔfXdXΔX+ΔfydyΔy+ΔfXydXΔXdyΔy+f(X1,y1).{\ displaystyle f (x, y) = \ Delta f_ {x} {\ frac {dx} {\ Delta x}} + \ Delta f_ {y} {\ frac {dy} {\ Delta y}} + \ Delta f_ {xy} {\ frac {dx} {\ Delta x}} {\ frac {dy} {\ Delta y}} + f (x_ {1}, y_ {1}).}
Riferimenti
-
(a) Rafael C. Gonzalez e Richard E. Woods, Digital Image Processing , Prentice Hall,2008, "Campionamento e quantizzazione delle immagini", p. 66.
Articoli Correlati
<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">