Skip to main content

Mahotas: Computer Vision Library

Project description

Mahotas

Python Computer Vision Library

Mahotas is a library of fast computer vision algorithms (all implemented in C++ for speed) operating over numpy arrays.

GH Actions Status Coverage Status License Downloads Install with Conda Install with Anaconda

Python versions 2.7, 3.4+, are supported.

Notable algorithms:

Mahotas currently has over 100 functions for image processing and computer vision and it keeps growing.

The release schedule is roughly one release a month and each release brings new functionality and improved performance. The interface is very stable, though, and code written using a version of mahotas from years back will work just fine in the current version, except it will be faster (some interfaces are deprecated and will be removed after a few years, but in the meanwhile, you only get a warning). In a few unfortunate cases, there was a bug in the old code and your results will change for the better.

Please cite the mahotas paper (see details below under Citation) if you use it in a publication.

Examples

This is a simple example (using an example file that is shipped with mahotas) of calling watershed using above threshold regions as a seed (we use Otsu to define threshold).

# import using ``mh`` abbreviation which is common:
import mahotas as mh

# Load one of the demo images
im = mh.demos.load('nuclear')

# Automatically compute a threshold
T_otsu = mh.thresholding.otsu(im)

# Label the thresholded image (thresholding is done with numpy operations
seeds,nr_regions = mh.label(im > T_otsu)

# Call seeded watershed to expand the threshold
labeled = mh.cwatershed(im.max() - im, seeds)

Here is a very simple example of using mahotas.distance (which computes a distance map):

import pylab as p
import numpy as np
import mahotas as mh

f = np.ones((256,256), bool)
f[200:,240:] = False
f[128:144,32:48] = False
# f is basically True with the exception of two islands: one in the lower-right
# corner, another, middle-left

dmap = mh.distance(f)
p.imshow(dmap)
p.show()

(This is under mahotas/demos/distance.py.)

How to invoke thresholding functions:

import mahotas as mh
import numpy as np
from pylab import imshow, gray, show, subplot
from os import path

# Load photo of mahotas' author in greyscale
photo = mh.demos.load('luispedro', as_grey=True)

# Convert to integer values (using numpy operations)
photo = photo.astype(np.uint8)

# Compute Otsu threshold
T_otsu = mh.otsu(photo)
thresholded_otsu = (photo > T_otsu)

# Compute Riddler-Calvard threshold
T_rc = mh.rc(photo)
thresholded_rc = (photo > T_rc)

# Now call pylab functions to display the image
gray()
subplot(2,1,1)
imshow(thresholded_otsu)
subplot(2,1,2)
imshow(thresholded_rc)
show()

As you can see, we rely on numpy/matplotlib for many operations.

Install

If you are using conda, you can install mahotas from conda-forge using the following commands:

conda config --add channels conda-forge
conda install mahotas

Compilation from source

You will need python (naturally), numpy, and a C++ compiler. Then you should be able to use:

pip install mahotas

You can test your installation by running:

python -c "import mahotas as mh; mh.test()"

If you run into issues, the manual has more extensive documentation on mahotas installation, including how to find pre-built for several platforms.

Citation

If you use mahotas on a published publication, please cite:

Luis Pedro Coelho Mahotas: Open source software for scriptable computer vision in Journal of Open Research Software, vol 1, 2013. [DOI]

In Bibtex format:

