2

I have a series of dicom files (.dcm) for each patient that I want to convert to nii.gz files, but nothing happens (even error info) with the following conversion...

import dicom2nifti
dicom2nifti.settings.set_gdcmconv_path('C:/Program Files/GDCM 3.0/bin/gdcmconv.exe')
dicom2nifti.convert_directory('M0_1', 'M0_1.nii.gz')

The error occurs when trying other methods....

import dicom2nifti
dicom2nifti.settings.set_gdcmconv_path('C:/Program Files/GDCM 3.0/bin/gdcmconv.exe')
dicom2nifti.dicom_series_to_nifti('M0_1', 'M0_1.nii.gz')

Error Log:

Traceback (most recent call last):
  File ".\test.py", line 5, in <module>
    dicom2nifti.dicom_series_to_nifti('M0_1', 'M0_1.nii.gz')
  File "D:\Anaconda3\envs\pydicom\lib\site-packages\dicom2nifti\convert_dicom.py", line 78, in dicom_series_to_nifti
    return dicom_array_to_nifti(dicom_input, output_file, reorient_nifti)
  File "D:\Anaconda3\envs\pydicom\lib\site-packages\dicom2nifti\convert_dicom.py", line 112, in dicom_array_to_nifti
    if not are_imaging_dicoms(dicom_list):
  File "D:\Anaconda3\envs\pydicom\lib\site-packages\dicom2nifti\convert_dicom.py", line 151, in are_imaging_dicoms
    if common.is_philips(dicom_input):
  File "D:\Anaconda3\envs\pydicom\lib\site-packages\dicom2nifti\common.py", line 102, in is_philips
    header = dicom_input[0]
IndexError: list index out of range

File structure:

M0_1
   |----IM-0001-0001.dcm
   |----IM-0001-0002.dcm
   ........
   |----IM-0001-000299.dcm
   |----IM-0001-000300.dcm

Environment: windows10, python: 3.6, dicom2nifti2.3.0

Where am I doing wrong?

Or is there any other way to convert it?

Thanks in advance!

Amit Joshi
  • 15,448
  • 21
  • 77
  • 141
Linminxiang
  • 325
  • 2
  • 14

1 Answers1

4

I haven't used dicom2nifti, but you can convert DICOM to Nifti using SimpleITK.

Here's the code that ought to do the job:

import SimpleITK as sitk

reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames('M0_1')
reader.SetFileNames(dicom_names)
image = reader.Execute()

# Added a call to PermuteAxes to change the axes of the data
image = sitk.PermuteAxes(image, [2, 1, 0])

sitk.WriteImage(image, 'M0_1.nii.gz')

You can learn more about SimpleITK here: https://simpleitk.readthedocs.io/

UPDATE: I added a call to SimpleITK's PermuteAxes to change the axis order from X-Y-Z to Z-Y-X.

Dave Chen
  • 1,905
  • 1
  • 12
  • 18