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.10 (Jun 11 2020)
- Build wheels automatically (PR #114 by nathanhillyer)
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 Distribution
Built Distributions
Hashes for mahotas-1.4.10-cp38-cp38-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7ff188daf10e57212dd3e20539bbef65aa304d8b820dcba49d0a98f44f2ed780 |
|
MD5 | 90c86fbf3c7db9a8a74ac0567eca9819 |
|
BLAKE2b-256 | 3bb847150a5e0032b414e860d7a66141608e608e6e55cd1c0e015db9b4e05b7e |
Hashes for mahotas-1.4.10-cp38-cp38-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7955dbaaa88a40bcfe2580c784121f2ae81af818fbf23036b9a84a653bb13fb8 |
|
MD5 | e873537a457050a19c7babc9ef7c1cb4 |
|
BLAKE2b-256 | c80ecc370e62a937730697e5df18b428f8b6e8c12a757d6518923d08ad18f13c |
Hashes for mahotas-1.4.10-cp38-cp38-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee5495363a4651afa11e98ac9039e9b6ddd2e7fcea6bc95092e708e0e51e68f0 |
|
MD5 | 37e2cca8650776bb73957e88bca1da84 |
|
BLAKE2b-256 | b921c2e225fc7a5052f74193a4d748e3647b0a69c7f8ee30715b1b234e6c8177 |
Hashes for mahotas-1.4.10-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d1e8a0129bb2184469efa50ed2e4bd912188763601b5b2370b38b0fca0c7083d |
|
MD5 | e16d5445e5ed7afe7b1c2c36f4f6c3c6 |
|
BLAKE2b-256 | ca726edba2b62cfc8294c9005832305d3521510f8f2ab6152b133087af7a49ab |
Hashes for mahotas-1.4.10-cp37-cp37m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f7bc5b1115c60797c6ab933d409ba38e2bab0e8fb5bcb7bebe827ec5d25ea22a |
|
MD5 | 549141a608b5d6f38f71530afab6e094 |
|
BLAKE2b-256 | fffbe6f1c7e1f05ec8afb21adb9142f9a34952c0f92fc272fa1ba952b3fee9e5 |
Hashes for mahotas-1.4.10-cp37-cp37m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4682238c2c09f7b0939edeb7a151908d652584dd720860a96c20d472265c5b6c |
|
MD5 | cfdf394c7fad75e6c857ab7ffa1e1991 |
|
BLAKE2b-256 | 4e32405fe0d22d155e3cf49ab0459f71d6c3029d526ba24cf7da8f3b21662fa9 |
Hashes for mahotas-1.4.10-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b941821be00194430704651a82b077d8981d5fe6f067a21ea54a5f8b43a50626 |
|
MD5 | 74a25c90bcf8dc5e9ce09d5758418b9a |
|
BLAKE2b-256 | cc7393b03cd2927db045e78a398cf5296a07c986ab693183b132a9cb5f469cdf |
Hashes for mahotas-1.4.10-cp37-cp37m-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c1497029c97f3a1c971f7a24247f3275051c496af7919df375b4bf06f9bc14fa |
|
MD5 | 0375bfb85a606721e401649563f7516c |
|
BLAKE2b-256 | ea4873fa6f472b9c4134b79c761b3492c87d3993c370940bb743aef1cbd9fea3 |
Hashes for mahotas-1.4.10-cp36-cp36m-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d692870072b080d8836f96f8070ba226e3c6e55a3ed437e13c756bb34c3e23a7 |
|
MD5 | c9f522f965aa9c21ea7f7733d5fa22fc |
|
BLAKE2b-256 | 37b714c80950d17a4899c315e9f79c2349a68abe3048846cfc280b9008cf8d30 |
Hashes for mahotas-1.4.10-cp36-cp36m-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 09ec0fc0429fa4767e3f201838da816bc876f999b8a554060e1742c87a08e6b6 |
|
MD5 | 7bfd1895c3525b6b17bdc688419ab05c |
|
BLAKE2b-256 | 7d578a269786928b8f4f8a69cdba34098073f96a7f82d7898f14db63c4b9ea58 |
Hashes for mahotas-1.4.10-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e074b918c27ab3cb7771b5d244d6347c5d48994819e54e0661ee0fe5ef842ac6 |
|
MD5 | 38e0454c25306e5ea306389e67031d73 |
|
BLAKE2b-256 | ed1f01d805bc3588da8343373c279702d0fca4dc55f631873d9f2e159f9287ac |
Hashes for mahotas-1.4.10-cp36-cp36m-macosx_10_14_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 84c04fb0dabc9a47913c119dbd09d7c2aed133433ab41f1daa04f588825d7727 |
|
MD5 | 9606390bc26975f57bcf58249fb93f9f |
|
BLAKE2b-256 | 9a58dd7211f56c7cd63ba9a4c9d5795bcd821accf96e11b078e1d32c1a78093d |