Как интерполировать массив с линейной интерполяцией - PullRequest
3 голосов
/ 27 марта 2019

У меня есть пустой массив, который имеет следующую форму: (1, 128, 160, 1).

Теперь у меня есть изображение, которое имеет форму: (200, 200).

Итак, я делаю следующее:

orig = np.random.rand(1, 128, 160, 1)
orig = np.squeeze(orig)

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

1 Ответ

1 голос
/ 27 марта 2019

Вы можете сделать это с помощью scipy.interpolate.interp2d следующим образом:

from scipy import interpolate

# Make a fake image - you can use yours.
image = np.ones((200,200))

# Make your orig array (skipping the extra dimensions).
orig = np.random.rand(128, 160)

# Make its coordinates; x is horizontal.
x = np.linspace(0, image.shape[1], orig.shape[1])
y = np.linspace(0, image.shape[0], orig.shape[0])

# Make the interpolator function.
f = interpolate.interp2d(x, y, orig, kind='linear')

# Construct the new coordinate arrays.
x_new = np.arange(0, image.shape[1])
y_new = np.arange(0, image.shape[0])

# Do the interpolation.
new_orig = f(x_new, y_new)

Обратите внимание на настройку -1 для диапазона координат при формировании x и y. Это гарантирует, что координаты изображения изменяются от 0 до 199 включительно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...