def test_slice_time_image(): # Test slice timing on image in memory n_slices = 4 n_vols = 5 TR = 3.5 vol_times = np.arange(n_vols) * TR # Add some random jitter per slice slice_times = np.arange(n_slices) * TR / n_slices slice_times = slice_times + np.random.normal(0, 0.05, size=(n_slices,)) # TEST AXIAL data = np.random.normal(size=(2, 3, n_slices, n_vols)) img = nib.Nifti1Image(data, np.eye(4)) # Test against interpolation with interp_slice for order in ('linear', 'cubic', 1, 4): interped = np.zeros_like(data) for slice_no in range(n_slices): orig_times = vol_times + slice_times[slice_no] interped[:, :, slice_no, :] = interp_slice( orig_times, data[:, :, slice_no, :], vol_times, order) interped_img = slice_time_image(img, slice_times, TR, order) assert_almost_equal(interped_img.get_data(), interped) # TEST SAGITTAL data = np.random.normal(size=(n_slices, 2, 3, n_vols)) img = nib.Nifti1Image(data, np.eye(4)) for order in ('linear', 'cubic', 1, 4): interped = np.zeros_like(data) for slice_no in range(n_slices): orig_times = vol_times + slice_times[slice_no] interped[slice_no, ...] = interp_slice( orig_times, data[slice_no, ...], vol_times, order) interped_img = slice_time_image(img, slice_times, TR, order, slice_axis=0) assert_almost_equal(interped_img.get_data(), interped)
def test_slice_time_image(): # Test slice timing on image in memory n_slices = 4 n_vols = 5 TR = 3.5 vol_times = np.arange(n_vols) * TR # Add some random jitter per slice slice_times = np.arange(n_slices) * TR / n_slices slice_times = slice_times + np.random.normal(0, 0.05, size=(n_slices, )) # TEST AXIAL data = np.random.normal(size=(2, 3, n_slices, n_vols)) img = nib.Nifti1Image(data, np.eye(4)) # Test against interpolation with interp_slice for order in ('linear', 'cubic', 1, 4): interped = np.zeros_like(data) for slice_no in range(n_slices): orig_times = vol_times + slice_times[slice_no] interped[:, :, slice_no, :] = interp_slice(orig_times, data[:, :, slice_no, :], vol_times, order) interped_img = slice_time_image(img, slice_times, TR, order) assert_almost_equal(interped_img.get_data(), interped) # TEST SAGITTAL data = np.random.normal(size=(n_slices, 2, 3, n_vols)) img = nib.Nifti1Image(data, np.eye(4)) for order in ('linear', 'cubic', 1, 4): interped = np.zeros_like(data) for slice_no in range(n_slices): orig_times = vol_times + slice_times[slice_no] interped[slice_no, ...] = interp_slice(orig_times, data[slice_no, ...], vol_times, order) interped_img = slice_time_image(img, slice_times, TR, order, slice_axis=0) assert_almost_equal(interped_img.get_data(), interped)
def test_slice_time_file(): # Test slice_time_file from slice_time_image n_slices = 5 n_vols = 4 TR = 2.0 data = np.random.normal(size=(2, 3, n_slices, n_vols)) img = nib.Nifti1Image(data, np.eye(4)) slice_times = np.arange(n_slices) * TR / n_slices + 0.1 tmpdir = tempfile.mkdtemp() try: fname = os.path.join(tmpdir, 'myfile.nii') a_fname = os.path.join(tmpdir, 'amyfile.nii') nib.save(img, fname) for order in ('linear', 'cubic', 1, 4): interped_img = slice_time_image(img, slice_times, TR, order) slice_time_file(fname, slice_times, TR, order) a_img = nib.load(a_fname) assert_almost_equal(interped_img.get_data(), a_img.get_data()) del a_img finally: shutil.rmtree(tmpdir)