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

Прежде чем я начну, примите мои извинения за то, что я не математик и на самом деле не знаю правильных имен для того, что я пытаюсь сделать ...;) Указатели на любые простые объяснения на английском языке, которые могут помочь, были бы наиболее оценил (так как я в настоящее время чисто 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 с очень небольшими (общими) вариациями. Я совершенно не понимаю вещи?

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

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос