Интерполяция Лапласа между известными значениями в матрице - PullRequest
0 голосов
/ 09 марта 2019

Я работаю над программой создания тепловой карты, которая, как мы надеемся, заменит цвета на основе образцов значений, предоставленных из компоновки здания (это не на основе GPS).

Если у меня есть только несколько известных точек данных, таких как эти, в большой матрице неизвестных, как мне получить значения между интерполированными в Python?:

0,0,0,0,<b>1</b>,0,0,0,0,0,<b>5</b>,0,0,0,0,<b>9</b>
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,<b>2</b>,0,0,0,0,0,0,0,0,<b>8</b>,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,<b>8</b>,0,0,0,0,0,0,0,<b>6</b>,0,0,0,0,0,0
0,0,0,0,0,<b>3</b>,0,0,0,0,0,0,0,0,<b>7</b>,0

Я понимаю, что билинейный режим этого не сделает, и Гауссиан снизит все пики до низких значений из-за огромного количества окружающих нулей. Это, очевидно, предложение по обработке матрицы, и мне не нужно, чтобы оно было гладким по кривой Безье, достаточно близко к графическому представлению. Моя матрица будет иметь размер около 1500 × 900 ячеек и примерно 100 известных точек.

Как только значения интерполированы, я написал код для преобразования всех цветов в цвета, без проблем. Просто сейчас я получаю одноцветные пиксели на черном фоне.

1 Ответ

0 голосов
/ 09 марта 2019

Предложение наивного решения:

Шаг 1: интерполировать и экстраполировать существующие точки данных на окружение.Это можно сделать с помощью алгоритма типа «распространение волны».Известные точки «распространяют» свои значения на окружение, пока вся сетка не «затопит» некоторыми известными значениями.В конце этого этапа у вас есть несколько пересекающихся «дисков», и нулей не осталось.

Шаг 2: сгладьте результат (используя билинейную фильтрацию или некоторую другую фильтрацию).

Если вы можете использовать ScyPy, то interp2d делает именно то, что вы хотите.Возможная проблема заключается в том, что он, похоже, не экстраполирует гладко в соответствии с этой проблемой .Это означает, что все значения около стен будут такими же, как и у ближайших соседних точек.Это можно решить, поставив термометры во все 4 угла:)

...