- Notifications
You must be signed in to change notification settings - Fork149
luispedro/mahotas
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Mahotas is a library of fast computer vision algorithms (all implementedin C++ for speed) operating over numpy arrays.
Python versions 3.7+, 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 localfeatures.
- thresholding.
- convolution.
- Sobel edge detection.
- spline interpolation
- SLIC super pixels.
Mahotas currently has over 100 functions for image processing andcomputer vision and it keeps growing.
The release schedule is roughly one release a month and each releasebrings new functionality and improved performance. The interface is verystable, though, and code written using a version of mahotas from yearsback will work just fine in the current version, except it will befaster (some interfaces are deprecated and will be removed after a fewyears, but in the meanwhile, you only get a warning). In a fewunfortunate cases, there was a bug in the old code and your results willchange for the better.
Please citethe mahotas paper (seedetails below underCitation) if you use it in a publication.
This is a simple example (using an example file that is shipped withmahotas) of calling watershed using above threshold regions as a seed(we use Otsu to define threshold).
# import using ``mh`` abbreviation which is common:importmahotasasmh# Load one of the demo imagesim=mh.demos.load('nuclear')# Automatically compute a thresholdT_otsu=mh.thresholding.otsu(im)# Label the thresholded image (thresholding is done with numpy operationsseeds,nr_regions=mh.label(im>T_otsu)# Call seeded watershed to expand the thresholdlabeled=mh.cwatershed(im.max()-im,seeds)
Here is a very simple example of usingmahotas.distance
(whichcomputes a distance map):
importpylabaspimportnumpyasnpimportmahotasasmhf=np.ones((256,256),bool)f[200:,240:]=Falsef[128:144,32:48]=False# f is basically True with the exception of two islands: one in the lower-right# corner, another, middle-leftdmap=mh.distance(f)p.imshow(dmap)p.show()
(This is undermahotas/demos/distance.py.)
How to invoke thresholding functions:
importmahotasasmhimportnumpyasnpfrompylabimportimshow,gray,show,subplotfromosimportpath# Load photo of mahotas' author in greyscalephoto=mh.demos.load('luispedro',as_grey=True)# Convert to integer values (using numpy operations)photo=photo.astype(np.uint8)# Compute Otsu thresholdT_otsu=mh.otsu(photo)thresholded_otsu= (photo>T_otsu)# Compute Riddler-Calvard thresholdT_rc=mh.rc(photo)thresholded_rc= (photo>T_rc)# Now call pylab functions to display the imagegray()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.
If you are usingconda, you can install mahotas fromconda-forge using the following commands:
conda config --add channels conda-forgeconda install mahotas
You will need python (naturally), numpy, and a C++ compiler. Then youshould 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 moreextensive documentation onmahotasinstallation,including how to find pre-built for several platforms.
If you use mahotas on a published publication, please cite:
Luis Pedro Coelho Mahotas: Open source software for scriptablecomputer 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 themahotas.citation()
function.
Development happens on github(https://github.com/luispedro/mahotas).
You can set theDEBUG
environment variable before compilation to get adebug version:
export DEBUG=1python setup.pytest
You can set it to the value2
to get extra checks:
export DEBUG=2python setup.pytest
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.
TheMakefile
that is shipped with the source of mahotas can be usefultoo.make debug
will create a debug build.make fast
will create anon-debug build (you need tomake clean
in between).make test
willrun the test suite.
Documentation:https://mahotas.readthedocs.io/
Issue Tracker:github mahotasissues
Mailing List: Use thepythonvision mailinglist for questions,bug submissions, etc. Or ask onstackoverflow (tagmahotas)
Main Author & Maintainer:Luis Pedro Coelho(follow ontwitter orgithub).
Mahotas also includes code by Zachary Pincus [from scikits.image], PeterJ. Verveer [from scipy.ndimage], and Davis King [from dlib], ChristophGohlke, as well asothers.
Presentation about mahotas for bioimageinformatics
For more general discussion of computer vision in Python, thepythonvision mailinglist is a muchbetter venue and generates a public discussion log for others in thefuture. You can use it for mahotas or general computer vision in Pythonquestions.
- Fix bug in Haralick features and NumPy 2 (thanks to @Czaki, see#150)
- Fix bug that stopped mahotas from working on Windows
- update for NumPy 2
- Add deprecated warning for freeimage
- Update build system (thanks to @Czaki, see #147)
- Fix code for C++17 (issue #146)
- Fix freeimage testing (and make freeimage loading more robust, see #129)
- Add GIL fixed (which triggered crashes in newer NumPy versions)
- Update to newer NumPy
- Build wheels for Python 3.9 & 3.10
- Convert tests to pytest
- Fix testing for PyPy
- Build wheels automatically (PR #114 bynathanhillyer)
- Fix FreeImage detection (issue #108)
- Fix co-occurrence matrix computation (patch by @databaaz)
- Fix compilation on Windows
- 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
- Upgrade code to newer NumPy API (issue #95)
- Fix bug in Bernsen thresholding (issue #84)
- Fix distribution (add missing
README.md
file)
- 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, byGuillaume Lemaitre)
- Add
filter\_labeled
function - Fix tests on 32 bit platforms and older versions of numpy
- 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, reportedby 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
- Improve memory handling in freeimage.write_multipage
- Fix moments parameter swap
- Add labeled.bbox function
- Add return_mean and return_mean_ptp arguments to haralickfunction
- 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
- Add PIL based IO
- Export mean_filter at top level
- Fix to Zernike moments computation (reported by Sergey Demurin)
- Fix compilation in platforms without npy_float128 (patch by GabiDavar)
- 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
- Explicitly set numpy.include_dirs() in setup.py [patch by AndrewStromnov]
- Export locmax|locmin at the mahotas namespace level
- Break away ellipse_axes from eccentricity code as it can be usefulon 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
- Fix crash in close_holes() with nD images (for n > 2)
- 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 theChangeLogfor older version.
About
Computer Vision in Python
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.