Exemplo n.º 1
0
    def test_4d(self):
        tmp_output_dir = tempfile.mkdtemp()
        try:
            results = convert_siemens.dicom_to_nifti(
                read_dicom_directory(test_data.SIEMENS_FMRI),
                os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert compare_nifti(
                results['NII_FILE'],
                ground_thruth_filenames(test_data.SIEMENS_FMRI)[0]) is True

            results = convert_siemens.dicom_to_nifti(
                read_dicom_directory(test_data.SIEMENS_FMRI_IMPLICIT),
                os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert compare_nifti(
                results['NII_FILE'],
                ground_thruth_filenames(
                    test_data.SIEMENS_FMRI_IMPLICIT)[0]) is True

            results = convert_siemens.dicom_to_nifti(
                read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI),
                os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert compare_nifti(
                results['NII_FILE'],
                ground_thruth_filenames(
                    test_data.SIEMENS_CLASSIC_FMRI)[0]) is True

            results = convert_siemens.dicom_to_nifti(
                read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI_IMPLICIT),
                os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert compare_nifti(
                results['NII_FILE'],
                ground_thruth_filenames(
                    test_data.SIEMENS_CLASSIC_FMRI_IMPLICIT)[0]) is True
        finally:
            shutil.rmtree(tmp_output_dir)
Exemplo n.º 2
0
    def test_4d(self):
        tmp_output_dir = tempfile.mkdtemp()
        try:
            results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_FMRI),
                                                     None)
            self.assertTrue(results.get('NII_FILE') is None)
            self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))

            results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_FMRI),
                                                     os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert_compare_nifti(results['NII_FILE'],
                                        ground_thruth_filenames(test_data.SIEMENS_FMRI)[0])
            self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))

            results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_FMRI_IMPLICIT),
                                                     os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert_compare_nifti(results['NII_FILE'],
                                        ground_thruth_filenames(test_data.SIEMENS_FMRI_IMPLICIT)[0])
            self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))

            results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI),
                                                     os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert_compare_nifti(results['NII_FILE'],
                                        ground_thruth_filenames(test_data.SIEMENS_CLASSIC_FMRI)[0])
            self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))

            results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI_IMPLICIT),
                                                     os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert_compare_nifti(results['NII_FILE'],
                                        ground_thruth_filenames(test_data.SIEMENS_CLASSIC_FMRI_IMPLICIT)[0])
            self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
        finally:
            shutil.rmtree(tmp_output_dir)