@article{mahotas, author = {Luis Pedro Coelho}, title = {Mahotas: Open source software for scriptable computer vision}, journal = {Journal of Open Research Software}, year = {2013}, doi = {https://dx.doi.org/10.5334/jors.ac}, month = {July}, volume = {1} }

You can access this information using the mahotas.citation() function.

Development

Development happens on github (https://github.com/luispedro/mahotas).

You can set the DEBUG environment variable before compilation to get a debug version:

export DEBUG=1
python setup.py test

You can set it to the value 2 to get extra checks:

export DEBUG=2
python setup.py test

Be careful not to use this in production unless you are chasing a bug. Debug level 2 is very slow as it adds many runtime checks.

The Makefile that is shipped with the source of mahotas can be useful too. make debug will create a debug build. make fast will create a non-debug build (you need to make clean in between). make test will run the test suite.

Links & Contacts

Documentation: https://mahotas.readthedocs.io/

Issue Tracker: github mahotas issues

Mailing List: Use the pythonvision mailing list for questions, bug submissions, etc. Or ask on stackoverflow (tag mahotas)

Main Author & Maintainer: Luis Pedro Coelho (follow on twitter or github).

Mahotas also includes code by Zachary Pincus [from scikits.image], Peter J. Verveer [from scipy.ndimage], and Davis King [from dlib], Christoph Gohlke, as well as others.

Presentation about mahotas for bioimage informatics

For more general discussion of computer vision in Python, the pythonvision mailing list is a much better venue and generates a public discussion log for others in the future. You can use it for mahotas or general computer vision in Python questions.

Recent Changes

Version 1.4.14 (Mar 24 2024)

  • Fix code for C++17 (issue #146)

Version 1.4.13 (Jun 28 2022)

  • Fix freeimage testing (and make freeimage loading more robust, see #129)
  • Add GIL fixed (which triggered crashes in newer NumPy versions)

Version 1.4.12 (Oct 14 2021)

  • Update to newer NumPy
  • Build wheels for Python 3.9 & 3.10

Version 1.4.11 (Aug 16 2020)

  • Convert tests to pytest
  • Fix testing for PyPy

Version 1.4.10 (Jun 11 2020)

Version 1.4.9 (Nov 12 2019)

  • Fix FreeImage detection (issue #108)

Version 1.4.8 (Oct 11 2019)

  • Fix co-occurrence matrix computation (patch by @databaaz)

Version 1.4.7 (Jul 10 2019)

  • Fix compilation on Windows

Version 1.4.6 (Jul 10 2019)

  • Make watershed work for >2³¹ voxels (issue #102)
  • Remove milk from demos
  • Improve performance by avoid unnecessary array copies in cwatershed(), majority_filter(), and color conversions
  • Fix bug in interpolation

Version 1.4.5 (Oct 20 2018)

  • Upgrade code to newer NumPy API (issue #95)

Version 1.4.4 (Nov 5 2017)

  • Fix bug in Bernsen thresholding (issue #84)

Version 1.4.3 (Oct 3 2016)

  • Fix distribution (add missing README.md file)

Version 1.4.2 (Oct 2 2016)

  • Fix resize\_to return exactly the requested size
  • Fix hard crash when computing texture on arrays with negative values (issue #72)
  • Added distance argument to haralick features (pull request #76, by Guillaume Lemaitre)

Version 1.4.1 (Dec 20 2015)

  • Add filter\_labeled function
  • Fix tests on 32 bit platforms and older versions of numpy

Version 1.4.0 (July 8 2015)

  • Added mahotas-features.py script
  • Add short argument to citation() function
  • Add max_iter argument to thin() function
  • Fixed labeled.bbox when there is no background (issue #61, reported by Daniel Haehn)
  • bbox now allows dimensions greater than 2 (including when using the as_slice and border arguments)
  • Extended croptobbox for dimensions greater than 2
  • Added use_x_minus_y_variance option to haralick features
  • Add function lbp_names

Version 1.3.0 (April 28 2015)

  • Improve memory handling in freeimage.write_multipage
  • Fix moments parameter swap
  • Add labeled.bbox function
  • Add return_mean and return_mean_ptp arguments to haralick function
  • Add difference of Gaussians filter (by Jianyu Wang)
  • Add Laplacian filter (by Jianyu Wang)
  • Fix crash in median_filter when mismatched arguments are passed
  • Fix gaussian_filter1d for ndim > 2

Version 1.2.4 (December 23 2014)

  • Add PIL based IO

Version 1.2.3 (November 8 2014)

  • Export mean_filter at top level
  • Fix to Zernike moments computation (reported by Sergey Demurin)
  • Fix compilation in platforms without npy_float128 (patch by Gabi Davar)

Version 1.2.2 (October 19 2014)

  • Add minlength argument to labeled_sum
  • Generalize regmax/regmin to work with floating point images
  • Allow floating point inputs to cwatershed()
  • Correctly check for float16 & float128 inputs
  • Make sobel into a pure function (i.e., do not normalize its input)
  • Fix sobel filtering

Version 1.2.1 (July 21 2014)

  • Explicitly set numpy.include_dirs() in setup.py [patch by Andrew Stromnov]

Version 1.2 (July 17 2014)

  • Export locmax|locmin at the mahotas namespace level
  • Break away ellipse_axes from eccentricity code as it can be useful on its own
  • Add find() function
  • Add mean_filter() function
  • Fix cwatershed() overflow possibility
  • Make labeled functions more flexible in accepting more types
  • Fix crash in close_holes() with nD images (for n > 2)
  • Remove matplotlibwrap
  • Use standard setuptools for building (instead of numpy.distutils)
  • Add overlay() function

Version 1.1.1 (July 4 2014)

  • Fix crash in close_holes() with nD images (for n > 2)

1.1.0 (February 12 2014)

  • Better error checking
  • Fix interpolation of integer images using order 1
  • Add resize_to & resize_rgb_to
  • Add coveralls coverage
  • Fix SLIC superpixels connectivity
  • Add remove_regions_where function
  • Fix hard crash in convolution
  • Fix axis handling in convolve1d
  • Add normalization to moments calculation

See the ChangeLog for older version.

License

FOSSA Status

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mahotas-1.4.14.tar.gz (1.5 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

mahotas-1.4.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

mahotas-1.4.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

mahotas-1.4.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

mahotas-1.4.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

mahotas-1.4.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.4 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

mahotas-1.4.14-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.5 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

mahotas-1.4.14-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.5 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ x86-64

File details

Details for the file mahotas-1.4.14.tar.gz.

File metadata

  • Download URL: mahotas-1.4.14.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for mahotas-1.4.14.tar.gz
Algorithm Hash digest
SHA256 2b9ae67b0080e4a2dba523a5da573aa0705b7791e8ddba3993111452f95c61b9
MD5 980398657ec19b24b709ddeb8cd04952
BLAKE2b-256 15d2bca9fb6fa6a42bb72f3b05aa38bd7bbd423e023ee68f7786ec66788662ea

See more details on using hashes here.

File details

Details for the file mahotas-1.4.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mahotas-1.4.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 df6ed4d503008aa5acf8583b5ac4fd4a21bb9d1e9c7ef2f5aec8fd5b26fe12ca
MD5 83c2afac1a87a07cbd046b24dd8b611d
BLAKE2b-256 4ce9d429fbd465869fd0ed8f17e69d3650786670381c3ee87acc01c1584ec5c1

See more details on using hashes here.

File details

Details for the file mahotas-1.4.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mahotas-1.4.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a017a2ea725905cf4c36bb36190262db17c9fb6ffb0746fd8b4e4ab1f1878c90
MD5 0b4d235fe7db271a8785734ae3bf1ac8
BLAKE2b-256 52b5303b2ffc65afecc01353cfa23e8d21412f9f44b82158109cb93089f4e962

See more details on using hashes here.

File details

Details for the file mahotas-1.4.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mahotas-1.4.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 52bb6f2168286ed68d7ea76c9116a944e52d61a18825da16a5b6419be1c938d9
MD5 e8f583dad032e4d1a5d38e2d1f857f32
BLAKE2b-256 403f337aeec4aa1bb643600a989a673e68f1e2feaa5e2c737dcea603747e8804

See more details on using hashes here.

File details

Details for the file mahotas-1.4.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mahotas-1.4.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eea63d8d60c75d49afdff19cc8244d7bc5d54ccd93a74af3f557a7d36a6ab995
MD5 808e44410e63e7820717cf70001ee0b8
BLAKE2b-256 2803e0e5eb3b892625d8f3eff7da46621d18e6995b1b2e04ecca460a084050ba

See more details on using hashes here.

File details

Details for the file mahotas-1.4.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mahotas-1.4.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6f002d2be301164225f46d8b6e0b7d59f261edae049025490799f277b052a9bb
MD5 4b1ee8791cd990e416e693edf21e60a4
BLAKE2b-256 02cfc3a5d43413c01a4c109ed024bf32157af5c6fb67a76274752e07a92664f0

See more details on using hashes here.

File details

Details for the file mahotas-1.4.14-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mahotas-1.4.14-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ab414e8b1a2078fbdb9d4643f6e8b67de9ba1e6c20137fa5089e2cec9014e521
MD5 b58987369fe26237ab8b85337432edfd
BLAKE2b-256 639a12acaa3fb9cb1c2b7144155a44b51fb0f954da9d3a08a334489ec18d4e43

See more details on using hashes here.

File details

Details for the file mahotas-1.4.14-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mahotas-1.4.14-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 184ea99d4c16a9970b063fb18725c7a4f6aabae1ef2171970b00ea12aaa590b3
MD5 2c5ab6c58fd4f3d145b8a3d5626b8922
BLAKE2b-256 66193d5e124427cf9ee1958e2e89e490cb679427b9623dea1f01c7d4b901170e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page