Array interpolação

Antes de começar, aceite minhas desculpas por não ser um matemático e realmente não saber os nomes adequados para o que estou tentando fazer ...;) Indicadores para quaisquer explicações em inglês simples que possam ajudar seriam: mais apreciado (como estou pesquisando no momento no Google com base no que eupensa a soluçãopoderi estar)

Se tiver uma matriz multidimensional de valores de origem e desejar aumentar essa matriz por um fator den, EUpensa o que eu precisaria usar é Interpolação bicúbica Certamente a imagem no canto superior direito dessa página é representativa do que estou buscando - criando um fluxo graduado de valores entre os pontos de dados de origem subjacentes, com base no (s) valor (es) dos vizinhos vizinhos. Aceito completamente que, ao não aumentar o volume de dados, não estou aumentando a resolução dos dados; apenas desfocando as borda

Algo parecido com isso;

para isso (e além);

Seguindo olink no artigo da Wikipedia me fornece um (suposto) exemplo de implementação do que estou me esforçando, mas se isso acontecer, receio que estou perdendo o salto lógico para chegar lá. Quando eu chamo getValue (fonte, 0,5, 0,5) no BicubicInterpolator, o que estou recebendo de volta? EUpensament que, se eu desse x / y (0,0,0,0), recuperaria o valor inferior esquerdo da grade e, se observasse (1,1), obteria o canto superior direito e qualquer valor entre daria me a posição especificada dentro da grade interpolad

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));         
}

A saída para uma linha diagonal na minha grade de origem

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

Estou confuso porque as diagonais vão de 1 a 3 e de 1 a 2; não há nada passando de 2 para 2 com muito pouca variação (geral). Estou entendendo completamente as coisas?

EDIT: Seguindo a sugestão de Peter de expandir o limite para análise, a grade agora pode ser gerada como um rápido e avançado upscale para uma matriz 30x3

Agora que o que está acontecendo está fazendo um pouco mais de sentido, posso ver que preciso considerar algumas coisas adicionais;

Controle o overshoot (visto no meio da grade, onde a fonte possui um bloco de quatro células com um valor de 2, mas o valor interpolado atinge o pico de 2,2)Conte para valores em branco na grade de origem e faça com que sejam tratados como espaços em branco, em vez de zero, para que não distorçam o cálcu Esteja preparado para ser informado de que estou em uma missão e que é necessária uma solução diferente Veja se era isso que o cliente pensava que realmente queria quando disse "faz com menos blocos"

questionAnswers(2)

yourAnswerToTheQuestion