Как сохранить размер изображения при интерполяции в python? - PullRequest
0 голосов
/ 28 июня 2019

Я интерполировал мое изображение nifti (данные МРТ) линейным методом. но проблема в том, что поле обзора в выходных данных изменяется (входное значение равно 400 * 400, но выходное значение равно 4000 * 3000). Я ищу способ сохранить размеры при интерполяции. У вас может быть решение? Спасибо

t1_ = "name.nii.gz"
img_t1_ = nib.load(t1_)
img_t1_ = np.double(img_t1_.get_fdata())
slice_ = 300
img_t1_ = np.rot90(img_t1_[:,:,slice_,0])
x = np.linspace(0, img_t1_.shape[1],  img_t1_.shape[1])
y = np.linspace(0, img_t1_.shape[0],  img_t1_.shape[0])
X, Y = np.meshgrid(x, y)
Z = img_t1_
x2 = np.linspace(0, img_t1_.shape[1],  9*img_t1_.shape[1])
y2 = np.linspace(0, img_t1_.shape[0],  9*img_t1_.shape[0])
print(x2.shape[0], y2.shape[0])
tmp_z_ = np.zeros((x2.shape[0], y2.shape[0]))
f_linear = interp2d(x, y, Z, kind='linear')
Z2 = f_linear(x2, y2)

1 Ответ

0 голосов
/ 28 июня 2019

Я предполагаю, что, сохраняя размеры, вы подразумеваете сохранение соотношения сторон (то есть вход: 400x400 -> вывод: 4000x4000). Кроме того, я не совсем уверен, чего вы пытаетесь достичь с помощью интерполяции. Однако, в зависимости от варианта использования, функция zoom в модуле scipy ndimage может выполнять эту работу. Если вы выбрали параметр order=1, это соответствует линейной интерполяции.

Я не знаком с пакетами, которые вы используете для импорта ваших изображений. В следующем примере предполагается, что данные изображения были загружены в img_data, двумерный массив с плавающей точкой. Просто адаптируйтесь к своему варианту использования.

from scipy.ndimage import zoom
interpolated_img_data = zoom(img_data, 10, order=1)
...