Интерполяция Лапласа между известными значениями в матрице

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

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

0,0,0,0,1,0,0,0,0,0,5,0,0,0,0,9
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,2,0,0,0,0,0,0,0,0,8,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
0,8,0,0,0,0,0,0,0,6,0,0,0,0,0,0
0,0,0,0,0,3,0,0,0,0,0,0,0,0,7,0

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

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

Каков контекст вашего приложения? Можете ли вы добавить в приложение такую ​​библиотеку, как SciPy?

battlmonstr 09.03.2019 14:23

Я считаю, что interp2d (docs.scipy.org/doc/scipy/reference/generated/…) Scipy может решить вашу проблему, к сожалению, я не могу проверить это прямо сейчас, поэтому я не буду публиковать это как ответ, но взгляните

Lucas Abbade 09.03.2019 14:23

Да, похоже, что interp2D - это ИМЕННО то, что мне нужно. Большое спасибо.

Mutley Eugenius 09.03.2019 22:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
308
1

Ответы 1

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

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

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

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

Да, похоже, что interp2D - это ИМЕННО то, что мне нужно. Большое спасибо.

Mutley Eugenius 09.03.2019 22:36

Другие вопросы по теме