def glyph(self, vectors_block_size=10, use_negative=False, channels=None): r""" Create glyph of a feature image. If feature_data has negative values, the use_negative flag controls whether there will be created a glyph of both positive and negative values concatenated the one on top of the other. Parameters ---------- vectors_block_size: int Defines the size of each block with vectors of the glyph image. use_negative: bool Defines whether to take into account possible negative values of feature_data. """ # first, choose the appropriate channels if channels is None: pixels = self.pixels[..., :4] elif channels != 'all': pixels = self.pixels[..., channels] else: pixels = self.pixels # compute the glyph negative_weights = -pixels scale = np.maximum(pixels.max(), negative_weights.max()) pos = _create_feature_glyph(pixels, vectors_block_size) pos = pos * 255 / scale glyph_image = pos if use_negative and pixels.min() < 0: neg = _create_feature_glyph(negative_weights, vectors_block_size) neg = neg * 255 / scale glyph_image = np.concatenate((pos, neg)) glyph = Image(glyph_image) # correct landmarks from menpo.transform.affine import NonUniformScale image_shape = np.array(self.shape, dtype=np.double) glyph_shape = np.array(glyph.shape, dtype=np.double) nus = NonUniformScale(glyph_shape / image_shape) glyph.landmarks = self.landmarks nus.apply_inplace(glyph.landmarks) return glyph