Package: mahotas
MahotasPython Computer Vision LibraryMahotas is a library of fast computer vision algorithms (all implemented
in C++ for speed) operating over numpy arrays.Python versions 2.7, 3.4+, are supported.Notable algorithms:watershedconvex points calculations.hit & miss, thinning.Zernike & Haralick, LBP, and TAS features.Speeded-Up Robust Features
(SURF), a form of local
features.thresholding.convolution.Sobel edge detection.spline interpolationSLIC super pixels.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 citethe mahotas paper(see
details below underCitation) if you use it in a publication.ExamplesThis 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 usingmahotas.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 undermahotas/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.InstallIf you are usingconda, you can install mahotas fromconda-forgeusing the following commands:conda config --add channels conda-forge
conda install mahotasCompilation from sourceYou will need python (naturally), numpy, and a C++ compiler. Then you
should be able to use:pip install mahotasYou can test your installation by running:python -c "import mahotas as mh; mh.test()"If you run into issues, the manual has moreextensive documentation on
mahotas
installation,
including how to find pre-built for several platforms.CitationIf you use mahotas on a published publication, please cite:Luis Pedro CoelhoMahotas: 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 = {http://dx.doi.org/10.5334/jors.ac},
month = {July},
volume = {1}
}You can access this information using themahotas.citation()function.DevelopmentDevelopment happens on github
(http://github.com/luispedro/mahotas).You can set theDEBUGenvironment variable before compilation to get a
debug version:export DEBUG=1
python setup.py testYou can set it to the value2to get extra checks:export DEBUG=2
python setup.py testBe 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.TheMakefilethat is shipped with the source of mahotas can be useful
too.make debugwill create a debug build.make fastwill create a
non-debug build (you need tomake cleanin between).make testwill
run the test suite.Links & ContactsDocumentation:https://mahotas.readthedocs.io/Issue Tracker:github mahotas
issuesMailing List: Use thepythonvision mailing
listfor questions,
bug submissions, etc. Or ask onstackoverflow (tag
mahotas)Main Author & Maintainer:Luis Pedro Coelho(follow ontwitterorgithub).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 asothers.Presentation about mahotas for bioimage
informaticsFor more general discussion of computer vision in Python, thepythonvision mailing
listis 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 ChangesVersion 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 NumPyBuild wheels for Python 3.9 & 3.10Version 1.4.11 (Aug 16 2020)Convert tests to pytestFix testing for PyPyVersion 1.4.10 (Jun 11 2020)Build wheels automatically (PR #114 bynathanhillyer)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 WindowsVersion 1.4.6 (Jul 10 2019)Make watershed work for >2³¹ voxels (issue #102)Remove milk from demosImprove performance by avoid unnecessary array copies incwatershed(),majority_filter(), and color conversionsFix bug in interpolationVersion 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 missingREADME.mdfile)Version 1.4.2 (Oct 2 2016)Fixresize\_toreturn exactly the requested sizeFix hard crash when computing texture on arrays with negative values (issue #72)Addeddistanceargument to haralick features (pull request #76, by
Guillaume Lemaitre)Version 1.4.1 (Dec 20 2015)Addfilter\_labeledfunctionFix tests on 32 bit platforms and older versions of numpyVersion 1.4.0 (July 8 2015)Addedmahotas-features.pyscriptAdd short argument to citation() functionAdd max_iter argument to thin() functionFixed labeled.bbox when there is no background (issue #61, reported
by Daniel Haehn)bbox now allows dimensions greater than 2 (including when using theas_sliceandborderarguments)Extended croptobbox for dimensions greater than 2Added use_x_minus_y_variance option to haralick featuresAdd functionlbp_namesVersion 1.3.0 (April 28 2015)Improve memory handling in freeimage.write_multipageFix moments parameter swapAdd labeled.bbox functionAdd return_mean and return_mean_ptp arguments to haralick
functionAdd difference of Gaussians filter (by Jianyu Wang)Add Laplacian filter (by Jianyu Wang)Fix crash in median_filter when mismatched arguments are passedFix gaussian_filter1d for ndim > 2Version 1.2.4 (December 23 2014)Add PIL based IOVersion 1.2.3 (November 8 2014)Export mean_filter at top levelFix 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_sumGeneralize regmax/regmin to work with floating point imagesAllow floating point inputs tocwatershed()Correctly check for float16 & float128 inputsMake sobel into a pure function (i.e., do not normalize its input)Fix sobel filteringVersion 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 levelBreak away ellipse_axes from eccentricity code as it can be useful
on its ownAddfind()functionAddmean_filter()functionFixcwatershed()overflow possibilityMake labeled functions more flexible in accepting more typesFix crash inclose_holes()with nD images (for n > 2)Remove matplotlibwrapUse standard setuptools for building (instead of numpy.distutils)Addoverlay()functionVersion 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 checkingFix interpolation of integer images using order 1Add resize_to & resize_rgb_toAdd coveralls coverageFix SLIC superpixels connectivityAdd remove_regions_where functionFix hard crash in convolutionFix axis handling in convolve1dAdd normalization to moments calculationSee theChangeLogfor older version.License