Source code for imgroi.core

__author__ = "John Kirkham <kirkhamj@janelia.hhmi.org>"
__date__ = "$Oct 28, 2016 15:26$"


import numpy

import mahotas


[docs]def label_mask_stack(new_masks, dtype=None): """ Takes a mask stack and replaces them by the max of an enumerated stack. In other words, each mask is replaced by a consecutive integer (starts with 1 and proceeds to the length of the given axis (0 by default)). Afterwards, the max is taken along the given axis. Args: new_masks(numpy.ndarray): masks to enumerate dtype(type): type to use for the label matrix (default is int). Returns: (numpy.ndarray): an enumerated stack. Examples: >>> numpy.set_printoptions(legacy="1.13") >>> label_mask_stack( ... numpy.array([[[1, 0, 0, 0], ... [0, 0, 0, 0], ... [0, 0, 0, 0], ... [0, 0, 0, 0]], ... ... [[0, 0, 0, 0], ... [0, 1, 0, 0], ... [0, 0, 0, 0], ... [0, 0, 0, 0]], ... ... [[0, 0, 0, 0], ... [0, 0, 0, 0], ... [0, 0, 1, 0], ... [0, 0, 0, 0]], ... ... [[0, 0, 0, 0], ... [0, 0, 0, 0], ... [0, 0, 0, 0], ... [0, 0, 0, 1]]], dtype=bool) ... ) array([[1, 0, 0, 0], [0, 2, 0, 0], [0, 0, 3, 0], [0, 0, 0, 4]]) """ try: xrange except NameError: xrange = range if dtype is None: dtype = int dtype = numpy.dtype(dtype).type new_lbl_img = numpy.zeros( new_masks.shape[1:], dtype=dtype ) for i in xrange(len(new_masks)): lbl = new_lbl_img.dtype.type(i + 1) numpy.maximum( new_lbl_img, lbl * new_masks[i], out=new_lbl_img ) return new_lbl_img
[docs]def find_contours(img): """ Takes an image and extracts contours from the mask. Args: a_image(numpy.ndarray): takes an image. Returns: (numpy.ndarray): an array with contours. Examples: >>> numpy.set_printoptions(legacy="1.13") >>> a = numpy.array([[ True, True, False], ... [False, False, False], ... [ True, True, True]], dtype=bool) >>> find_contours(a) array([[ True, True, False], [False, False, False], [ True, True, True]], dtype=bool) >>> find_contours(numpy.eye(3)) array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]]) >>> a = numpy.array([ ... [False, False, True, False, False, False, True], ... [ True, False, False, False, True, False, False], ... [ True, True, False, True, True, False, True], ... [ True, False, False, True, True, False, False], ... [ True, False, False, False, False, False, False], ... [False, True, False, False, False, False, True], ... [False, True, True, False, False, False, False] ... ], dtype=bool) >>> find_contours(a) array([[False, False, True, False, False, False, True], [ True, False, False, False, True, False, False], [ True, True, False, True, True, False, True], [ True, False, False, True, True, False, False], [ True, False, False, False, False, False, False], [False, True, False, False, False, False, True], [False, True, True, False, False, False, False]], dtype=bool) """ struct = numpy.ones((3,) * img.ndim, dtype=bool) mask = (img != 0) mask ^= mahotas.erode( mask, struct ) contours = img * mask return contours