#grid #2d #interpolation
#сетка #2d #интерполяция
Вопрос:
У меня есть задача интерполировать 2d массив из NxM в AxB, где A > N и B > M. Суть ее заключается в создании простого изображения массива с цветовой кодировкой (тепловой карты).
Правильно ли я понимаю, что, например, массив размером 3×3 (все известные значения)
A B C
D E F
G H I
Должна быть интерполирована, скажем, 6×6 таким образом
A x B x x C
x x x x x x
D x E x x F
x x x x x x
x x x x x x
G x H x x I
где x обозначает неизвестное, но интерполированное значение, верно?
Можно ли это сделать в двух вложенных циклах for? Я нашел формулу билинейной интерполяции, но возникли некоторые проблемы с ее адаптацией к (i, j) результирующему циклу массива. Какие-либо советы? Заранее спасибо.
Комментарии:
1. «Должно быть интерполировано, скажем, 6×6 таким образом …» Это вызов суждения. Как я уверен, вы обнаружили, существует множество методов передискретизации — en.wikipedia.org/wiki/Resampling_(bitmap) — и тот, который вы выбираете, зависит от множества факторов.
2. Даже учитывая мою задачу с тепловой картой? Результат, который мне нужен, похож на этот upload.wikimedia.org/wikipedia/commons/c/c6/Bilininterp.png
Ответ №1:
Вы могли бы использовать библиотеку, подобную .Для этого используются NET, Qt или SDL, это обычная прикладная задача.
Если вы хотите реализовать это самостоятельно, прочитайте о билинейной фильтрации, а не о билинейной интерполяции. «Интерполяция» обычно означает, что вы интерполируете только между двумя значениями — как только у вас есть изображение, это называется фильтрацией.
Рассмотрите также более привлекательные фильтры, такие как бикубические.
Комментарии:
1. Это правильный способ получить что-то подобное upload.wikimedia.org/wikipedia/commons/c/c6/Bilininterp.png ? Имеет ли значение, что значения в моем массиве еще не являются фактическими цветами?
2. Да, ваш пример pic — это точно билинейная фильтрация, но он показывает фильтрацию только в подмассиве 2×2 ваших исходных данных. Если вы сделаете то же самое для каждого подмассива 2×2, все готово.
3. Если значения в моем массиве не являются фактическими цветами, вы можете сначала сопоставить их с цветами, а затем интерполировать цвета. Или вы могли бы интерполировать значения, а затем сопоставить интерполированные значения с цветами. Эти два метода будут создавать разные эффекты (в примере pic используется последний метод, который может быть более подходящим для тепловой карты). Также ваш пример pic имеет эффект постеризации, который, я предполагаю, вам не нужен.