napari feature classifier


An interactive classifier plugin to use with label images and feature measurements

Workflow step:
Object classification

License PyPI Python Version tests codecov napari hub

An interactive classifier plugin that allows the user to assign objects in a label image to multiple classes and train a classifier to learn those classes based on a feature dataframe.


To use the napari-feature-classifier, you need to have a label image and a csv file containing measurements that correspond to the object in the label image. The csv file needs to contain a column with integer values corresponding to the label values in the label image. These interactive classification workflows are well suited to visually define cell types, find mitotic cells in images, do quality control by automatically detecting missegmented cells and other tasks where a user can easily assign objects to groups.

Initialize a classifier:

  • Start the classifier in napari by going to Plugins -> napari-feature-classifier -> Initialize a Classifier
  • Provide a csv file that contains feature measurements and a column with the integer labels corresponding to the label layer you are using.
  • Choose a name (or relative path from the current working directory) for the classifier. The classifier is initially saved in the current working directory (you can change this later on).
  • Select the features you want to use for the classifier (you need to do the feature selection before initializing. The feature selection can't be changed after initialization anymore). Hold the command key to select multiple features. Initialize Classifier

Classify objects:

  • Make sure you have the label layer selected on which you want to classify
  • Select the current class with the radio buttons or by pressing 0, 1, 2, 3 or 4
  • Click on label objects in the viewer to assign them to the currently selected class
  • While you need to have the label layer active to select, sometimes you want to focus on the intensity images. You can press v (or manually change the opacity of the label layer) to focus on the intensity images.
  • Once you have trained enough examples, click "Run Classifier" (or press t) to run the classifier and have it make a prediction for all objects. Aim for at least a dozen annotations per class, as the classifier divides your annotations 80/20 in training and test sets. To get good performance readouts, aim for >30 annotations per class.
  • Once you get predictions, correct mistakes the classifier made and retrain it to improve its performance.
  • You can save the classifier under a different name (to move it to a new folder or to have a slightly different version of the classifier - but careful, it autosaves whenever you run it). Define the new output location and then click Save Classifier (you need to click the Save Classifier button. Just defining the new output path does not save it yet) trainClassifier

Apply the classifier to additional images:

  • You can apply a classifier trained on one image to additional label images. Use Plugins -> napari-feature-classifier -> Load Classifier
  • Select the classifier (.clf file with the name you gave above) and a csv file containing the same features as the past images.
  • Click Load Classifier, proceed as above. LoadClassifier

Export classifier results

  • To export the training data and the results of the classifier, define an Export Name (full path to an output file or just a filename ending in .csv) where the results of the classifier shall be saved
  • Click Export Classifier Result (Just selecting a filename is not enough, you need to click the export button)
  • The results of the classifier are save in a csv file. The first two columns are index columns: path describes the Feature Path used (and allows you to understand which image / feature dataframe a result is from) and label is an integer of the label object within that image. The predict column contains predictions of the classifier for all objects (except those that contained NaNs in their feature data) and the train column contains the annotations you made (0 for unclassified objects, 1, 2, 3 or 4 for the classes) DataStructure

There is a simple workflow for the classifier in the examples folder:

  • Install jupyter-lab (pip install jupyterlab)
  • Open the notebook in jupyter lab (Type jupyter-lab in the terminal when you are in the examples folder)
  • Follow the instructions to generate an example dataframe and an example label image
  • Use the classifier in napari with this simplified data

Refactored Classifier

We're currently in the process of refactoring the classifier code to make it more modular. As a first step, we have created a separate Annotator widget that is already available in version 0.0.2 of the classifier. The current classifier doesn't make use of these annotations yet, so only use the new annotator widget if you need annotation only. We are refactoring the classifier to also work with this and will release the refactored classifier later.

Initializing the new Annotator

Start the annotator widget by going to Plugins -> napari-feature-classifier -> Annotator Select names for your classes. You can name up to 9 classes. Only classes that you give a name will be created upon initialization. Then click Initialize.

Screenshot 2023-02-16 at 14 49 38

A new annotator widget opens. Use the Radio-Buttons to select what class you're annotating (or keybindings for 1-9 for classes, 0 for deselect). The annotator will always work on the currently selected label layer. While the annotator is open, you can't edit the labels. Restart napari to allow editing of labels again.

Screenshot 2023-02-16 at 14 50 00

The annotations are saved in the layer.features table of the corresponding label layer as an annotations column. Screenshot 2023-02-16 at 15 01 01


This plugin is written for the new napari npe2 plugin engine. Thus, it requires napari >= 0.4.13. Activate your environment where you have napari installed (or install napari using pip install "napari[all]"), then install the classifier plugin:

pip install napari-feature-classifier

Similar napari plugins

If you're looking for other classification approaches, apoc by Robert Haase has a pixel classifier in napari and an object classification workflow:
napari-accelerated-pixel-and-object-classification (APOC)
Alternatively, Clément Cazorla has built napari-svetlana, a deep learning based classifier


Contributions are very welcome.


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


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


Joel Lüthi & Max Hess


  • 0.0.3

Last updated:

  • 03 March 2023

First released:

  • 12 February 2022


  • BSD-3-Clause

Supported data:

  • Information not submitted

Plugin type:

GitHub activity:

  • Stars: 14
  • Forks: 4
  • Issues + PRs: 13

Python versions supported:

Operating system:


  • numpy
  • napari
  • matplotlib
  • magicgui
  • pandas
  • scikit-learn

Sign up to receive updates