Повторите выборку всех изображений в базе данных до одинакового размера вокселя.
У меня есть 3 стека 512x512x133, 512x512x155 and 512x512x277
, Я хотел бы пересчитать весь стек, чтобы сделать размеры 512x512x277, 512x512x277 and 512x512x277
, Как это сделать?
Я знаю, что могу сделать повторную выборку, используя толщину среза и расстояние между пикселями. Но это не обеспечит одинаковое количество срезов в каждом случае.
2 ответа
Ты можешь использовать scipy.ndimage.interpolate.zoom
, указав массив коэффициентов масштабирования для каждой оси следующим образом:
# example for first image
zoomArray = desiredshape.astype(float) / original.shape
zoomed = scipy.ndimage.interpolate.zoom(original, zoomArray)
ОБНОВИТЬ:
Если это слишком медленно, вы можете попробовать как-то создать отдельные изображения из вертикальных срезов вашего "куба изображений", обработать их с помощью некоторой высокоскоростной библиотеки изображений (некоторые люди любят ImageMagick, есть также PIL, opencv и т. Д.), и сложите их снова вместе. Таким образом, вы берете 512 изображений размером 512x133 и изменяете их размеры до 512x277, а затем снова складываете до 512x512x277, что является вашим конечным желаемым размером. Кроме того, это разделение позволило бы распараллеливание. Следует подумать: это будет работать, только если поперечная ось (та, вдоль которой вы будете разрезать 2D-изображения) не будет изменена!
Вы можете использоватьResample
преобразовать в TorchIO.
import torchio as tio
small, medium, large = dicom_dirs # the folders of your three DICOMs
reference = tio.ScalarImage(large)
resample = tio.Resample(reference)
small_resampled = resample(small)
medium_resampled = resample(medium)
Три изображения теперь имеют одинаковую форму, 512 x 512 x 277.
Отказ от ответственности: я являюсь основным разработчиком TorchIO.