Resample numpy массив с интерполяцией - PullRequest
0 голосов
/ 06 февраля 2020

Я обрабатываю 5 изображений в Python, которые были импортированы как numpy массивы и имеют следующую форму:

for i in range(len(S_images)):
    print(S_images[i].shape)

(1, 1524, 5500)
(1, 1524, 5499)
(1, 1524, 5500)
(1, 1524, 5499)
(1, 1525, 5499)

Моя цель - использовать S_stack = np.stack(S_images) для объединения их вместе, но из Конечно, из-за различий в форме я получаю сообщение об ошибке:

ValueError: all input arrays must have the same shape

Я хотел бы изменить выборку массивов в общую форму (например, (1, 1524, 5500)) и одновременно выбрать метод передискретизации, такой как Ближайший сосед.

Поиск предыдущих вопросов и ответов на форуме Я видел, что использование scipy.ndimage.zoom, но это обычно для обновления или понижения обычных данных. В моем случае мне просто нужно, чтобы формы соответствовали, чтобы позволить стек. Любое предложение?

Можно ли, например, выбрать основной массив и использовать его в качестве эталона, где все остальные должны будут соответствовать его форме, а если нет, то будет применен метод повторной выборки с использованием NN

1 Ответ

0 голосов
/ 06 февраля 2020

Я придумала решение, но мне интересно, правильно ли оно с технической / научной c точки зрения. Это хорошая процедура, чтобы решить мою проблему? Практически, я делаю то, что хочу ...

for i in range(len(S_images)):
    if S_images[i].shape[1] !=1524:
        S_images[i] = scipy.ndimage.zoom(S_images[i], (1, 1524/1525, 1),order=0, mode='nearest')

for i in range(len(S_images)):
    if S_images[i].shape[2] !=5499:
        S_images[i] = scipy.ndimage.zoom(S_images[i], (1, 1, 5499/5500 ),order=0, mode='nearest')


for i in range(len(S_images)):
    print(S_images[i].shape)

(1, 1524, 5499)
(1, 1524, 5499)
(1, 1524, 5499)
(1, 1524, 5499)
(1, 1524, 5499)
...