Может ли 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
тип.