Beispiel #1
0
def save_nifti(
        image: Any,
        uri: str,
        compress: bool = True,
        partition: Optional[str] = None,

        # Format-specific kwargs
        nifti_version: int = 2):
    if partition is None:
        partition = "xyz"

    for img, _uri in partition_gen(image, partition, uri):
        if nifti_version == 1:
            header = nib.Nifti1Header()
        else:
            header = nib.Nifti2Header()

        header.set_data_shape(img.shape[::-1])
        header.set_data_dtype(img.dtype)
        header.set_xyzt_units(xyz=get_spacing_units(image, "x") or None,
                              t=get_spacing_units(image, "t") or None)

        affine = np.eye(img.ndim + 1, img.ndim + 1)
        for i, ax in enumerate(get_axes(img)):
            affine[i, i] = get_spacing(img, ax) or 1.0

        if nifti_version == 1:
            ni = nib.Nifti1Image(img.data, affine=affine, header=header)
        else:
            ni = nib.Nifti2Image(img.data, affine=affine, header=header)

        nib.save(ni, _uri)
Beispiel #2
0
def _Image_to_Nifti2Image(image, affine=None):

    nifti2header = nib.Nifti2Header()
    nifti2header["dim"][1 : 1 + len(image.nxyz)] = image.nxyz
    nifti2header["pixdim"][1 : 1 + len(image.dxyz)] = image.dxyz

    nifti2image = nib.Nifti2Image(image.data, affine=affine, header=nifti2header)

    return nifti2image
Beispiel #3
0
def make_random_image(filename=None,
                      dims=(10, 10, 10),
                      xform=None,
                      imgtype=1,
                      pixdims=None,
                      dtype=np.float32):
    """Convenience function which makes an image containing random data.
    Saves and returns the nibabel object.

    imgtype == 0: ANALYZE
    imgtype == 1: NIFTI1
    imgtype == 2: NIFTI2
    """

    if   imgtype == 0: hdr = nib.AnalyzeHeader()
    elif imgtype == 1: hdr = nib.Nifti1Header()
    elif imgtype == 2: hdr = nib.Nifti2Header()

    if pixdims is None:
        pixdims = [1] * len(dims)

    pixdims = pixdims[:len(dims)]
    zooms   = [abs(p) for p in pixdims]

    hdr.set_data_dtype(dtype)
    hdr.set_data_shape(dims)
    hdr.set_zooms(zooms)

    if xform is None:
        xform = np.eye(4)
        for i, p in enumerate(pixdims[:3]):
            xform[i, i] = p

    data  = np.array(np.random.random(dims) * 100, dtype=dtype)

    if   imgtype == 0: img = nib.AnalyzeImage(data, xform, hdr)
    elif imgtype == 1: img = nib.Nifti1Image( data, xform, hdr)
    elif imgtype == 2: img = nib.Nifti2Image( data, xform, hdr)

    if filename is not None:

        if op.splitext(filename)[1] == '':
            if imgtype == 0: filename = '{}.img'.format(filename)
            else:            filename = '{}.nii'.format(filename)

        nib.save(img, filename)

    return img
Beispiel #4
0
def _readSpace(group):
    """Reads a *space* group, defining a source or reference space.

    :arg group: A ``h5py.Group`` object.
    :returns:   :class:`.Nifti` object. defining the mapping
    """

    if group.attrs.get('Type') != 'image':
        raise X5Error('Not an image space')

    shape  = group.attrs['Size']
    pixdim = group.attrs['Scales']
    xform  = _readAffine(group['Mapping'])

    hdr = nib.Nifti2Header()
    hdr.set_data_shape(shape)
    hdr.set_zooms(     pixdim)
    hdr.set_sform(     xform, 'aligned')
    return fslimage.Nifti(hdr)
Beispiel #5
0
def save_nifti(
        image: Any,
        uri: str,
        compress: bool = True,
        partition: Optional[str] = None,

        # Format-specific kwargs
        nifti_version: int = 2,
        header: Optional[Any] = None):
    if partition is None:
        partition = "xyz"

    for img, _uri in partition_gen(image, partition, uri):
        if header is None:
            if nifti_version == 1:
                header = nib.Nifti1Header()
            else:
                header = nib.Nifti2Header()

            header.set_data_shape(img.shape[::-1])
            header.set_data_dtype(img.dtype)
            header.set_xyzt_units(xyz=get_spacing_units(image, "x") or None,
                                  t=get_spacing_units(image, "t") or None)

            affine = np.diag((
                *[get_spacing(img, ax) or 1.0
                  for ax in get_spatial_axes(img)], 1.0))

        else:
            affine = None
            nifti_version = 1 if int(header["sizeof_hdr"]) == 348 else 2

        if nifti_version == 1:
            ni = nib.Nifti1Image(img.data, affine=affine, header=header)
        else:
            ni = nib.Nifti2Image(img.data, affine=affine, header=header)

        nib.save(ni, _uri)
Beispiel #6
0
    project_dir = '/nfs/s2/userhome/chenxiayu/workingdir/study/FFA_clustering'
    acti_file = pjoin(
        project_dir,
        'data/HCP_face-avg/s2/S1200.1080.FACE-AVG_level2_zstat_hp200_s2_MSMAll.dscalar.nii'
    )
    patch_dir = pjoin(project_dir, 'data/HCP_face-avg/s2/patches_15/crg')
    patch_file = pjoin(patch_dir, 'rFFA_patch_maps_lt15.nii.gz')
    max_maps_file = pjoin(patch_dir, 'rFFA_max_maps_lt15.nii.gz')
    prob_max_map_file = pjoin(patch_dir, 'rFFA_prob_max_map_lt15.nii.gz')
    brain_structure = 'CIFTI_STRUCTURE_CORTEX_RIGHT'

    acti_maps = CiftiReader(acti_file).get_data(brain_structure, True)
    patch_maps = nib.load(patch_file).get_data()
    max_maps = np.zeros_like(patch_maps)
    for row in range(acti_maps.shape[0]):
        labels = np.unique(patch_maps[row])
        for label in labels:
            if label == 0:
                continue
            acti_map_tmp = acti_maps[row].copy()
            not_label_indices = np.logical_not(patch_maps[row] == label)
            acti_map_tmp[not_label_indices] = -np.inf
            max_idx = np.argmax(acti_map_tmp)
            max_maps[row, max_idx] = label
    prob_max_map = np.mean(max_maps > 0, 0)

    header = nib.Nifti2Header()
    header['descrip'] = 'FreeROI label'
    save2nifti(max_maps_file, max_maps, header=header)
    save2nifti(prob_max_map_file, prob_max_map)