Integration with ipywidgets#

To reduce friction in the labelling workflow you can construct controls for the currently selected class and whether to be in erasing mode using ipywidgets.

%matplotlib ipympl
import ipywidgets as widgets
from mpl_image_segmenter import ImageSegmenter
from mpl_image_segmenter.example_images import gray_image_stack


image_stack = gray_image_stack()

N_classes = 3



segmenter = ImageSegmenter(image_stack, classes=N_classes, mask_alpha=0.76, cmap='gray')

def set_class(change):
    segmenter.current_class = class_selector.value

def set_erasing(change):
    segmenter.erasing = erasing_button.value

def set_img(change):
    segmenter.image_index = change['new']

class_selector = widgets.Dropdown(options=list(range(1, N_classes + 1)), description="class")
img_slider = widgets.IntSlider(value=0, min=0, max=image_stack.shape[0]-1, description="img index")
erasing_button = widgets.Checkbox(value=False, description="Erasing")

erasing_button.observe(set_erasing, names="value")
class_selector.observe(set_class, names="value")
img_slider.observe(set_img, names="value")

display(widgets.VBox([widgets.HBox([erasing_button, class_selector, img_slider]), segmenter.fig.canvas]))