Interpolación de matriz

Antes de comenzar, acepte mis disculpas por no ser matemático y no sé realmente los nombres correctos de lo que estoy tratando de hacer ...;) Indicadores de cualquier explicación en inglés simple que pueda ser útil más apreciado (ya que estoy simplemente buscando en Google en este momento según lo quepensa la soluciónpodrí be).

Si tiene una matriz multidimensional de valores de origen y desea aumentar esa matriz por un factor den, YOpensa que lo que necesito usar es Interpolación Bicubic Ciertamente, la imagen superior derecha en esa página es representativa de lo que estoy buscando: crear un flujo graduado de valores entre los puntos de datos de origen subyacentes, en función de los valores de sus vecinos circundantes. Acepto completamente que al no aumentar el volumen de datos no estoy aumentando la resolución de los datos; simplemente difuminando los bordes.

Algo parecido a partir de esto;

to esto (y más allá);

Siguiendo ellink dentro del artículo de Wikipedia me da un (supuesto) ejemplo de implementación de lo que estoy luchando, pero si lo hace, me temo que actualmente me estoy perdiendo el salto lógico para llegar allí. Cuando llamo a getValue (fuente, 0.5, 0.5) en el BicubicInterpolator, ¿qué estoy recuperando? YOpensamient que si di una x / y de (0.0,0.0) obtendría el valor inferior izquierdo de la cuadrícula y si mirara (1,1) obtendría la parte superior derecha, y cualquier valor entre me la posición especificada dentro de la cuadrícula interpolada.

double[][] source  = new double[][] {{1, 1, 1, 2}, {1, 2, 2, 3}, {1, 2, 2, 3}, {1, 1, 3, 3}};
BicubicInterpolator bi = new BicubicInterpolator();
for (double idx = 0; idx <= 1; idx += 0.1) {
  LOG.info("Result (" + String.format("%3.1f", idx) + ", " + String.format("%3.1f", idx) + ") : " + bi.getValue(source, idx, idx));         
}

Sin embargo, la salida para una línea diagonal a través de mi cuadrícula de origen es;

Result (0.0, 0.0) : 2.0
Result (0.1, 0.1) : 2.08222625
Result (0.2, 0.2) : 2.128
Result (0.3, 0.3) : 2.13747125
Result (0.4, 0.4) : 2.11424
Result (0.5, 0.5) : 2.06640625
Result (0.6, 0.,6) : 2.00672
Result (0.7, 0.7) : 1.9518312500000001
Result (0.8, 0.8) : 1.92064
Result (0.9, 0.9) : 1.93174625
Result (1.0, 1.0) : 2.0

Estoy confundido porque las diagonales van del 1 al 3 y del 1 al 2; no hay nada que vaya de 2 a 2 con muy poca variación (general). ¿Estoy entendiendo completamente mal las cosas?

EDIT: Siguiendo la sugerencia de Peter de expandir el límite para el análisis, la cuadrícula ahora se puede generar como una escala rápida y fácil a una matriz de 30x30;

Ahora que lo que está sucediendo tiene un poco más de sentido, puedo ver que necesito considerar algunas cosas adicionales;

Controle el sobreimpulso (visto en el medio de la cuadrícula donde la fuente tiene un bloque de cuatro celdas con un valor de 2, pero el valor interpolado alcanza su punto máximo en 2.2)Cater para valores en blanco en la cuadrícula de origen y haga que se traten como espacios en blanco, en lugar de cero, para que no sesguen el cálculo Prepárese para que me digan que estoy haciendo un recado tonto y que se necesita una solución diferen Vea si esto fue lo que el cliente pensó que realmente quería cuando dijo " hacerlo menos bloqueado"

Respuestas a la pregunta(2)

Su respuesta a la pregunta