Ejemplo n.º 1
0
def feature_vector(imageSizeX, imageSizeY, peaks, match_pattern: MatchPattern):
    '''
    This function generates a sparse mask stack to extract a feature vector.

    A match template based on the parameters in :code:`parameters` is placed at
    each peak position in an individual mask layer. This mask stack can then
    be used in :meth:`~libertem.api.Context.create_mask_job` to generate a feature vector for each
    frame.

    Summing up the mask stack along the first axis generates a mask that can be used for virtual
    darkfield imaging of all peaks together.

    Parameters
    ----------

    imageSizeX,imageSizeY : int
        Frame size in px
    peaks : numpy.ndarray
        Peak positions in px as numpy.ndarray of shape (n, 2) with integer type
    match_pattern : MatchPattern
        Instance of :class:`~MatchPattern`
    '''
    crop_size = match_pattern.get_crop_size()
    return masks.sparse_template_multi_stack(
        mask_index=range(len(peaks)),
        offsetX=peaks[:, 1] - crop_size,
        offsetY=peaks[:, 0] - crop_size,
        template=match_pattern.get_mask(
            (2 * crop_size + 1, 2 * crop_size + 1)),
        imageSizeX=imageSizeX,
        imageSizeY=imageSizeY,
    )
Ejemplo n.º 2
0
def test_sparse_template_multi_stack():
    template = np.ones((2, 3))
    stack = m.sparse_template_multi_stack(mask_index=(0, 1, 2),
                                          offsetY=(13, 14, 15),
                                          offsetX=(15, 14, 13),
                                          template=template,
                                          imageSizeY=32,
                                          imageSizeX=32)
    t1 = np.zeros((32, 32))
    t1[13:15, 15:18] = 1

    t2 = np.zeros((32, 32))
    t2[14:16, 14:17] = 1

    t3 = np.zeros((32, 32))
    t3[15:17, 13:16] = 1

    assert np.allclose(stack[0].todense(), t1)
    assert np.allclose(stack[1].todense(), t2)
    assert np.allclose(stack[2].todense(), t3)