Exemplo n.º 3
0
    def test_4d(self):
        tmp_output_dir = tempfile.mkdtemp()
        try:
            results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_FMRI),
                                                     None)
            self.assertTrue(results.get('NII_FILE') is None)
            self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))

            results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_FMRI),
                                                     os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert_compare_nifti(results['NII_FILE'],
                                        ground_thruth_filenames(test_data.SIEMENS_FMRI)[0])
            self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))

            results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_FMRI_IMPLICIT),
                                                     os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert_compare_nifti(results['NII_FILE'],
                                        ground_thruth_filenames(test_data.SIEMENS_FMRI_IMPLICIT)[0])
            self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))

            results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI),
                                                     os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert_compare_nifti(results['NII_FILE'],
                                        ground_thruth_filenames(test_data.SIEMENS_CLASSIC_FMRI)[0])
            self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))

            results = convert_siemens.dicom_to_nifti(read_dicom_directory(test_data.SIEMENS_CLASSIC_FMRI_IMPLICIT),
                                                     os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert_compare_nifti(results['NII_FILE'],
                                        ground_thruth_filenames(test_data.SIEMENS_CLASSIC_FMRI_IMPLICIT)[0])
            self.assertTrue(isinstance(results['NII'], nibabel.nifti1.Nifti1Image))
        finally:
            shutil.rmtree(tmp_output_dir)
Exemplo n.º 4
0
def dicom_array_to_nifti(dicom_list, output_file, reorient_nifti=True):
    """ Converts dicom single series (see pydicom) to nifty, mimicking SPM

    Examples: See unit test


    will return a dictionary containing
    - the NIFTI under key 'NIFTI'
    - the NIFTI file path under 'NII_FILE'
    - the BVAL file path under 'BVAL_FILE' (only for dti)
    - the BVEC file path under 'BVEC_FILE' (only for dti)

    IMPORTANT:
    If no specific sequence type can be found it will default to anatomical and try to convert.
    You should check that the data you are trying to convert is supported by this code

    Inspired by http://nipy.sourceforge.net/nibabel/dicom/spm_dicom.html
    Inspired by http://code.google.com/p/pydicom/source/browse/source/dicom/contrib/pydicom_series.py

    :param reorient_nifti: if True the nifti affine and data will be updated so the data is stored LAS oriented
    :param output_file: file path to write to
    :param dicom_list: list with uncompressed dicom objects as read by pydicom
    """
    # copy files so we can can modify without altering the original
    if not are_imaging_dicoms(dicom_list):
        raise ConversionValidationError('NON_IMAGING_DICOM_FILES')

    vendor = _get_vendor(dicom_list)

    if vendor == Vendor.GENERIC:
        results = convert_generic.dicom_to_nifti(dicom_list, output_file)
    elif vendor == Vendor.SIEMENS:
        results = convert_siemens.dicom_to_nifti(dicom_list, output_file)
    elif vendor == Vendor.GE:
        results = convert_ge.dicom_to_nifti(dicom_list, output_file)
    elif vendor == Vendor.PHILIPS:
        results = convert_philips.dicom_to_nifti(dicom_list, output_file)
    elif vendor == Vendor.HITACHI:
        results = convert_hitachi.dicom_to_nifti(dicom_list, output_file)
    else:
        raise ConversionValidationError("UNSUPPORTED_DATA")

    # do image reorientation if needed
    if reorient_nifti or settings.resample:
        results['NII'] = image_reorientation.reorient_image(
            results['NII'], results['NII_FILE'])

    # resampling needs to be after reorientation
    if settings.resample:
        if not common.is_orthogonal_nifti(results['NII']):
            results['NII'] = resample.resample_single_nifti(
                results['NII'], results['NII_FILE'])

    return results
Exemplo n.º 5
0
def dicom_array_to_nifti(dicom_list, output_file, reorient_nifti=True):
    """ Converts dicom single series (see pydicom) to nifty, mimicking SPM

    Examples: See unit test


    will return a dictionary containing
    - the NIFTI under key 'NIFTI'
    - the NIFTI file path under 'NII_FILE'
    - the BVAL file path under 'BVAL_FILE' (only for dti)
    - the BVEC file path under 'BVEC_FILE' (only for dti)

    IMPORTANT:
    If no specific sequence type can be found it will default to anatomical and try to convert.
    You should check that the data you are trying to convert is supported by this code

    Inspired by http://nipy.sourceforge.net/nibabel/dicom/spm_dicom.html
    Inspired by http://code.google.com/p/pydicom/source/browse/source/dicom/contrib/pydicom_series.py

    :param reorient_nifti: if True the nifti affine and data will be updated so the data is stored LAS oriented
    :param output_file: file path to write to
    :param dicom_list: list with uncompressed dicom objects as read by pydicom
    """
    # copy files so we can can modify without altering the original
    if not are_imaging_dicoms(dicom_list):
        raise ConversionValidationError('NON_IMAGING_DICOM_FILES')

    vendor = _get_vendor(dicom_list)
    if vendor == Vendor.GENERIC:
        results = convert_generic.dicom_to_nifti(dicom_list, output_file)
    elif vendor == Vendor.SIEMENS:
        results = convert_siemens.dicom_to_nifti(dicom_list, output_file)
    elif vendor == Vendor.GE:
        results = convert_ge.dicom_to_nifti(dicom_list, output_file)
    elif vendor == Vendor.PHILIPS:
        results = convert_philips.dicom_to_nifti(dicom_list, output_file)
    elif vendor == Vendor.HITACHI:
        results = convert_hitachi.dicom_to_nifti(dicom_list, output_file)
    else:
        raise ConversionValidationError("UNSUPPORTED_DATA")

    # do image reorientation if needed
    if reorient_nifti or settings.resample:
        image_reorientation.reorient_image(results['NII_FILE'], results['NII_FILE'])

    # resampling needs to be after reorientation
    if settings.resample:
        if not common.is_orthogonal_nifti(results['NII_FILE']):
            resample.resample_single_nifti(results['NII_FILE'])

    return results
Exemplo n.º 6
0
    def test_diffusion_imaging(self):
        tmp_output_dir = tempfile.mkdtemp()
        try:
            results = convert_siemens.dicom_to_nifti(
                read_dicom_directory(test_data.SIEMENS_DTI),
                os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert compare_nifti(
                results['NII_FILE'],
                ground_thruth_filenames(test_data.SIEMENS_DTI)[0]) == True
            assert compare_bval(
                results['BVAL_FILE'],
                ground_thruth_filenames(test_data.SIEMENS_DTI)[2]) == True
            assert compare_bvec(
                results['BVEC_FILE'],
                ground_thruth_filenames(test_data.SIEMENS_DTI)[3]) == True

            results = convert_siemens.dicom_to_nifti(
                read_dicom_directory(test_data.SIEMENS_DTI_IMPLICIT),
                os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert compare_nifti(
                results['NII_FILE'],
                ground_thruth_filenames(
                    test_data.SIEMENS_DTI_IMPLICIT)[0]) == True
            assert compare_bval(
                results['BVAL_FILE'],
                ground_thruth_filenames(
                    test_data.SIEMENS_DTI_IMPLICIT)[2]) == True
            assert compare_bvec(
                results['BVEC_FILE'],
                ground_thruth_filenames(
                    test_data.SIEMENS_DTI_IMPLICIT)[3]) == True

            results = convert_siemens.dicom_to_nifti(
                read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI),
                os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert compare_nifti(
                results['NII_FILE'],
                ground_thruth_filenames(
                    test_data.SIEMENS_CLASSIC_DTI)[0]) == True
            assert compare_bval(
                results['BVAL_FILE'],
                ground_thruth_filenames(
                    test_data.SIEMENS_CLASSIC_DTI)[2]) == True
            assert compare_bvec(
                results['BVEC_FILE'],
                ground_thruth_filenames(
                    test_data.SIEMENS_CLASSIC_DTI)[3]) == True

            results = convert_siemens.dicom_to_nifti(
                read_dicom_directory(test_data.SIEMENS_CLASSIC_DTI_IMPLICIT),
                os.path.join(tmp_output_dir, 'test.nii.gz'))
            assert compare_nifti(
                results['NII_FILE'],
                ground_thruth_filenames(
                    test_data.SIEMENS_CLASSIC_DTI_IMPLICIT)[0]) == True
            assert compare_bval(
                results['BVAL_FILE'],
                ground_thruth_filenames(
                    test_data.SIEMENS_CLASSIC_DTI_IMPLICIT)[2]) == True
            assert compare_bvec(
                results['BVEC_FILE'],
                ground_thruth_filenames(
                    test_data.SIEMENS_CLASSIC_DTI_IMPLICIT)[3]) == True
        finally:
            shutil.rmtree(tmp_output_dir)