def affine_resample(source, target, T, toresample='source', dtype=None, order=3, use_scipy=False): """ Image resampling using spline interpolation. Parameters ---------- source : image target : image T : source-to-target affine transform """ Tv = np.dot(np.linalg.inv(target.get_affine()), np.dot(T, source.get_affine())) if use_scipy or not order==3: use_scipy = True from scipy.ndimage import affine_transform if toresample == 'target': if not use_scipy: data = cspline_resample(target.get_data(), source.get_shape(), Tv, dtype=dtype) else: data = affine_transform(target.get_data(), Tv[0:3,0:3], offset=Tv[0:3,3], output_shape=source.get_shape(), order=order) return Image(data, source.get_affine()) else: if not use_scipy: data = cspline_resample(source.get_data(), target.get_shape(), np.linalg.inv(Tv), dtype=dtype) else: Tv = np.linalg.inv(Tv) data = affine_transform(source.get_data(), Tv[0:3,0:3], offset=Tv[0:3,3], output_shape=target.get_shape(), order=order) return Image(data, target.get_affine())
def resampling(Tv): """ Adding this new test to check whether resample may be replaced with scipy.ndimage.affine_transform """ I = Image(make_data_int16()) t0 = time.clock() I1 = cspline_resample(I.array, I.array.shape, Tv) dt1 = time.clock()-t0 t0 = time.clock() I2 = affine_transform(I.array, Tv[0:3,0:3], offset=Tv[0:3,3], output_shape=I.array.shape) dt2 = time.clock()-t0 assert_almost_equal(I1, I2) print('3d array resampling') print(' using nipy.neurospin: %f sec' % dt1) print(' using scipy.ndimage: %f sec' % dt2)