Изменение размера изображения перед преобразованием в массив
У меня есть тысячи изображений в папке. Я читаю их с 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
или тестовые файлы, поэтому не можете проверить ваш случай, но идея, безусловно, работает (я использовал его раньше, чтобы масштабировать изображения до нужного размера). Также проверьте правильность шкалы для вашего случая.