Может ли python sitk.ReadImage прочитать список / серию изображений?

Я не понимаю, если sitk.ReadImage может прочитать список изображений или нет? Мне не удалось найти пример, показывающий, как список изображений должен быть введен в функцию. Но в документации по функциям сказано:

ReadImage(**VectorString fileNames**, itk::simple::PixelIDValueEnum outputPixelType) -> Image
ReadImage(std::string const & filename, itk::simple::PixelIDValueEnum outputPixelType) -> Image



ReadImage is a procedural interface to the ImageSeriesReader class which is convenient for most image reading tasks.


Note that when reading a series of images that have meta-data
associated with them (e.g. a DICOM series) the resulting image will
have an empty meta-data dictionary. It is possible to programmatically
add a meta-data dictionary to the compounded image by reading in one
or more images from the series using the ImageFileReader class,
analyzing the meta-dictionary associated with each of those images and
creating one that is relevant for the compounded image.

Так что из документации видно, что это возможно. Может кто-нибудь показать мне простой пример.

РЕДАКТИРОВАТЬ: я пробовал следующее:

sitk.ReadImage(['volume00001.mhd','volume00002.mhd'])

но это ошибка, которую я получаю:

RuntimeErrorTraceback (most recent call last)
<ipython-input-42-85abf82c3afa> in <module>()
      1 files = [f for f in os.listdir('.') if 'mhd' in f]
      2 print(sorted_files[1:25])
----> 3 sitk.ReadImage(['volume00001.mhd','volume00002.mhd'])

/gpfs/bbp.cscs.ch/home/amsalem/anaconda2/lib/python2.7/site-packages/SimpleITK/SimpleITK.pyc in ReadImage(*args)
   8330 
   8331     """
-> 8332     return _SimpleITK.ReadImage(*args)
   8333 class HashImageFilter(ProcessObject):
   8334     """

RuntimeError: Exception thrown in SimpleITK ReadImage: /tmp/SimpleITK/Code/IO/src/sitkImageSeriesReader.cxx:145:
sitk::ERROR: The file in the series have unsupported 3 dimensions.

Благодарю.

1 ответ

SimpleITK использует SWIG для переноса интерфейса C++ в Insight Segmentation and Registration Toolkit (ITK). Таким образом, документация по встроенному python должна быть дополнена документацией C++ Doxygen. Существует отображение типов C++ на типы Python с надежным неявным преобразованием между ними. Вы можете найти документацию для методов sitk::ReadImage здесь: https://itk.org/SimpleITKDoxygen/html/namespaceitk_1_1simple.html

Обратите внимание, что есть два метода ReadImage, и указанная вами строка документации Python является одним из них.

Из примеров SimpleITK приведен фрагмент для чтения серии DICOM:

print( "Reading Dicom directory:", sys.argv[1] )
reader = sitk.ImageSeriesReader()

dicom_names = reader.GetGDCMSeriesFileNames( sys.argv[1] )
reader.SetFileNames(dicom_names)

image = reader.Execute()

При этом используется интерфейс класса, а не процедурный. Который будет просто:

image = sitk.ReadImage(dicom_names)

или в общем случае со списком строковых имен файлов:

image = sitk.ReadImage(["image1.png", "image2.png"...])

Многие распространенные массивы типа строк будут неявно преобразованы в SWIG. VectorString тип.

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