Ejemplo n.º 1
0
def compute_relative_transform(psx_EM, psy_EM, ro_EM, sh_EM, trx_EM, try_EM,
                               psx_FM, psy_FM, ro_FM, sh_FM, trx_FM, try_FM):
    """Compute relative affine transformation

    Parameters
    ----------
    psx_EM, psy_EM : float
        EM pixel size in x, y [m]
    ro_EM : float
        EM rotation (should be ~0)
    sh_EM : float
        EM shear
    trx_EM, try_EM : float
        EM translation in x, y [m]
    psx_FM, psy_FM : float
        FM pixel size in x, y [m]
    ro_FM : float
        FM rotation
    sh_FM : float
        FM shear (should be ~0)
    trx_FM, try_FM : float
        FM translation in x, y [m]

    Returns
    -------
    A : 3x3 array
        Relative affine transformation
    """
    A = AffineMPL().rotate(-ro_FM)\
                   .skew(0, -sh_EM)\
                   .scale(psx_FM / psx_EM,
                          psy_FM / psy_EM)\
                   .translate((trx_FM - trx_EM) /  psx_EM,
                              (try_FM - try_EM) / -psy_EM)
    return A.get_matrix()
Ejemplo n.º 2
0
def rotate_stack(stack_in, stack_out=None, r=0, render=None):
    """Rotate stack by an arbitrary rotation

    Parameters
    ----------
    stack_in : str
        Input stack name
    stack_out : str (optional)
        Output stack name
        Overwrites input stack if not provided
    r : float
        rotation angle [rad]
    """
    # Create DataFrame for input stack
    df_stack = create_stack_DataFrame(stack=stack_in, render=render)

    # Create scaling transform
    T = AffineMPL().rotate(r)
    A = AffineRender()
    A.M = T.get_matrix()

    # Add rotation transform to DataFrame
    for i, tile in df_stack.iterrows():
        df_stack.at[i, 'tforms'] += [A]

    # Set output stack name
    stack_out = stack_out if stack_out is not None else stack_in

    # Create scaled stack
    create_stack_from_DataFrame(df=df_stack, name=stack_out, render=render)
Ejemplo n.º 3
0
def translate_stack(stack_in, stack_out=None, tx=0.0, ty=0.0, render=None):
    """Translate stack by an arbitrary translation

    Parameters
    ----------
    stack_in : str
        Input stack name
    stack_out : str (optional)
        Output stack name
        Overwrites input stack if not provided
    tx : float
        x translation [px]
    ty : float
        y translation [px]
    """
    # Create DataFrame for input stack
    df_stack = create_stack_DataFrame(stack=stack_in, render=render)

    # Create scaling transform
    T = AffineMPL().translate(tx, ty)
    A = AffineRender()
    A.M = T.get_matrix()

    # Add translation transform to DataFrame
    for i, tile in df_stack.iterrows():
        df_stack.at[i, 'tforms'] += [A]

    # Set output stack name
    stack_out = stack_out if stack_out is not None else stack_in

    # Create scaled stack
    create_stack_from_DataFrame(df=df_stack, name=stack_out, render=render)
Ejemplo n.º 4
0
def scale_stack(stack_in, stack_out=None, sx=1.0, sy=1.0, render=None):
    """Scale stack by an arbitrary scale factor

    Parameters
    ----------
    stack_in : str
        Input stack name
    stack_out : str (optional)
        Output stack name
        Overwrites input stack if not provided
    sx : float
        x scale factor
    sy : float
        y scale factor
    """
    # Create DataFrame for input stack
    df_stack = create_stack_DataFrame(stack=stack_in, render=render)

    # Create scaling transform
    T = AffineMPL().scale(sx, sy)
    A = AffineRender()
    A.M = T.get_matrix()

    # Add scale transform to DataFrame
    for i, tile in df_stack.iterrows():
        df_stack.at[i, 'tforms'] += [A]

    # Set output stack name
    stack_out = stack_out if stack_out is not None else stack_in

    # Create scaled stack
    create_stack_from_DataFrame(df=df_stack, name=stack_out, render=render)