bauerdavid / napari-nD-annotator

BSD 3-Clause "New" or "Revised" License
28 stars 1 forks source link

napari-nD-annotator

License BSD-3 PyPI Python Version tests codecov napari hub

A toolbox for annotating objects one by one in nD.

This plugin contains some tools to make 2D/3D (and technically any dimensional) annotation easier. Main features:

If the napari-bbox plugin is also installed (see Installation), you can also


This napari plugin was generated with Cookiecutter using @napari's cookiecutter-napari-plugin template.

Installation

You can install napari-nD-annotator via pip:

pip install napari-nD-annotator

The plugin is also available in napari-hub, to install it directly from napari, please refer to plugin installation instructions at the official napari website.

Optional packages

There are some functionalities which require additional Python packages.

Bounding boxes

The bounding box and object list functionality requires the napari-bbox Python package. If you want to use these features, install napari-bbox separately either using pip or directly from napari. You can also install it together with this plugin:

pip install napari-nD-annotator[bbox]

[!WARNING] The napari-bbox plugin currently works only with napari<=0.4.17. Do not install it with newer versions.

Minimal surface

To use the minimal surface method, you will need the minimal-surface Python package as well. Please install it using pip:

Separately:

pip install minimal-surface

Or bundled with the plugin:

pip install napari-nD-annotator[ms]

[!WARNING] The minimal-surface package is only available for Windows at the time. We are actively working on bringing it to Linux and Mac systems as well.

#

If you would like to install all optional packages, use

pip install napari-nD-annotator[all]

If any problems occur during installation or while using the plugin, please file an issue.

Usage

You can start napari with the plugin's widgets already opened as:

napari -w napari-nD-annotator "Object List" "Annotation Toolbox"

Bounding boxes

The main idea is to create bounding boxes around objects we want to annotate, crop them, and annotate them one by one. This has mainly two advantages when visualizing in 3D:

  1. We don't have to load the whole data into memory
  2. The surrounding objects won't occlude the annotated ones, making it easier to check the annotation.

Bounding boxes can be created from the Object list widget. The dimensionality of the bounding box layer will be determined from the image layer. As bounding boxes are created, a small thumbnail will be displayed.

The proposed pipeline goes as follows:

  1. Create a bounding box layer
  2. Select data parts using the bounding boxes
  3. Select an object from the object list
  4. Annotate the object
  5. Repeat from 3.

Slice interpolation

The Interpolation tab contains tools for estimating missing annotation slices from existing ones. There are multiple options:

Note: Geometric and RPSV interpolation works only when there's a single connected mask on each slice. If you want to interpolate disjoint objects (e.g. dividing cells), use distance based interpolation instead.

Note: Distance-based interpolation might give bad results if some masks are too far away from each other on the same slice and there's a big offset compared to the other slice used in the interpolation. If you get unsatisfactory results, try annotating more slices (skip less frames).

https://user-images.githubusercontent.com/36735863/188876826-1771acee-93ba-4905-982e-bfb459329659.mp4

Minimal contour

This plugin can estimate a minimal contour, which is calculated from a point set on the edges of the object, which are provided by the user. This contour will follow some kind of image feature (pixels with high gradient or high/low intensity). Features:

This functionality can be used by selecting the Minimal Contour tab in the Annotation Toolbox widget, which will create a new layer called Anchors.

Warning: Do not remove the Anchors layer!

Warning: Some utility layers appear in the layer list when using the plugin. These are marked with a lock (:lock:) symbol. Do not remove them or modify their data, as this will most probably break the plugin! However, you can change their appearance, e.g. their color settings.

Intensity-based:

https://user-images.githubusercontent.com/36735863/191023482-0dfafb5c-003a-47f6-a21b-8582a4e3930f.mp4

Gradient-based:

https://user-images.githubusercontent.com/36735863/191024941-f20f63a0-8281-47d2-be22-d1ec34fe1f5d.mp4

Custom feature:

https://user-images.githubusercontent.com/36735863/191025028-3f807bd2-1f2e-40d2-800b-48af820a7dbe.mp4

Shortcuts

Action Mouse Keyboard
Increment selected label Shift + Wheel ⬆️ E
Decrement selected label Shift + Wheel ⬇️ Q
Previous slice Ctrl + Wheel ⬆️* A
Next slice Ctrl + Wheel ⬇️* D
Increase paint brush size of labels layer Alt + Wheel ⬆️ W
Decrease paint brush size of labels layer Alt + Wheel ⬇️ S
Interpolate - Ctrl+I
Change between 'Anchors' and the labels layer - Ctrl+Tab
Jump to layer #i - Ctrl+'i'**

*Built-in functionality of napari

**i: 0-9

Note: you can check the list of available shortcuts by clicking the ? button in the bottom right corner of the main widget.

License

Distributed under the terms of the BSD-3 license, "napari-nD-annotator" is free and open source software

Issues

If you encounter any problems, please file an issue along with a detailed description.