Пример #1
0
def embed_nifti(dcmfiles, niftifile, infofile, force=False):
    import dcmstack as ds
    import nibabel as nb
    import os
    stack = ds.parse_and_stack(dcmfiles, force=force).values()
    if len(stack) > 1:
        raise ValueError('Found multiple series')
    stack = stack[0]
        
    #Create the nifti image using the data array
    if not os.path.exists(niftifile):
        nifti_image = stack.to_nifti(embed_meta=True)
        nifti_image.to_filename(niftifile)
        return ds.NiftiWrapper(nifti_image).meta_ext.to_json()
    orig_nii = nb.load(niftifile)
    orig_hdr = orig_nii.get_header()
    aff = orig_nii.get_affine()
    ornt = nb.orientations.io_orientation(aff)
    axcodes = nb.orientations.ornt2axcodes(ornt)
    new_nii = stack.to_nifti(voxel_order=''.join(axcodes), embed_meta=True)
    new_hdr = new_nii.get_header()
    #orig_hdr.extensions = new_hdr.extensions
    #orig_nii.update_header()
    #orig_nii.to_filename(niftifile)
    meta = ds.NiftiWrapper(new_nii).meta_ext.to_json()
    with open(infofile, 'wt') as fp:
        fp.writelines(meta)
    return niftifile, infofile
Пример #2
0
def embed_nifti(dcmfiles, niftifile, infofile, force=False):
    import dcmstack as ds
    import nibabel as nb
    import os
    stack = ds.parse_and_stack(dcmfiles, force=force).values()
    if len(stack) > 1:
        raise ValueError('Found multiple series')
    stack = stack[0]
        
    #Create the nifti image using the data array
    if not os.path.exists(niftifile):
        nifti_image = stack.to_nifti(embed_meta=True)
        nifti_image.to_filename(niftifile)
        return ds.NiftiWrapper(nifti_image).meta_ext.to_json()
    orig_nii = nb.load(niftifile)
    orig_hdr = orig_nii.get_header()
    aff = orig_nii.get_affine()
    ornt = nb.orientations.io_orientation(aff)
    axcodes = nb.orientations.ornt2axcodes(ornt)
    new_nii = stack.to_nifti(voxel_order=''.join(axcodes), embed_meta=True)
    new_hdr = new_nii.get_header()
    #orig_hdr.extensions = new_hdr.extensions
    #orig_nii.update_header()
    #orig_nii.to_filename(niftifile)
    meta = ds.NiftiWrapper(new_nii).meta_ext.to_json()
    with open(infofile, 'wt') as fp:
        fp.writelines(meta)
    return niftifile, infofile
Пример #3
0
    def __init__(self, fname):
        # A directory containing DICOMs. Convert them to Nifti
        print("Converting DICOMS in %s..." % (os.path.basename(fname)))
        src_dcms = glob.glob('%s/*' % fname)
        nii = None
        try:
            if HAVE_DCMSTACK:
                # Give DCMSTACK a chance to do its thing
                stacks = dcmstack.parse_and_stack(src_dcms)
                stack = stacks.values()[0]
                nii = stack.to_nifti()
        except:
            warnings.warn("DCMSTACK failed - trying our method")
        if nii is None:
            # Try our top-secret in-house method
            nii = self.fallback_dcmstack(src_dcms)

        print("DONE\n")
        if len(nii.shape) > 3:
            nvols = nii.shape[3]
        else:
            nvols = 1

        grid = DataGrid(nii.shape[:3], nii.header.get_best_affine())
        self.dcmdata = nii.get_data()
        QpData.__init__(self, fname, grid, nvols, fname=fname)
Пример #4
0
def dcm_to_nii(dcm, nii_file_name):
    try:
        stacks = dcmstack.parse_and_stack(dcm)
        for stack in stacks.itervalues():
            nii = stack.to_nifti()
            nii.to_filename(nii_file_name)
            break
    except:
        print 'dcmstack DICOM to NIFTI failed.'
