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, )
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)