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.
Python versions 2.7, 3.4+, are supported.
Notable algorithms:
- watershed
- convex 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 interpolation
- SLIC 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 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 = {http://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 (http://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.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
andborder
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Hashes for mahotas_nh-1.4.10-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dd9fbf4f09487a98a7766bdee2e40399d664f3c6ca0441e346469df33a2f22e6 |
|
MD5 | a084d8e2a37c111aefc2c43a98455bf8 |
|
BLAKE2b-256 | b5a24a9429ca34ecfb83cb09e9dfa53327f75c840d8ef852c778e7bc4d5d0326 |
Hashes for mahotas_nh-1.4.10-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9e0877c1a41319ff21fb97ba700d279b9b0692a179914fc41e8a75a7d0158f5d |
|
MD5 | 597b053ce60f0b916507369acccdf9d3 |
|
BLAKE2b-256 | 3999c8ae3238545d9af53ade10fe76b4b42763a07c201a4bc76f3268fc88668c |
Hashes for mahotas_nh-1.4.10-cp38-cp38-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f1d718c9ba6603b4d0bf5f97f4793d950225cf09416157346c4496179e578fc6 |
|
MD5 | a8ddc61cd43843fe07d02648c9b13dd9 |
|
BLAKE2b-256 | 3716e179f9ea62b19d40bad8d14420b7439d70a799d8bb7b6d356d31e0b65379 |
Hashes for mahotas_nh-1.4.10-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c5cbd49d7130779d52bcf994bf443c5a6cbac3a822079f782a682451f4236c01 |
|
MD5 | 3e75a69cd6d231a2bc5d13dc78d54153 |
|
BLAKE2b-256 | f787861c8d17e57c2d50eb389cc556ce75ccd2273b15dfc24865571e8da86d4c |
Hashes for mahotas_nh-1.4.10-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e890ff0bf0ed8c78bcc9c70938a71fae2a539969c682675042f2cb23888c791f |
|
MD5 | f751cb7b5c3f3d84c63f88eefa69df9d |
|
BLAKE2b-256 | c8f76c629a03aee7bab2b8dfc145351191ce9e81eeaab526c012c03c964a66f7 |
Hashes for mahotas_nh-1.4.10-cp37-cp37m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7001d9639c4210d7be962a521460775d491c222d806b825762dbef3be56afc41 |
|
MD5 | 6ac931ab02b461a00b6efaf37d169f78 |
|
BLAKE2b-256 | 15fbb2850b0994d8b1a8a1488b0f5ac8b7880ca1e03abd7054af1710b3fed7c9 |
Hashes for mahotas_nh-1.4.10-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b3029eda1aaf24576061e3bbce2dee65cb396e38b54336690493e570234e3a8 |
|
MD5 | fd9eaf564d08f96640b0e76a8661a3c8 |
|
BLAKE2b-256 | e11ab07c2a82a31e7342440632c28c620263a0920bcac7815707012c706fb7ee |
Hashes for mahotas_nh-1.4.10-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e6128790b8d325660946674f50df3e785ef262d3865eef869d2e882a279b6c9e |
|
MD5 | 3810bf57b10e5941592e7de54d8e1dfd |
|
BLAKE2b-256 | a5dc47b78ad8641c5c83b46456b17f8c82d837ebda9f829428bf123701f3fd25 |
Hashes for mahotas_nh-1.4.10-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 00c990f2aea36a7eaf3bf61ee3f6fb2076b912998c82792261e3c27296170fa9 |
|
MD5 | f213a84e833e3006e047d734cf6a75ba |
|
BLAKE2b-256 | 3a2aba30342ec53b973170ad5bc4b8c385c01b04192878c9e82f0e697d53f4a3 |
Hashes for mahotas_nh-1.4.10-cp36-cp36m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c19c7b2fc05e170aaab449475099c976da572a1e20dae327dd857171800aec04 |
|
MD5 | dbe49c8ab23a4cec02113799a1fc92c1 |
|
BLAKE2b-256 | bc507c4d0733252534d99d0e65fd00c138ecf7bf752492cefe6da9bfeaefcd21 |
Hashes for mahotas_nh-1.4.10-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27523cd5901610f41f2756f3f73ece7e37e706fb330cae5e9bf88dda5b42825c |
|
MD5 | 026ed9792dbf4d5790c61a356bcd8ae0 |
|
BLAKE2b-256 | 4ebe9f8d36a1681b1a06e0fb0d8ebed26eba873352a17b1db27786cc571b0160 |
Hashes for mahotas_nh-1.4.10-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 08dd39f206f3f0ad9dab3e0fcef50641be3bec84d63fe16e6436c8b731dc5b28 |
|
MD5 | 036d26f155d5dcbe2e1d76178a3d095a |
|
BLAKE2b-256 | a44023100ee0114add362dba65f8fe254b59334301d2648447350c1c4f4fd297 |