Пример #5
0
def dcm_to_nii(dcm, nii_file_name):
    try:
        stacks = dcmstack.parse_and_stack(dcm)
        for stack in stacks.itervalues():
            nii = stack.to_nifti()
            nii.to_filename(nii_file_name)
            break
    except:
        print 'dcmstack DICOM to NIFTI failed.'
Пример #6
0
def import_dicom(search_path, extension='IMA'):
    import dcmstack
    from glob import glob
    search_string = search_path + '/*.' + extension
    src_paths = glob(search_string)
    stacks = dcmstack.parse_and_stack(src_paths)
    images = []
    for key in stacks.keys():
        stack = stacks[key]
        image = nifti_to_occiput(stack.to_nifti())
        images.append(image)
    return images
Пример #7
0
def import_dicom(search_path, extension='IMA'): 
    import dcmstack
    from glob import glob
    search_string = search_path + '/*.' + extension
    src_paths = glob(search_string)
    stacks = dcmstack.parse_and_stack(src_paths)
    images = []
    for key in stacks.keys():
        stack = stacks[key] 
        image = nifti_to_occiput(stack.to_nifti())
        images.append(image) 
    return images 
Пример #8
0
def import_dicom(search_path, extension='IMA'):
    if(not dcmstack_available):
        raise ("Pleast install dcmstack from https://github.com/moloney/dcmstack/tags")
    else:
        search_string = search_path + '/*.' + extension
        src_paths = glob(search_string)
        stacks = dcmstack.parse_and_stack(src_paths)
        images = []
        for key in stacks.keys():
            stack = stacks[key]
            image = nifti_to_occiput(stack.to_nifti())
            images.append(image)
        return images
Пример #9
0
 def test_default(self):
     res = dcmstack.parse_and_stack(self.in_paths)
     eq_(len(res), 1)
     ds = pydicom.read_file(self.in_paths[0])
     group_key = list(res.keys())[0]
     for attr_idx, attr in enumerate(dcmstack.default_group_keys):
         if attr in dcmstack.default_close_keys:
             ok_(np.allclose(group_key[attr_idx], getattr(ds, attr)))
         else:
             eq_(group_key[attr_idx], getattr(ds, attr))
     stack = list(res.values())[0]
     ok_(isinstance(stack, dcmstack.DicomStack))
     stack_data = stack.get_data()
     eq_(stack_data.ndim, 4)
Пример #10
0
 def test_default(self):
     res = dcmstack.parse_and_stack(self.in_paths)
     eq_(len(res), 1)
     ds = pydicom.read_file(self.in_paths[0])
     group_key = list(res.keys())[0]
     for attr_idx, attr in enumerate(dcmstack.default_group_keys):
         if attr in dcmstack.default_close_keys:
             ok_(np.allclose(group_key[attr_idx], getattr(ds, attr)))
         else:
             eq_(group_key[attr_idx], getattr(ds, attr))
     stack = list(res.values())[0]
     ok_(isinstance(stack, dcmstack.DicomStack))
     stack_data = stack.get_data()
     eq_(stack_data.ndim, 4)
Пример #11
0
    def _run_interface(self, runtime):
        src_paths = self._get_filelist(self.inputs.dicom_files)
        stacks = dcmstack.parse_and_stack(src_paths)

        self.out_list = []
        for key, stack in stacks.iteritems():
            nw = NiftiWrapper(stack.to_nifti(embed_meta=True))
            const_meta = nw.meta_ext.get_class_dict(('global', 'const'))
            out_path =  self._get_out_path(const_meta)
            if not self.inputs.embed_meta:
                nw.remove_extension()
            nb.save(nw.nii_img, out_path)
            self.out_list.append(out_path)

        return runtime
Пример #12
0
    def _run_interface(self, runtime):
        src_paths = self._get_filelist(self.inputs.dicom_files)
        stacks = dcmstack.parse_and_stack(src_paths)

        self.out_list = []
        for key, stack in list(stacks.items()):
            nw = NiftiWrapper(stack.to_nifti(embed_meta=True))
            const_meta = nw.meta_ext.get_class_dict(("global", "const"))
            out_path = self._get_out_path(const_meta)
            if not self.inputs.embed_meta:
                nw.remove_extension()
            nb.save(nw.nii_img, out_path)
            self.out_list.append(out_path)

        return runtime
