Изменение размера изображения перед преобразованием в массив

У меня есть тысячи изображений в папке. Я читаю их с pydicom как это

import numpy as np
import dicom

folder = "/images"
imgs = [dicom.read_file(folder + '/' + s) for s in os.listdir(folder)]

Затем я хочу сложить все изображения в виде массива, например так:

data = np.stack([i.pixel_array for i in imgs])

Однако изображения имеют разный размер и поэтому не могут быть сложены.

Как я могу добавить шаг, который изменяет размеры всех изображений до 1000x1000?

1 ответ

Если вы храните их в виде списка пустых массивов, они могут быть разного размера. В противном случае используйте scipy функция масштабирования,

import numpy as np
import dicom
import scipy

xsize = 1000; ysize = 1000
folder = "/images"
data = np.zeros(xsize, ysize, len(os.listdir(folder)))
for i, s in enumerate(os.listdir(folder)):

    img = np.array(dicom.read_file(folder + '/' + s).pixel_array)
    xscale = xsize/img.shape[0]
    yscale = ysize/img.shape[1]
    data[:,:,i] = scipy.ndimage.interpolation.zoom(img, [xscale, yscale]))

Вы можете сохранить в виде списка и стека, но, кажется, проще предварительно выделить массив с размером 1000 на 1000 по len(os.listdir(папка)). У меня нет dicom или тестовые файлы, поэтому не можете проверить ваш случай, но идея, безусловно, работает (я использовал его раньше, чтобы масштабировать изображения до нужного размера). Также проверьте правильность шкалы для вашего случая.

Другие вопросы по тегам