Implementation of the Silver Mountain Operator (SMO) for the estimation of background distributions.

PyPi License PyPi Conda

SMO is a Python package that implements the Silver Mountain Operator (SMO), which allows to recover an unbiased estimation of the background intensity distribution in a robust way.

We provide an easy to use Python package and plugins for some of the major image processing softwares: napari, CellProfiler, and ImageJ / FIJI. See Plugins section below.


To learn more about the theory behind SMO, you can read the pre-print in BioRxiv.

If you use this software, please cite that pre-print.


To obtain a background-corrected image, it is as straightforward as:

from smo import SMO

image =
smo = SMO(sigma=0, size=7, shape=(1024, 1024))
background_corrected_image = smo.bg_corrected(image)

where we used a sample image from scikit-image. By default, the background correction subtracts the median value of the background distribution. Note that the background regions will end up with negative values, but with a median value of 0.

A notebook explaining in more detail the meaning of the parameters and other possible uses for SMO is available here: smo/examples/usage.ipynb Open In Colab.


It can be installed with pip from PyPI:

pip install smo

or with conda from the conda-forge channel:

conda install -c conda-forge smo



A napari plugin is available.

To install:

  • Option 1: in napari, go to Plugins > Install/Uninstall Plugins... in the top menu, search for smo and click on the install button.

  • Option 2: just pip install this package in the napari environment.

It will appear in the Plugins menu.


A CellProfiler plugin in available in the smo/plugins/cellprofiler folder.

To install, save this file into your CellProfiler plugins folder. You can find (or change) the location of your plugins directory in File > Preferences > CellProfiler plugins directory.

ImageJ / FIJI

An ImageJ / FIJI plugin is available in the smo/plugins/imagej folder.

To install, download this file and:

  • Option 1: in the ImageJ main window, click on Plugins > Install... (Ctrl+Shift+M), which opens a file chooser dialog. Browse and select the downloaded file. It will prompt to restart ImageJ for changes to take effect.

  • Option 2: copy into your ImageJ plugins folder (File > Show Folder > Plugins).

To use the plugin, type smo on the bottom right search box:

select smo in the Quick Search window and click on the Run button.

Note: the ImageJ plugin does not check that saturated pixels are properly excluded.


Code style is enforced via pre-commit hooks. To set up a development environment, clone the repository, optionally create a virtual environment, install the [dev] extras and the pre-commit hooks:

git clone
cd SMO
conda create -n smo python pip numpy scipy
pip install -e .[dev]
pre-commit install


  • 2.0.2

Last updated:

  • 06 February 2023

First released:

  • 21 September 2021


Supported data:

  • Information not submitted

Plugin type:

GitHub activity:

  • Stars: 12
  • Forks: 4
  • Issues + PRs: 1

Python versions supported:

Operating system:


  • numpy
  • scipy
  • typing-extensions ; python_version < "3.9"