Пример #1
0
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())
Пример #2
0
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)