def rotate(data,
           axis=(1., 0, 0),
           angle=0.,
           center=None,
           mode="constant",
           interpolation="linear"):
    """
    rotates data around axis by a given angle

    Parameters
    ----------
    data: ndarray
        3d array
    axis: tuple
        axis to rotate by angle about
        axis = (x,y,z)
    angle: float
    center: tuple or None
        origin of rotation (cz,cy,cx) in pixels
        if None, center is the middle of data
    
    mode: string 
        boundary mode, one of the following:        
        'constant'
            pads with zeros 
        'edge'
            pads with edge values
        'wrap'
            pads with the repeated version of the input 
    interpolation, string
        interpolation mode, one of the following      
        'linear'
        'nearest'
        
    Returns
    -------
    res: ndarray
        rotated array (same shape as input)

    """
    if center is None:
        center = tuple([s // 2 for s in data.shape])

    cx, cy, cz = center
    m = np.dot(
        mat4_translate(cx, cy, cz),
        np.dot(mat4_rotate(angle, *axis), mat4_translate(-cx, -cy, -cz)))
    m = np.linalg.inv(m)
    return affine(data, m, mode=mode, interpolation=interpolation)
def shift(data, shift=(0, 0, 0), mode="constant", interpolation="linear"):
    """
    translates 3d data by given amount
  
    
    Parameters
    ----------
    data: ndarray
        3d array
    shift : float or sequence
        The shift along the axes. If a float, `shift` is the same for each axis. 
        If a sequence, `shift` should contain one value for each axis.    
    mode: string 
        boundary mode, one of the following:      
        'constant'
            pads with zeros 
        'edge'
            pads with edge values
        'wrap'
            pads with the repeated version of the input 
    interpolation, string
        interpolation mode, one of the following       
        'linear'
        'nearest'
        
    Returns
    -------
    res: ndarray
        shifted array (same shape as input)
    """
    if np.isscalar(shift):
        shift = (shift, ) * 3

    if len(shift) != 3:
        raise ValueError("shift (%s) should be of length 3!")

    shift = -np.array(shift)
    return affine(data,
                  mat4_translate(*shift),
                  mode=mode,
                  interpolation=interpolation)
Example #3
0
def translate(data, shift=(0, 0, 0), mode="constant", interpolation="linear"):
    """
    translates 3d data by given amount
  
    
    Parameters
    ----------
    data: ndarray
        3d array
    shift: tuple, ndarray
        the shift in pixels (dx,dy,dz)
    mode: string 
        boundary mode, one of the following:      
        'constant'
            pads with zeros 
        'edge'
            pads with edge values
        'wrap'
            pads with the repeated version of the input 
    interpolation, string
        interpolation mode, one of the following       
        'linear'
        'nearest'
        
    Returns
    -------
    res: ndarray
        shifted array (same shape as input)
    """
    if len(shift) != 3:
        raise ValueError("shift (%s) should be of length 3!")

    return affine(data,
                  mat4_translate(*shift),
                  mode=mode,
                  interpolation=interpolation)