Пример #13
0
def load_dicom_old(search_path, extension='IMA'):
    progress_bar = ProgressBar(title='Reading src')
    progress_bar.set_percentage(0.1)
    if (not dcmstack_available):
        progress_bar.set_percentage(100.0)
        raise Exception("Pleast install dcmstack from https://github.com/moloney/dcmstack/tags")
    else:
        search_string = search_path + '/*.' + extension
        src_paths = glob(search_string)
        stacks = dcmstack.parse_and_stack(src_paths)
        images = []
        for k, key in enumerate(stacks.keys()):
            stack = stacks[key]
            img = nipy2occiput(stack.to_nifti(embed_meta=True))
            images.append(img)
            progress_bar.set_percentage((k + 1) * 100.0 / len(stacks.keys()))
        progress_bar.set_percentage(100.0)
        return images
Пример #14
0
def get_dicom_info(dicom_dir, dest):
    """Return a freesurfer style dicom info generator
    """
    fl = sorted(glob(os.path.join(dicom_dir, '*.dcm')))
    stack = parse_and_stack(fl, force=True, warn_on_except=True)
    info = {}
    for key in sorted(stack):
        key_fields = key.split('-')
        idx = int(key_fields[0])
        name = key_fields[1]
        stack_object = stack[key]
        if not stack_object.error:
            size = list(stack_object.get_shape())
            if len(size) == 3:
                size.append(1)
            err_status = 'ok'
            out_fn = sanitize_path_comp(key) + '.nii.gz'
            out_path = os.path.join(dest, out_fn)
            nii = stack_object.to_nifti(embed_meta=True)
            nii_wrp = NiftiWrapper(nii)
            meta_fn = out_fn + '.json'
            meta_path = os.path.join(dest, meta_fn)
            with open(meta_path, 'w') as fp:
                fp.write(nii_wrp.meta_ext.to_json())
            nii.to_filename(out_path)
        else:
            size = [0, 0, 0, 0]
            err_status = 'err'
            out_fn = None
            meta_fn = None
        filepath = out_fn
        filename = stack_object._files_info[0][2]
        info[idx] = dict(idx=idx,
                         name=name,
                         err_status=err_status,
                         size=size,
                         filename=filename,
                         filepath=filepath,
                         metapath=meta_fn)
        size = [str(val) for val in size]
        print '\t'.join([str(idx), name, err_status] + size + [filename])
    return info
Пример #15
0
def get_dicom_info(dicom_dir, dest):
    """Return a freesurfer style dicom info generator
    """
    fl = sorted(glob(os.path.join(dicom_dir, '*.dcm')))
    stack = parse_and_stack(fl, force=True, warn_on_except=True)
    info = {}
    for key in sorted(stack):
        key_fields = key.split('-')
        idx = int(key_fields[0])
        name = key_fields[1]
        stack_object = stack[key]
        if not stack_object.error:
            size = list(stack_object.get_shape())
            if len(size) == 3:
                size.append(1)
            err_status = 'ok'
            out_fn = sanitize_path_comp(key) + '.nii.gz'
            out_path = os.path.join(dest, out_fn)
            nii = stack_object.to_nifti(embed_meta=True)
            nii_wrp = NiftiWrapper(nii)
            meta_fn = out_fn + '.json'
            meta_path = os.path.join(dest, meta_fn)
            with open(meta_path, 'w') as fp:
                fp.write(nii_wrp.meta_ext.to_json())
            nii.to_filename(out_path)
        else:
            size = [0, 0, 0, 0]
            err_status = 'err'
            out_fn = None
            meta_fn = None
        filepath = out_fn
        filename = stack_object._files_info[0][2]
        info[idx] = dict(idx=idx, name=name, err_status=err_status,
                         size=size, filename=filename,
                         filepath=filepath,
                         metapath=meta_fn)
        size = [str(val) for val in size]
        print '\t'.join([str(idx), name, err_status] + size + [filename])
    return info
