Método de interpolación de funciones en una cuadrícula 2D.
Ejemplo de interpolación bilineal en el cuadrado unitario con los valores de z 0, 1, 1 y 0,5 como se indica. Valores interpolados intermedios representados por color.
En matemáticas , la interpolación bilineal es un método para interpolar funciones de dos variables (por ejemplo, xey ) utilizando interpolación lineal repetida . Generalmente se aplica a funciones muestreadas en una cuadrícula rectilínea 2D , aunque se puede generalizar a funciones definidas en los vértices de (una malla de) cuadriláteros convexos arbitrarios .
La interpolación bilineal se realiza mediante interpolación lineal primero en una dirección y luego nuevamente en otra dirección. Aunque cada paso es lineal en los valores muestreados y en la posición, la interpolación en su conjunto no es lineal sino más bien cuadrática en la ubicación de la muestra.
Los cuatro puntos rojos muestran los puntos de datos y el punto verde es el punto en el que queremos interpolar.
Supongamos que queremos encontrar el valor de la función desconocida f en el punto ( x , y ). Se supone que conocemos el valor de f en los cuatro puntos Q 11 = ( x 1 , y 1 ), Q 12 = ( x 1 , y 2 ), Q 21 = ( x 2 , y 1 ) y Q 22 = ( x 2 , y 2 ).
Interpolación lineal repetida
Primero hacemos una interpolación lineal en la dirección x . Esto produce
Procedemos interpolando en la dirección y para obtener la estimación deseada:
Tenga en cuenta que llegaremos al mismo resultado si la interpolación se realiza primero en la dirección y y luego en la dirección x . [1]
Ajuste polinomial
Una forma alternativa es escribir la solución al problema de interpolación como un polinomio multilineal.
donde los coeficientes se encuentran resolviendo el sistema lineal
dando el resultado
media ponderada
Una visualización geométrica de la interpolación bilineal. El producto del valor en el punto deseado (negro) y el área completa es igual a la suma de los productos del valor en cada esquina y el área parcial diagonalmente opuesta a la esquina (colores correspondientes).
La solución también se puede escribir como una media ponderada de f ( Q ):
donde los pesos suman 1 y satisfacen el sistema lineal transpuesto
dando el resultado
lo que simplifica a
de acuerdo con el resultado obtenido por interpolación lineal repetida. El conjunto de pesos también se puede interpretar como un conjunto de coordenadas baricéntricas generalizadas para un rectángulo.
Forma matricial alternativa
Combinando lo anterior, tenemos
En el cuadrado unitario
Si elegimos un sistema de coordenadas en el que los cuatro puntos donde se conoce f son (0, 0), (0, 1), (1, 0) y (1, 1), entonces la fórmula de interpolación se simplifica a
o equivalentemente, en operaciones matriciales:
Aquí también reconocemos los pesos:
Alternativamente, el interpolante en el cuadrado unitario se puede escribir como
dónde
En ambos casos, el número de constantes (cuatro) corresponde al número de puntos de datos donde se da f .
Propiedades
Comparación de la interpolación bilineal con algunas interpolaciones unidimensionales y bidimensionales. Los puntos negro y rojo / amarillo / verde / azul corresponden al punto interpolado y a las muestras vecinas, respectivamente. Sus alturas sobre el suelo corresponden a sus valores.
Como sugiere el nombre, el interpolante bilineal no es lineal; pero es lineal (es decir, afín) a lo largo de líneas paralelas a la dirección x o y , de manera equivalente si x o y se mantienen constantes. A lo largo de cualquier otra línea recta, la interpolante es cuadrática . Aunque la interpolación no es lineal en la posición ( x e y ), en un punto fijo es lineal en los valores de interpolación, como se puede ver en las ecuaciones (matriciales) anteriores.
El resultado de la interpolación bilineal es independiente de qué eje se interpola primero y cuál segundo. Si primero hubiéramos realizado la interpolación lineal en la dirección y y luego en la dirección x , la aproximación resultante sería la misma.
En general, el interpolante asumirá cualquier valor (en la capa convexa de los valores de los vértices) en un número infinito de puntos (formando ramas de hipérbolas [2] ), por lo que la interpolación no es invertible.
Sin embargo, cuando se aplica la interpolación bilineal a dos funciones simultáneamente, como cuando se interpola un campo vectorial , entonces la interpolación es invertible (bajo ciertas condiciones). En particular, esta inversa se puede utilizar para encontrar las "coordenadas del cuadrado unitario" de un punto dentro de cualquier cuadrilátero convexo (considerando las coordenadas del cuadrilátero como un campo vectorial que se interpola bilinealmente en el cuadrado unitario). Utilizando este procedimiento, la interpolación bilineal se puede extender a cualquier cuadrilátero convexo, aunque el cálculo es significativamente más complicado si no es un paralelogramo. [3] El mapa resultante entre cuadriláteros se conoce como transformación bilineal , deformación bilineal o distorsión bilineal .
Alternativamente, se puede utilizar un mapeo proyectivo entre un cuadrilátero y el cuadrado unitario, pero el interpolante resultante no será bilineal.
En el caso especial en el que el cuadrilátero es un paralelogramo , existe una aplicación lineal al cuadrado unitario y la generalización se sigue fácilmente.
La extensión obvia de la interpolación bilineal a tres dimensiones se llama interpolación trilineal .
Aplicación en el procesamiento de imágenes.
En visión por computadora y procesamiento de imágenes , la interpolación bilineal se utiliza para volver a muestrear imágenes y texturas. Se utiliza un algoritmo para asignar la ubicación de un píxel de la pantalla a un punto correspondiente en el mapa de textura . Se calcula y aplica al píxel de la pantalla un promedio ponderado de los atributos (color, transparencia, etc.) de los cuatro texels circundantes . Este proceso se repite para cada píxel que forma el objeto que se está texturizando. [4]
Cuando es necesario ampliar una imagen, cada píxel de la imagen original debe moverse en una dirección determinada según la constante de escala. Sin embargo, al ampliar una imagen mediante un factor de escala no integral, hay píxeles (es decir, agujeros ) a los que no se les asignan valores de píxel apropiados. En este caso, a esos agujeros se les deben asignar valores RGB o de escala de grises apropiados para que la imagen de salida no tenga píxeles sin valores.
La interpolación bilineal se puede utilizar cuando es imposible una transformación perfecta de la imagen con coincidencia de píxeles, de modo que se puedan calcular y asignar valores de intensidad adecuados a los píxeles. A diferencia de otras técnicas de interpolación, como la interpolación del vecino más cercano y la interpolación bicúbica , la interpolación bilineal utiliza valores de solo los 4 píxeles más cercanos, ubicados en direcciones diagonales desde un píxel determinado, para encontrar los valores de intensidad de color apropiados de ese píxel.
La interpolación bilineal considera la vecindad 2 × 2 más cercana de valores de píxeles conocidos que rodean la ubicación calculada del píxel desconocido. Luego se necesita un promedio ponderado de estos 4 píxeles para llegar a su valor final interpolado. [5] [6]
Ejemplo de interpolación bilineal en valores en escala de grises.
Ejemplo
Como se ve en el ejemplo de la derecha, el valor de intensidad en el píxel calculado en la fila 20.2, columna 14.5 se puede calcular interpolando primero linealmente entre los valores en las columnas 14 y 15 en cada fila 20 y 21, dando
y luego interpolando linealmente entre estos valores, dando
Este algoritmo reduce parte de la distorsión visual causada al cambiar el tamaño de una imagen a un factor de zoom no integral, a diferencia de la interpolación del vecino más cercano, que hará que algunos píxeles parezcan más grandes que otros en la imagen redimensionada.
^ Prensa, William H.; Teukolsky, Saúl A.; Vetterling, William T.; Flannery, Brian P. (1992). Recetas numéricas en C: el arte de la informática científica (2ª ed.). Nueva York, NY, Estados Unidos: Cambridge University Press. págs. 123-128. ISBN 0-521-43108-5.
^ Monasse, Pascal (10 de agosto de 2019). "Extracción de las líneas de nivel de una imagen bilineal". Procesamiento de Imágenes en Línea . 9 : 205-219. doi : 10.5201/ipol.2019.269 . ISSN 2105-1232.
^ Quilez, Íñigo (2010). "Interpolación bilineal inversa". iquilezles.org . Archivado desde el original el 13 de agosto de 2010 . Consultado el 17 de febrero de 2024 .
^ Definición de interpolación bilineal (artículo popular en www.pcmag.com.
^ Khosravi, señor (19 de marzo de 2021). "BL-ALM: un filtro de reconstrucción guiado por bordes ciego y escalable para un monitoreo ambiental inteligente a través de redes ecológicas IoMT-UAV". Transacciones IEEE sobre redes y comunicaciones ecológicas . 5 (2): 727–736. doi :10.1109/TGCN.2021.3067555. S2CID 233669511.
^ "Tutorial web: Interpolación de imágenes digitales".