Я пытаюсь использовать interpn (в python с использованием Scipy) для репликации результатов из Matlab с использованием interp3. Однако я изо всех сил пытаюсь структурировать свои аргументы. Я попробовал следующую строку:
f = interpn(blur_maps, fx, fy, pyr_level)
Где карты размытия - это 600 x 800 x 7
, представляющее изображение в оттенках серого при семи уровнях размытия, fx
и fy
- это индексы семи карт. И fx
, и fy
являются двумерными массивами. pyr_level
- это двумерный массив, который содержит значения от 1 до 7, представляющие карту размытия для интерполяции.
У меня такой вопрос, поскольку я неправильно расставил аргументы, как я могу расставить их так, чтобы они работали? Я пытался найти примеры, но ничего подобного не увидел. Вот пример данных, которые я пытаюсь интерполировать:
import numpy as np
import cv2, math
from scipy.interpolate import interpn
levels = 7
img_path = '/Users/alimahdi/Desktop/i4.jpg'
img = cv2.cvtColor(cv2.imread(img_path), cv2.COLOR_BGR2GRAY)
row, col = img.shape
x_range = np.arange(0, col)
y_range = np.arange(0, row)
fx, fy = np.meshgrid(x_range, y_range)
e = np.exp(np.sqrt(fx ** 2 + fy ** 2))
pyr_level = 7 * (e - np.min(e)) / (np.max(e) - np.min(e))
blur_maps = np.zeros((row, col, levels))
blur_maps[:, :, 0] = img
for i in range(levels - 1):
img = cv2.pyrDown(img)
r, c = img.shape
tmp = img
for j in range(int(math.log(row / r, 2))):
tmp = cv2.pyrUp(tmp)
blur_maps[:, :, i + 1] = tmp
pixelGrid = [np.arange(x) for x in blur_maps.shape]
interpPoints = np.array([fx.flatten(), fy.flatten(), pyr_level.flatten()])
interpValues = interpn(pixelGrid, blur_maps, interpPoints.T)
finalValues = np.reshape(interpValues, fx.shape)
Теперь я получаю следующую ошибку: ValueError: One of the requested xi is out of bounds in dimension 0
Я знаю, что проблема в interpPoints
, но я не уверен, какИсправить это. Есть предложения?