Пример #16
0
"""
import os
os.chdir('/Users/m131199/Downloads/LGG-229/MRI_Hd/axial_T1/')

from nipype.interfaces.dcmstack import DcmStack

stacker = DcmStack()
stacker.inputs.dicom_files = '/Users/m131199/Downloads/LGG-229/MRI_Hd/axial_T1/'
stacker.run() 
#result.outputs.out_file


import dcmstack
from glob import glob
src_dcms = glob('/Users/m131199/Downloads/LGG-229/MRI_Hd/axial_T1/*.dcm')
stacks = dcmstack.parse_and_stack(src_dcms)
stack = stacks.values[0]
nii = stack.to_nifti()
nii.to_filename('output.nii.gz')

#import os
#os.chdir('/Users/m131199/Downloads/LGG-229/MRI_Hd/AX_T2_OBL/')
#from nipype.interfaces.freesurfer import DICOMConvert
#cvt = DICOMConvert()
#cvt.inputs.dicom_dir = '/Users/m131199/Downloads/LGG-229/MRI_Hd/AX_T2_OBL/'
#cvt.inputs.file_mapping = [('nifti', '*.nii'), ('info', 'dicom*.txt'), ('dti', '*dti.bv*')]
#
#from nipype.interfaces.dcm2nii import Dcm2nii
#converter = Dcm2nii()
#converter.inputs.source_names = ['/Users/m131199/Downloads/LGG-229/MRI_Hd/AX_T2_OBL/9999.193444720349620986809184775663710556976.dcm']
#converter.inputs.gzip_output = True
Пример #17
0
def embed_nifti(dcmfiles, niftifile, infofile, bids_info, force, min_meta):
    """

    If `niftifile` doesn't exist, it gets created out of the `dcmfiles` stack,
    and json representation of its meta_ext is returned (bug since should return
    both niftifile and infofile?)

    if `niftifile` exists, its affine's orientation information is used while
    establishing new `NiftiImage` out of dicom stack and together with `bids_info`
    (if provided) is dumped into json `infofile`

    Parameters
    ----------
    dcmfiles
    niftifile
    infofile
    bids_info
    force
    min_meta

    Returns
    -------
    niftifile, infofile

    """
    # imports for nipype
    import nibabel as nb
    import os
    import os.path as op
    import json
    import re

    if not min_meta:
        import dcmstack as ds
        stack = ds.parse_and_stack(dcmfiles, force=force).values()
        if len(stack) > 1:
            raise ValueError('Found multiple series')
        stack = stack[0]

        #Create the nifti image using the data array
        if not op.exists(niftifile):
            nifti_image = stack.to_nifti(embed_meta=True)
            nifti_image.to_filename(niftifile)
            return ds.NiftiWrapper(nifti_image).meta_ext.to_json()

        orig_nii = nb.load(niftifile)
        aff = orig_nii.affine
        ornt = nb.orientations.io_orientation(aff)
        axcodes = nb.orientations.ornt2axcodes(ornt)
        new_nii = stack.to_nifti(voxel_order=''.join(axcodes), embed_meta=True)
        meta = ds.NiftiWrapper(new_nii).meta_ext.to_json()

    meta_info = None if min_meta else json.loads(meta)

    if bids_info:

        if min_meta:
            meta_info = bids_info
        else:
            # make nice with python 3 - same behavior?
            meta_info = meta_info.copy()
            meta_info.update(bids_info)
            # meta_info = dict(meta_info.items() + bids_info.items())
        try:
            meta_info['TaskName'] = (re.search(
                '(?<=_task-)\w+',
                op.basename(infofile)).group(0).split('_')[0])
        except AttributeError:
            pass
    # write to outfile
    with open(infofile, 'wt') as fp:
        json.dump(meta_info, fp, indent=3, sort_keys=True)

    return niftifile, infofile
Пример #18
0
import dcmstack
from glob import glob

src_paths = glob(
    '/media/gregory/Acer2/Users/grego/Documents/CNI/CNI_BOSTON_DATA/WOLFSON_SUBSET_REDUCED2/sub-005/ses-4yr/Rest210_2/*.dcm'
)
stacks = dcmstack.parse_and_stack(src_paths, force=True)