Массивная интерполяция

Прежде чем я начну, примите мои извинения за то, что я не математик и на самом деле не знаю правильных имен для того, что я пытаюсь сделать ...;) Указатели на любые простые объяснения на английском языке, которые могут помочь, были бы наиболее оценил (так как я в настоящее время чисто Google, основанный на том, что ядумать решениемог бы быть).

Если у вас есть многомерный массив исходных значений и вы хотите увеличить этот массив с коэффициентомnЯдумать что то, что мне нужно использовать,Бикубическая интерполяция Конечно, изображение в правом верхнем углу на этой странице отражает то, к чему я стремлюсь - создание постепенного потока значений между базовыми точками исходных данных, основанных на значениях их окружающих соседей. Я полностью согласен с тем, что не увеличивая объем данных, я не увеличиваю разрешение данных; просто размытие краев.

Что-то похожее на выход из этого;

к этому (и далее);

Послессылка в статье Википедии дает мне (предполагаемый) пример реализации о том, к чему я стремлюсь, но, если это произойдет, я боюсь, что в настоящее время я упускаю логический скачок, чтобы попасть туда. Когда я вызываю getValue (source, 0.5, 0.5) для BicubicInterpolator, что я получаю обратно? яподумал что если бы я дал x / y (0.0,0.0), я бы получил нижнее левое значение сетки, и если бы я посмотрел на (1,1), я бы получил верхнее правое, и любое значение между даст мне указанная позиция в пределах интерполированной сетки.

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

Выход для диагональной линии через мою исходную сетку однако;

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

Я запутался, потому что диагонали идут от 1 до 3 и от 1 до 2; нет ничего идущего от 2 до 2 с очень небольшими (общими) вариациями. Я совершенно не понимаю вещи?

РЕДАКТИРОВАТЬ :&nbsp;Следуя предложению Питера расширить границы для анализа, сетка теперь может быть сгенерирована как быстрое и грязное масштабирование до матрицы 30x30;

Теперь, когда то, что происходит, становится более понятным, я вижу, что мне нужно рассмотреть несколько дополнительных вещей;

Управляйте выбросом (видно в середине сетки, где источник имеет блок из четырех ячеек со значением 2, но интерполированное значение достигает пика в 2,2)Обрабатывайте пустые значения в исходной сетке и рассматривайте их как пустые, а не нулевые, чтобы они не искажали вычисленияБудьте готовы, чтобы мне сказали, что я нахожусь в дураках и что нужно другое решениеПосмотрите, было ли это то, что клиент думал, что он на самом деле хотел, когда они сказали "сделать его менее блочным"