Interpolación bilineal
La interpolación bilineal es un método de interpolación para funciones de dos variables en una cuadrícula regular ( pulgadas ) . Permite calcular el valor de una función en cualquier punto, a partir de sus dos vecinos más cercanos en cada dirección. Es un método ampliamente utilizado en imágenes digitales para cambiar el tamaño de la imagen , que proporciona mejores resultados que la interpolación del vecino más cercano, sin dejar de tener una complejidad razonable.
Principio general
Al contrario de lo que sugiere su nombre, la función de interpolación no es una forma lineal sino cuadrática, que se puede poner en la forma:
F(X,y)=aX+By+vsXy+D.{\ displaystyle f (x, y) = ax + by + cxy + d.}El valor f ( x , y ) es el valor interpolado en el punto de coordenadas ( x , y ) , y a , b , c , d son constantes determinadas a partir de los cuatro vecinos ( x 1 , y 1 ), ( x 1 , y 2 ), ( x 2 , y 1 ), ( x 2 , y 2 ) del punto ( x , y ) cuyo valor estamos buscando. Conociendo los valores en estos puntos, podemos escribir un sistema de 4 ecuaciones con 4 incógnitas :
{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} + por_ {2} + cx_ {1} y_ {2} + d \\ f (x_ {2}, y_ {2}) = ax_ {2} + por_ {2} + cx_ {2} y_ {2} + d \ end {matriz}} \ right.}La interpolación bilineal se puede interpretar como una sucesión de dos interpolaciones lineales , una en cada dirección.
Solución de sistema
Un cambio de variable simplifica considerablemente el sistema a resolver. Considere las siguientes variables nuevas:
DX=X-X1,Dy=y-y1,{\ Displaystyle dx = x-x_ {1}, \ quad dy = y-y_ {1},}donde ( x 1 , y 1 ) son las coordenadas de la esquina inferior izquierda. A continuación, se escribe la nueva función de interpolación bilineal:
F(DX,Dy)=aDX+BDy+vsDXDy+D.{\ Displaystyle f (dx, dy) = a \, dx + b \, dy + c \, dx \, dy + d.}Al introducir las notaciones y , la matriz a invertir se convierte en:
Δ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}}} .
Queda por introducir las siguientes notaciones:
Δ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 solución de la función de interpolación bilineal del problema viene directamente:
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}).}
Referencias
-
(en) Rafael C.González y Richard E. Woods, Procesamiento de imágenes digitales , Prentice Hall,2008, “Muestreo y cuantificación de imágenes”, pág. 66.
Artículos relacionados
<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">