def test_nifti_mapper(filename): """Basic testing of map2Nifti """ skip_if_no_external('scipy') import nibabel data = fmri_dataset(samples=os.path.join(pymvpa_dataroot, 'example4d.nii.gz'), targets=[1, 2]) # test mapping of ndarray vol = map2nifti(data, np.ones((294912, ), dtype='int16')) if externals.versions['nibabel'] >= '1.2': vol_shape = vol.shape else: vol_shape = vol.get_shape() assert_equal(vol_shape, (128, 96, 24)) assert_true((vol.get_data() == 1).all()) # test mapping of the dataset vol = map2nifti(data) if externals.versions['nibabel'] >= '1.2': vol_shape = vol.shape else: vol_shape = vol.get_shape() assert_equal(vol_shape, (128, 96, 24, 2)) ok_(isinstance(vol, data.a.imgtype)) # test providing custom imgtypes vol = map2nifti(data, imgtype=nibabel.Nifti1Pair) if externals.versions['nibabel'] >= '1.2': vol_shape = vol.shape else: vol_shape = vol.get_shape() ok_(isinstance(vol, nibabel.Nifti1Pair)) # Lets generate a dataset using an alternative format (MINC) # and see if type persists volminc = nibabel.MincImage(vol.get_data(), vol.get_affine(), vol.get_header()) ok_(isinstance(volminc, nibabel.MincImage)) dsminc = fmri_dataset(volminc, targets=1) ok_(dsminc.a.imgtype is nibabel.MincImage) ok_(isinstance(dsminc.a.imghdr, nibabel.minc.MincImage.header_class)) # Lets test if we could save/load now into Analyze volume/dataset if externals.versions['nibabel'] < '1.1.0': raise SkipTest( 'nibabel prior 1.1.0 had an issue with types comprehension') volanal = map2nifti( dsminc, imgtype=nibabel.AnalyzeImage) # MINC has no 'save' capability ok_(isinstance(volanal, nibabel.AnalyzeImage)) volanal.to_filename(filename) dsanal = fmri_dataset(filename, targets=1) # this one is tricky since it might become Spm2AnalyzeImage ok_('AnalyzeImage' in str(dsanal.a.imgtype)) ok_('AnalyzeHeader' in str(dsanal.a.imghdr.__class__)) volanal_ = map2nifti(dsanal) ok_(isinstance(volanal_, dsanal.a.imgtype)) # type got preserved
def run(args): try: nii = nibabel.load(args.input) img = numpy.squeeze(nii.get_data()) img_min = numpy.amin(img) img_max = numpy.amax(img) print 'Image type: {} {}-{}'.format(img.dtype,img_min,img_max) hdr = nii.get_header() q = hdr.get_best_affine(); ornt = nibabel.io_orientation(q) print 'Orientation: {}'.format(ornt) from StringIO import StringIO file_map = nibabel.MincImage.make_file_map() file_map['image'].fileobj = StringIO() print sorted(file_map) mnc = nibabel.MincImage(img,q) mnc.file_map = file_map mnc.to_file_map() except: print "Unexpected error:", sys.exc_info()[0] raise