Interpolación bicúbica

Comparación de la interpolación bicúbica con algunas interpolaciones unidimensionales y bidimensionales. Los colores Negro y Rojo/Amarillo/Verde/Azul corresponden al punto interpolado y a las muestras vecinas, respectivamente.
Sus alturas sobre la referencia horizontal corresponden a sus valores

En matemáticas, la interpolación bicúbica es una extensión de la interpolación cúbica (un método para aplicar la interpolación cúbica a un conjunto de datos dispuestos en un retículo regular bidimensional. La superficie interpolada (es decir, la forma del núcleo, no la imagen) es más suave que las superficies correspondientes obtenidas por interpolación bilineal o por interpolación por el vecino más cercano. La interpolación bicúbica se puede lograr utilizando el algoritmo de interpolación polinómica de Lagrange, spline cúbico o convolución cúbica.

En procesamiento digital de imágenes, la interpolación bicúbica a menudo se elige en lugar de la interpolación bilineal o la del vecino más cercano en procesamiento de imágenes, cuando la velocidad del proceso no es un problema. A diferencia de la interpolación bilineal, que solo tiene en cuenta 4 píxeles (2×2), la interpolación bicúbica considera 16 píxeles (4×4). Las imágenes remuestreadas con interpolación bicúbica pueden presentar artefactos de interpolación diferentes, dependiendo de los valores de los parámetros b y c elegidos.

Computación

Interpolación bicúbica en el cuadrado [ 0 , 4 ] × [ 0 , 4 ] {\displaystyle [0,4]\times [0,4]} que consta de 25 cuadrados unitarios unidos. Interpolación bicúbica según la implementación del programa Matplotlib. El color indica el valor de la función. Los puntos negros son las ubicaciones de los datos prescritos que se interpolan. Obsérvese cómo las muestras de color no son radialmente simétricas
Interpolación bilineal en el mismo conjunto de datos que el anterior. Las derivadas de la superficie no son continuas sobre los límites del cuadrado
Interpolación por el vecino más cercano en el mismo conjunto de datos que en el ejemplo anterior

Supóngase que los valores de la función f {\displaystyle f} y las derivadas f x {\displaystyle f_{x}} , f y {\displaystyle f_{y}} y f x y {\displaystyle f_{xy}} se conocen en las cuatro esquinas ( 0 , 0 ) {\displaystyle (0,0)} , ( 1 , 0 ) {\displaystyle (1,0)} , ( 0 , 1 ) {\displaystyle (0,1)} y ( 1 , 1 ) {\displaystyle (1,1)} del cuadrado unitario. La superficie interpolada se puede expresar como

p ( x , y ) = i = 0 3 j = 0 3 a i j x i y j . {\displaystyle p(x,y)=\sum \limits _{i=0}^{3}\sum _{j=0}^{3}a_{ij}x^{i}y^{j}.}

El problema de interpolación consiste en determinar los 16 coeficientes a i j {\displaystyle a_{ij}} . Al hacer coincidir p ( x , y ) {\displaystyle p(x,y)} con los valores de la función se obtienen cuatro ecuaciones:

  1. f ( 0 , 0 ) = p ( 0 , 0 ) = a 00 , {\displaystyle f(0,0)=p(0,0)=a_{00},}
  2. f ( 1 , 0 ) = p ( 1 , 0 ) = a 00 + a 10 + a 20 + a 30 , {\displaystyle f(1,0)=p(1,0)=a_{00}+a_{10}+a_{20}+a_{30},}
  3. f ( 0 , 1 ) = p ( 0 , 1 ) = a 00 + a 01 + a 02 + a 03 , {\displaystyle f(0,1)=p(0,1)=a_{00}+a_{01}+a_{02}+a_{03},}
  4. f ( 1 , 1 ) = p ( 1 , 1 ) = i = 0 3 j = 0 3 a i j . {\displaystyle f(1,1)=p(1,1)=\textstyle \sum \limits _{i=0}^{3}\sum \limits _{j=0}^{3}a_{ij}.}

Asimismo, se generan ocho ecuaciones para las derivadas en las direcciones x {\displaystyle x} e y {\displaystyle y} :

  1. f x ( 0 , 0 ) = p x ( 0 , 0 ) = a 10 , {\displaystyle f_{x}(0,0)=p_{x}(0,0)=a_{10},}
  2. f x ( 1 , 0 ) = p x ( 1 , 0 ) = a 10 + 2 a 20 + 3 a 30 , {\displaystyle f_{x}(1,0)=p_{x}(1,0)=a_{10}+2a_{20}+3a_{30},}
  3. f x ( 0 , 1 ) = p x ( 0 , 1 ) = a 10 + a 11 + a 12 + a 13 , {\displaystyle f_{x}(0,1)=p_{x}(0,1)=a_{10}+a_{11}+a_{12}+a_{13},}
  4. f x ( 1 , 1 ) = p x ( 1 , 1 ) = i = 1 3 j = 0 3 a i j i , {\displaystyle f_{x}(1,1)=p_{x}(1,1)=\textstyle \sum \limits _{i=1}^{3}\sum \limits _{j=0}^{3}a_{ij}i,}
  5. f y ( 0 , 0 ) = p y ( 0 , 0 ) = a 01 , {\displaystyle f_{y}(0,0)=p_{y}(0,0)=a_{01},}
  6. f y ( 1 , 0 ) = p y ( 1 , 0 ) = a 01 + a 11 + a 21 + a 31 , {\displaystyle f_{y}(1,0)=p_{y}(1,0)=a_{01}+a_{11}+a_{21}+a_{31},}
  7. f y ( 0 , 1 ) = p y ( 0 , 1 ) = a 01 + 2 a 02 + 3 a 03 , {\displaystyle f_{y}(0,1)=p_{y}(0,1)=a_{01}+2a_{02}+3a_{03},}
  8. f y ( 1 , 1 ) = p y ( 1 , 1 ) = i = 0 3 j = 1 3 a i j j . {\displaystyle f_{y}(1,1)=p_{y}(1,1)=\textstyle \sum \limits _{i=0}^{3}\sum \limits _{j=1}^{3}a_{ij}j.}

Y otras cuatro ecuaciones para la derivada parcial en x y {\displaystyle xy} :

  1. f x y ( 0 , 0 ) = p x y ( 0 , 0 ) = a 11 , {\displaystyle f_{xy}(0,0)=p_{xy}(0,0)=a_{11},}
  2. f x y ( 1 , 0 ) = p x y ( 1 , 0 ) = a 11 + 2 a 21 + 3 a 31 , {\displaystyle f_{xy}(1,0)=p_{xy}(1,0)=a_{11}+2a_{21}+3a_{31},}
  3. f x y ( 0 , 1 ) = p x y ( 0 , 1 ) = a 11 + 2 a 12 + 3 a 13 , {\displaystyle f_{xy}(0,1)=p_{xy}(0,1)=a_{11}+2a_{12}+3a_{13},}
  4. f x y ( 1 , 1 ) = p x y ( 1 , 1 ) = i = 1 3 j = 1 3 a i j i j . {\displaystyle f_{xy}(1,1)=p_{xy}(1,1)=\textstyle \sum \limits _{i=1}^{3}\sum \limits _{j=1}^{3}a_{ij}ij.}

Las expresiones anteriores han utilizado las siguientes identidades:

p x ( x , y ) = i = 1 3 j = 0 3 a i j i x i 1 y j , {\displaystyle p_{x}(x,y)=\textstyle \sum \limits _{i=1}^{3}\sum \limits _{j=0}^{3}a_{ij}ix^{i-1}y^{j},}
p y ( x , y ) = i = 0 3 j = 1 3 a i j x i j y j 1 , {\displaystyle p_{y}(x,y)=\textstyle \sum \limits _{i=0}^{3}\sum \limits _{j=1}^{3}a_{ij}x^{i}jy^{j-1},}
p x y ( x , y ) = i = 1 3 j = 1 3 a i j i x i 1 j y j 1 . {\displaystyle p_{xy}(x,y)=\textstyle \sum \limits _{i=1}^{3}\sum \limits _{j=1}^{3}a_{ij}ix^{i-1}jy^{j-1}.}

Este procedimiento genera una superficie p ( x , y ) {\displaystyle p(x,y)} sobre el cuadrado unidad [ 0 , 1 ] × [ 0 , 1 ] {\displaystyle [0,1]\times [0,1]} que es continua y tiene derivadas continuas. La interpolación bicúbica en un retículo regular de tamaño arbitrario se puede lograr uniendo dichas superficies bicúbicas, asegurando que las derivadas coincidan en los límites.

Agrupando los parámetros desconocidos a i j {\displaystyle a_{ij}} en un vector

α = [ a 00 a 10 a 20 a 30 a 01 a 11 a 21 a 31 a 02 a 12 a 22 a 32 a 03 a 13 a 23 a 33 ] T {\displaystyle \alpha =\left[{\begin{smallmatrix}a_{00}&a_{10}&a_{20}&a_{30}&a_{01}&a_{11}&a_{21}&a_{31}&a_{02}&a_{12}&a_{22}&a_{32}&a_{03}&a_{13}&a_{23}&a_{33}\end{smallmatrix}}\right]^{T}}

y dejando que

x = [ f ( 0 , 0 ) f ( 1 , 0 ) f ( 0 , 1 ) f ( 1 , 1 ) f x ( 0 , 0 ) f x ( 1 , 0 ) f x ( 0 , 1 ) f x ( 1 , 1 ) f y ( 0 , 0 ) f y ( 1 , 0 ) f y ( 0 , 1 ) f y ( 1 , 1 ) f x y ( 0 , 0 ) f x y ( 1 , 0 ) f x y ( 0 , 1 ) f x y ( 1 , 1 ) ] T , {\displaystyle x=\left[{\begin{smallmatrix}f(0,0)&f(1,0)&f(0,1)&f(1,1)&f_{x}(0,0)&f_{x}(1,0)&f_{x}(0,1)&f_{x}(1,1)&f_{y}(0,0)&f_{y}(1,0)&f_{y}(0,1)&f_{y}(1,1)&f_{xy}(0,0)&f_{xy}(1,0)&f_{xy}(0,1)&f_{xy}(1,1)\end{smallmatrix}}\right]^{T},}

El sistema de ecuaciones anterior se puede reformular en una matriz para la ecuación lineal A α = x {\displaystyle A\alpha =x} .

Al invertir la matriz se obtiene la ecuación lineal más manejable A 1 x = α {\displaystyle A^{-1}x=\alpha } , donde

A 1 = [ 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 3 3 0 0 2 1 0 0 0 0 0 0 0 0 0 0 2 2 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 3 3 0 0 2 1 0 0 0 0 0 0 0 0 0 0 2 2 0 0 1 1 0 0 3 0 3 0 0 0 0 0 2 0 1 0 0 0 0 0 0 0 0 0 3 0 3 0 0 0 0 0 2 0 1 0 9 9 9 9 6 3 6 3 6 6 3 3 4 2 2 1 6 6 6 6 3 3 3 3 4 4 2 2 2 2 1 1 2 0 2 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 2 0 2 0 0 0 0 0 1 0 1 0 6 6 6 6 4 2 4 2 3 3 3 3 2 1 2 1 4 4 4 4 2 2 2 2 2 2 2 2 1 1 1 1 ] , {\displaystyle A^{-1}=\left[{\begin{smallmatrix}{\begin{array}{rrrrrrrrrrrrrrrr}1&0&0&0&0&0&0&0&0&0&0&0&0&0&0&0\\0&0&0&0&1&0&0&0&0&0&0&0&0&0&0&0\\-3&3&0&0&-2&-1&0&0&0&0&0&0&0&0&0&0\\2&-2&0&0&1&1&0&0&0&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0&1&0&0&0&0&0&0&0\\0&0&0&0&0&0&0&0&0&0&0&0&1&0&0&0\\0&0&0&0&0&0&0&0&-3&3&0&0&-2&-1&0&0\\0&0&0&0&0&0&0&0&2&-2&0&0&1&1&0&0\\-3&0&3&0&0&0&0&0&-2&0&-1&0&0&0&0&0\\0&0&0&0&-3&0&3&0&0&0&0&0&-2&0&-1&0\\9&-9&-9&9&6&3&-6&-3&6&-6&3&-3&4&2&2&1\\-6&6&6&-6&-3&-3&3&3&-4&4&-2&2&-2&-2&-1&-1\\2&0&-2&0&0&0&0&0&1&0&1&0&0&0&0&0\\0&0&0&0&2&0&-2&0&0&0&0&0&1&0&1&0\\-6&6&6&-6&-4&-2&4&2&-3&3&-3&3&-2&-1&-2&-1\\4&-4&-4&4&2&2&-2&-2&2&-2&2&-2&1&1&1&1\end{array}}\end{smallmatrix}}\right],}

lo que permite calcular α {\displaystyle \alpha } de forma rápida y sencilla.

Puede haber otra forma matricial concisa para 16 coeficientes:

[ f ( 0 , 0 ) f ( 0 , 1 ) f y ( 0 , 0 ) f y ( 0 , 1 ) f ( 1 , 0 ) f ( 1 , 1 ) f y ( 1 , 0 ) f y ( 1 , 1 ) f x ( 0 , 0 ) f x ( 0 , 1 ) f x y ( 0 , 0 ) f x y ( 0 , 1 ) f x ( 1 , 0 ) f x ( 1 , 1 ) f x y ( 1 , 0 ) f x y ( 1 , 1 ) ] = [ 1 0 0 0 1 1 1 1 0 1 0 0 0 1 2 3 ] [ a 00 a 01 a 02 a 03 a 10 a 11 a 12 a 13 a 20 a 21 a 22 a 23 a 30 a 31 a 32 a 33 ] [ 1 1 0 0 0 1 1 1 0 1 0 2 0 1 0 3 ] , {\displaystyle {\begin{bmatrix}f(0,0)&f(0,1)&f_{y}(0,0)&f_{y}(0,1)\\f(1,0)&f(1,1)&f_{y}(1,0)&f_{y}(1,1)\\f_{x}(0,0)&f_{x}(0,1)&f_{xy}(0,0)&f_{xy}(0,1)\\f_{x}(1,0)&f_{x}(1,1)&f_{xy}(1,0)&f_{xy}(1,1)\end{bmatrix}}={\begin{bmatrix}1&0&0&0\\1&1&1&1\\0&1&0&0\\0&1&2&3\end{bmatrix}}{\begin{bmatrix}a_{00}&a_{01}&a_{02}&a_{03}\\a_{10}&a_{11}&a_{12}&a_{13}\\a_{20}&a_{21}&a_{22}&a_{23}\\a_{30}&a_{31}&a_{32}&a_{33}\end{bmatrix}}{\begin{bmatrix}1&1&0&0\\0&1&1&1\\0&1&0&2\\0&1&0&3\end{bmatrix}},}

o

[ a 00 a 01 a 02 a 03 a 10 a 11 a 12 a 13 a 20 a 21 a 22 a 23 a 30 a 31 a 32 a 33 ] = [ 1 0 0 0 0 0 1 0 3 3 2 1 2 2 1 1 ] [ f ( 0 , 0 ) f ( 0 , 1 ) f y ( 0 , 0 ) f y ( 0 , 1 ) f ( 1 , 0 ) f ( 1 , 1 ) f y ( 1 , 0 ) f y ( 1 , 1 ) f x ( 0 , 0 ) f x ( 0 , 1 ) f x y ( 0 , 0 ) f x y ( 0 , 1 ) f x ( 1 , 0 ) f x ( 1 , 1 ) f x y ( 1 , 0 ) f x y ( 1 , 1 ) ] [ 1 0 3 2 0 0 3 2 0 1 2 1 0 0 1 1 ] , {\displaystyle {\begin{bmatrix}a_{00}&a_{01}&a_{02}&a_{03}\\a_{10}&a_{11}&a_{12}&a_{13}\\a_{20}&a_{21}&a_{22}&a_{23}\\a_{30}&a_{31}&a_{32}&a_{33}\end{bmatrix}}={\begin{bmatrix}1&0&0&0\\0&0&1&0\\-3&3&-2&-1\\2&-2&1&1\end{bmatrix}}{\begin{bmatrix}f(0,0)&f(0,1)&f_{y}(0,0)&f_{y}(0,1)\\f(1,0)&f(1,1)&f_{y}(1,0)&f_{y}(1,1)\\f_{x}(0,0)&f_{x}(0,1)&f_{xy}(0,0)&f_{xy}(0,1)\\f_{x}(1,0)&f_{x}(1,1)&f_{xy}(1,0)&f_{xy}(1,1)\end{bmatrix}}{\begin{bmatrix}1&0&-3&2\\0&0&3&-2\\0&1&-2&1\\0&0&-1&1\end{bmatrix}},}

dónde

p ( x , y ) = [ 1 x x 2 x 3 ] [ a 00 a 01 a 02 a 03 a 10 a 11 a 12 a 13 a 20 a 21 a 22 a 23 a 30 a 31 a 32 a 33 ] [ 1 y y 2 y 3 ] . {\displaystyle p(x,y)={\begin{bmatrix}1&x&x^{2}&x^{3}\end{bmatrix}}{\begin{bmatrix}a_{00}&a_{01}&a_{02}&a_{03}\\a_{10}&a_{11}&a_{12}&a_{13}\\a_{20}&a_{21}&a_{22}&a_{23}\\a_{30}&a_{31}&a_{32}&a_{33}\end{bmatrix}}{\begin{bmatrix}1\\y\\y^{2}\\y^{3}\end{bmatrix}}.}

Ampliación a retículos rectilíneos

A menudo, las aplicaciones requieren interpolación bicúbica utilizando datos en una cuadrícula rectilínea, en lugar de la unidad cuadrada. En este caso, las identidades de p x , p y , {\displaystyle p_{x},p_{y},} y p x y {\displaystyle p_{xy}} pasan a ser

p x ( x , y ) = i = 1 3 j = 0 3 a i j i x i 1 y j Δ x , {\displaystyle p_{x}(x,y)=\textstyle \sum \limits _{i=1}^{3}\sum \limits _{j=0}^{3}{\frac {a_{ij}ix^{i-1}y^{j}}{\Delta x}},}
p y ( x , y ) = i = 0 3 j = 1 3 a i j x i j y j 1 Δ y , {\displaystyle p_{y}(x,y)=\textstyle \sum \limits _{i=0}^{3}\sum \limits _{j=1}^{3}{\frac {a_{ij}x^{i}jy^{j-1}}{\Delta y}},}
p x y ( x , y ) = i = 1 3 j = 1 3 a i j i x i 1 j y j 1 Δ x Δ y , {\displaystyle p_{xy}(x,y)=\textstyle \sum \limits _{i=1}^{3}\sum \limits _{j=1}^{3}{\frac {a_{ij}ix^{i-1}jy^{j-1}}{\Delta x\Delta y}},}

donde Δ x {\displaystyle \Delta x} es el espaciado x {\displaystyle x} de la celda que contiene el punto ( x , y ) {\displaystyle (x,y)} y similar para Δ y {\displaystyle \Delta y} . En este caso, el enfoque más práctico para calcular los coeficientes α {\displaystyle \alpha } es dejar

x = [ f ( 0 , 0 ) f ( 1 , 0 ) f ( 0 , 1 ) f ( 1 , 1 ) Δ x f x ( 0 , 0 ) Δ x f x ( 1 , 0 ) Δ x f x ( 0 , 1 ) Δ x f x ( 1 , 1 ) Δ y f y ( 0 , 0 ) Δ y f y ( 1 , 0 ) Δ y f y ( 0 , 1 ) Δ y f y ( 1 , 1 ) Δ x Δ y f x y ( 0 , 0 ) Δ x Δ y f x y ( 1 , 0 ) Δ x Δ y f x y ( 0 , 1 ) Δ x Δ y f x y ( 1 , 1 ) ] T , {\displaystyle x=\left[{\begin{smallmatrix}f(0,0)&f(1,0)&f(0,1)&f(1,1)&\Delta xf_{x}(0,0)&\Delta xf_{x}(1,0)&\Delta xf_{x}(0,1)&\Delta xf_{x}(1,1)&\Delta yf_{y}(0,0)&\Delta yf_{y}(1,0)&\Delta yf_{y}(0,1)&\Delta yf_{y}(1,1)&\Delta x\Delta yf_{xy}(0,0)&\Delta x\Delta yf_{xy}(1,0)&\Delta x\Delta yf_{xy}(0,1)&\Delta x\Delta yf_{xy}(1,1)\end{smallmatrix}}\right]^{T},}

y luego resolver α = A 1 x {\displaystyle \alpha =A^{-1}x} con A {\displaystyle A} como antes. A continuación, las variables de interpolación normalizadas se calculan como

x ¯ = x x 0 x 1 x 0 , y ¯ = y y 0 y 1 y 0 {\displaystyle {\begin{aligned}{\overline {x}}&={\frac {x-x_{0}}{x_{1}-x_{0}}},\\{\overline {y}}&={\frac {y-y_{0}}{y_{1}-y_{0}}}\end{aligned}}}

donde x 0 , x 1 , y 0 , {\displaystyle x_{0},x_{1},y_{0},} y y 1 {\displaystyle y_{1}} son las coordenadas x {\displaystyle x} y y {\displaystyle y} de los puntos de la cuadrícula que rodean el punto ( x , y ) {\displaystyle (x,y)} . Entonces, la superficie de interpolación se convierte en

p ( x , y ) = i = 0 3 j = 0 3 a i j x ¯ i y ¯ j . {\displaystyle p(x,y)=\sum \limits _{i=0}^{3}\sum _{j=0}^{3}a_{ij}{\overline {x}}^{i}{\overline {y}}^{j}.}

Obtención de las derivadas de valores de funciones

Si se desconocen las derivadas, normalmente se aproximan a partir de los valores de la función en puntos vecinos a las esquinas del cuadrado unitario, utilizando por ejemplo diferencias finitas.

Para encontrar cualquiera de las derivadas simples, f x {\displaystyle f_{x}} o f y {\displaystyle f_{y}} , usando ese método, se calcula la pendiente entre los dos puntos "circundantes" en el eje apropiado. Por ejemplo, para calcular f x {\displaystyle f_{x}} para uno de los puntos, se debe buscar f ( x , y ) {\displaystyle f(x,y)} para los puntos a la izquierda y a la derecha del punto objetivo y calcular su pendiente, y proceder de manera similar para f y {\displaystyle f_{y}} .

Para encontrar la derivada cruzada f x y {\displaystyle f_{xy}} , se debe tomar la derivada en ambos ejes, uno cada vez. Por ejemplo, primero se puede usar el procedimiento f x {\displaystyle f_{x}} para encontrar las derivadas x {\displaystyle x} de los puntos por encima y por debajo del punto objetivo, luego usar el procedimiento f y {\displaystyle f_{y}} en esos valores (en lugar de, como es habitual, los valores de f {\displaystyle f} para esos puntos) para obtener el valor de f x y ( x , y ) {\displaystyle f_{xy}(x,y)} para el punto objetivo. O se puede hacer en la dirección opuesta, calculando primero f y {\displaystyle f_{y}} y luego f x {\displaystyle f_{x}} a partir de ellos, dado que ambos métodos dan resultados equivalentes.

En los bordes del conjunto de datos, cuando faltan algunos de los puntos circundantes, los puntos faltantes se pueden aproximar mediante varios métodos. Un método simple y común es asumir que la pendiente desde el punto existente hasta el punto objetivo continúa sin cambios adicionales y utilizar esto para calcular un valor hipotético para el punto faltante.

Algoritmo de convolución bicúbica

La interpolación mediante spline bicúbico requiere la solución del sistema lineal descrito anteriormente para cada celda de la cuadrícula. Se puede obtener un interpolador con propiedades similares aplicando una convolución con el siguiente núcleo en ambas dimensiones:

W ( x ) = { ( a + 2 ) | x | 3 ( a + 3 ) | x | 2 + 1  para  | x | 1 , a | x | 3 5 a | x | 2 + 8 a | x | 4 a  para  1 < | x | < 2 , 0  en caso contrario , {\displaystyle W(x)={\begin{cases}(a+2)|x|^{3}-(a+3)|x|^{2}+1&{\text{ para }}|x|\leq 1,\\a|x|^{3}-5a|x|^{2}+8a|x|-4a&{\text{ para }}1<|x|<2,\\0&{\text{ en caso contrario}},\end{cases}}}

donde a {\displaystyle a} generalmente se establece en −0,5 o −0,75. Téngase en cuenta que W ( 0 ) = 1 {\displaystyle W(0)=1} y W ( n ) = 0 {\displaystyle W(n)=0} para todos los números enteros distintos de cero n {\displaystyle n} .

Este enfoque fue propuesto por Keys, quien demostró que a = 0.5 {\displaystyle a=-0.5} produce convergencia de tercer orden con respecto al intervalo de muestreo de la función original.[1]

Si se usa la notación matricial para el caso común a = 0.5 {\displaystyle a=-0.5} , se puede expresar la ecuación de una manera más compacta:

p ( t ) = 1 2 [ 1 t t 2 t 3 ] [ 0 2 0 0 1 0 1 0 2 5 4 1 1 3 3 1 ] [ f 1 f 0 f 1 f 2 ] {\displaystyle p(t)={\tfrac {1}{2}}{\begin{bmatrix}1&t&t^{2}&t^{3}\end{bmatrix}}{\begin{bmatrix}0&2&0&0\\-1&0&1&0\\2&-5&4&-1\\-1&3&-3&1\end{bmatrix}}{\begin{bmatrix}f_{-1}\\f_{0}\\f_{1}\\f_{2}\end{bmatrix}}}

para t {\displaystyle t} entre 0 y 1 para una dimensión. Téngase en cuenta que para la interpolación de convolución cúbica unidimensional se requieren 4 puntos de muestra. Para cada consulta se ubican dos muestras a su izquierda y dos muestras a su derecha. Estos puntos están indexados de −1 a 2 en este texto. La distancia desde el punto indexado con 0 hasta el punto de consulta se indica aquí mediante t {\displaystyle t} .

Para dos dimensiones, se aplica primero una vez en x {\displaystyle x} y nuevamente en y {\displaystyle y} :

b 1 = p ( t x , f ( 1 , 1 ) , f ( 0 , 1 ) , f ( 1 , 1 ) , f ( 2 , 1 ) ) , b 0 = p ( t x , f ( 1 , 0 ) , f ( 0 , 0 ) , f ( 1 , 0 ) , f ( 2 , 0 ) ) , b 1 = p ( t x , f ( 1 , 1 ) , f ( 0 , 1 ) , f ( 1 , 1 ) , f ( 2 , 1 ) ) , b 2 = p ( t x , f ( 1 , 2 ) , f ( 0 , 2 ) , f ( 1 , 2 ) , f ( 2 , 2 ) ) , {\displaystyle {\begin{aligned}b_{-1}&=p(t_{x},f_{(-1,-1)},f_{(0,-1)},f_{(1,-1)},f_{(2,-1)}),\\[1ex]b_{0}&=p(t_{x},f_{(-1,0)},f_{(0,0)},f_{(1,0)},f_{(2,0)}),\\[1ex]b_{1}&=p(t_{x},f_{(-1,1)},f_{(0,1)},f_{(1,1)},f_{(2,1)}),\\[1ex]b_{2}&=p(t_{x},f_{(-1,2)},f_{(0,2)},f_{(1,2)},f_{(2,2)}),\end{aligned}}}
p ( x , y ) = p ( t y , b 1 , b 0 , b 1 , b 2 ) . {\displaystyle p(x,y)=p(t_{y},b_{-1},b_{0},b_{1},b_{2}).}

Uso en gráficos por computadora

La mitad inferior de esta figura es una ampliación de la mitad superior, que muestra cómo se crea la aparente nitidez de la línea de la izquierda. La interpolación bicúbica provoca un sobrepaso del color, lo que aumenta la acutancia

El algoritmo bicúbico se utiliza con frecuencia para escalar imágenes y vídeos para su visualización (consúltese remuestreo de mapas de bits). Conserva los detalles finos mejor que el algoritmo de interpolación bilineal común.

Sin embargo, debido a los lóbulos negativos del núcleo, causa sobrepaso (halos). Esta circunstancia puede causar recorte y es un artefacto (véase también artefactos de anillo), pero aumenta la acutancia (nitidez aparente) y puede ser deseable.

Véase también

  • Ver el portal sobre Matemática Portal:Matemática. Contenido relacionado con Matemática.

Referencias

  1. R. Keys (1981). «Cubic convolution interpolation for digital image processing». IEEE Transactions on Acoustics, Speech, and Signal Processing 29 (6): 1153-1160. Bibcode:1981ITASS..29.1153K. doi:10.1109/TASSP.1981.1163711. «citeseerx: 10.1.1.320.776». 

Enlaces externos

  • Aplicación de interpolación a muestras de elevación
  • Teoría de la interpolación
  • Explicación e implementación Java/C++ de la interpolación (bi)cúbica
  • Función de hoja de cálculo de Excel para interpolación bicúbica de Lagrange