Source code for cell_analysis_tools.visualization.mask_to_outline

from pathlib import Path
from skimage.morphology import dilation, disk
import re

import matplotlib.pylab as plt 
import matplotlib as mpl
mpl.rcParams['figure.dpi'] = 300
import tifffile

    
# using skimage
from skimage.measure import find_contours
from skimage.draw import polygon_perimeter

import numpy as np

import cell_analysis_tools as cat

#%%
[docs] def mask_to_outlines(mask, im = None, binary_mask=False, debug=False): """ Creates an outline of regions based on the input labels mask. Parameters ---------- mask : np.ndarray Labels mask to convert to outlines. im : np.ndarray, optional DESCRIPTION. The default is None. binary_mask : bool, optional Determine if returned array should be boolean. The default is False. debug : TYPE, optional Displays intermediate images/masks for debugging. The default is False. Returns ------- mask_outline : np.ndarray Array containing outlines of input labeled mask. .. image:: ./resources/visualization-mask_to_outlines.png :width: 600 :alt: Image showing original mask and outlines after being run through this function """ if debug: fig, ax = plt.subplots() ax.imshow(im, cmap=plt.cm.gray) mask_outline = np.zeros_like(mask) for idx, label in enumerate(np.unique(mask)[1:]): # skip bg mask pass one_roi = (mask == label) contours = find_contours(one_roi) # plot over figure for contour in contours: if debug: ax.plot(contour[:, 1], contour[:, 0], linewidth=1) rr, cc = polygon_perimeter(contour[:, 1], contour[:, 0], mask_outline.shape) if binary_mask: mask_outline[cc,rr] = 1 else: mask_outline[cc,rr] = idx plt.show() if debug: cat.visualization.compare_images("mask", mask, 'outlines', mask_outline) if binary_mask: mask_outline = mask_outline.astype(bool) return mask_outline
#%% if __name__ == "__main__": pass from skimage.data import binary_blobs from skimage.morphology import label mask = binary_blobs(length=256, volume_fraction=0.2) mask_labeled = label(mask) plt.imshow(mask_labeled) plt.show() mask_outlines = mask_to_outlines(mask_labeled) # , binary_mask=True plt.imshow(mask_outlines, vmax=mask_outlines.max()) plt.show()