Python Morphology Toolbox
Pymorph is a collection of pure python implementations of many image morphology functions.
- Includes basic operations such as
- tophat opening
Pymorph is still available and bug-free, but I am not adding any new features. My other computer vision package, mahotas, is a C++ implementation and is much faster. It started small, but now has almost all of the functionality of pymorph and a lot of functionality that pymorph did not have.
Download & Install
You can use easy_install or pip::
easy_install pymorph pip install pymorph
If you want the code, it can be downloaded as a source tar.gz file from pypi. Installation follows the typical
python setup.py install
mahotas is another Python image processing package, but most of its functions are in C++. It is, therefore, much faster for the operations it supports. Mahotas started with a much smaller set of features than pymorph, but has grown and has many (but not yet all) morphological operators that pymorph has. Additionally, mahotas has functionality that pymorph never has (or will have).
Autogenerated API Docs are very complete.
The book Hands-On Morphological Image Processing provides some of the background, but is based on the older release.
Since there is feature stability, I release on PyPI whenever I have fixed a new bug (to make it easy for people who use easy_install or pip to keep up).
For more minor fixes (documentation reformatting), you can check the continuous release on github.
The package is very stable, so tracking the development release should not cause you any problem.
For bug reports, mail me. If you report a bug, I will try to fix it. If it has a unit test, I promise to fix it.
Currently, there are no known bugs, but, because the package does not have automatic tests and there have been interface changes in numpy (when compared to Numeric), there are certainly unknown bugs, which is why I need people to report them.
New contributions are welcome. At best, start from the github version and either branch it or just email me a patch. Right now, good test bug reports are a needed contribution.
- Write more tests.
- Re-format the documentation. The previous documentation was a bit too verbose for my taste and not in any standard format. I am slowly re-writing some of it in restructured text.
- Do something about the demos. They don't work. I need to either fix them or delete them.
Once these are done, I will release this as 1.0
This started as the Python Morphology Toolbox. It was a very nice piece of software, written by Roberto A. Lutofu and Rubens C. Machado. Unfortunately, the code had been allowed to rot and did not work with the more recent numpy libraries.
Since discovering their code, I have been using it and making changes so that it runs with modern numpy. I have now adopted the package and am reworking it more deeply than just a fix here and there.
Changes from Original
The most important change has been the removal of superfluous functions. Functions that deal with image input/output or image display have been removed. The reason is that matplotlib is a much better implementation of this. I see no point in going through the effort of maintaining thin wrappers around its functionality. For plotting, use matplotlib (it also has a imread function based on PIL).
I removed the mm prefix from function names. Function name prefixes are needed in Matlab, which does not have namespaces, but they're un-Pythonic (given that Python has namespaces).
I also changed other small things, including removing some functions which were superfluous. See the CHANGES_SINCE_08 file in the distribution. A module called pymorph.compat contains old function names as well as all the functions that were removed. If you have code which depends on the old names, use this. Otherwise, I recommend you use the new names. I will remove compat for version 1.0 as I would like that version to be a clean one. Argument names have changed (and are becoming standartised across the package). These changes should only affect you if you call functions using argument name syntax (f(arg=2) instead of f(2)).
I have also implemented a couple of missing functions (like watershed).
There have been many bugfixes across the package too.