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)
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
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
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)
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)
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)