Morphocore
Morph### Installation from Source
git clone git@gitlab.lre.epita.fr:aurelien.hurand/morphocore.git
cd morphocore
pip install . --no-build-isolation
CPU-Only Installation (without CUDA):
MORPHO_WITH_CUDA=0 pip install . --no-build-isolation
This is useful when:
- You don't have an NVIDIA GPU
- CUDA Toolkit is not installed
- You want faster compilation times
- You're deploying on CPU-only serverss a Python library designed to integrate mathematical morphology into neural networks. It provides differentiable (float and double) and optimized morphological operations, enabling deep learning architectures to leverage powerful image processing tools from mathematical morphology.
Main Features
- Primary morphological operations (dilation, erosion)
- Smorph (An alpha softmax based approximation of dilation or erosion : https://www.lre.epita.fr/dload/papers/hermary.22.jmiv.pdf)
- CPU and CUDA implementations (Related work: https://github.com/Manza12/nnMorpho)
Installation
Installation from PyPi:
pip install morphocore
❗If you have compatibility issue with the version compile on Pypi please compile the library from source like below !
Installation from source:
git clone git@gitlab.lre.epita.fr:aurelien.hurand/morphocore.git
cd morphocore
pip install . --no-build-isolation
Requirements for Pre-compiled Package (PyPI)
If you install from PyPI using pip install morphocore, you'll need:
- Python >= 3.11
- PyTorch >= 2.6
- CUDA >= 12.3
If your environment doesn't meet these requirements, please compile from source instead.
API Reference
Functional Interface
dilation(input, weight, channel_merge_mode="max")
Performs morphological dilation on the input tensor.
Parameters:
input(Tensor): Input tensor of shape (B, C, H, W)weight(Tensor): Structuring element of shape (out_channels, in_channels, kH, kW)channel_merge_mode(str): Channel combination method - "max", "min", "sum", "mean", or "identity"
Returns:
output(Tensor): Dilated tensor of shape (B, out_channels, H, W)
from morphocore.functional import dilation
# Basic usage
result = dilation(image, structuring_element, "sum")
# With different merge modes
max_result = dilation(image, kernel, "max") # Maximum across channels
sum_result = dilation(image, kernel, "sum") # Sum across channels
mean_result = dilation(image, kernel, "mean") # Average across channels
identity_result = dilation(image, kernel, "identity") # No channel merging, keeping all channels linear in_channels = out_channels
erosion(input, weight, channel_merge_mode="max")
Performs morphological erosion on the input tensor.
Parameters: Same as dilation()
Returns: Same as dilation()
from morphocore.functional import erosion
result = erosion(image, structuring_element, "sum")
smorph(input, weight, channel_merge_mode="max", alpha=0.0)
Smooth approximation of morphological operations using softmax.
Parameters:
- Same as
dilation()plus: alpha(float): Control parameter for either dilation or erosion behaviour- When alpha is large -> smorph behaves like dilation
- When alpha is very negative -> smorph behaves like erosion
- When alpha is close to 0 -> then smorph is something between an erosion and a dilation.
from morphocore.functional import smorph
# Soft approximation of morphological operations
result = smorph(image, kernel, "sum", alpha=0.0)
Neural Network Modules
Mnn.Dilation(in_channels, out_channels, kernel_size, channel_merge_mode="max")
Learnable dilation layer for neural networks.
Parameters:
in_channels(int): Number of input channelsout_channels(int): Number of output channelskernel_size(int or tuple): Size of the morphological kernelchannel_merge_mode(str): Channel merge strategy
import morphocore.nn as Mnn
# Create a learnable dilation layer
dilation_layer = Mnn.Dilation(
in_channels=3,
out_channels=16,
kernel_size=(3, 3),
channel_merge_mode="sum"
)
output = dilation_layer(input_tensor)
Mnn.Erosion(in_channels, out_channels, kernel_size, channel_merge_mode="max")
Learnable erosion layer for neural networks.
erosion_layer = Mnn.Erosion(
in_channels=3,
out_channels=16,
kernel_size=(5, 5),
channel_merge_mode="mean"
)
output = erosion_layer(input_tensor)
Mnn.SMorph(in_channels, out_channels, kernel_size, channel_merge_mode="max", alpha=1.0)
Smooth morphological layer using softmax approximation.
smorph_layer = Mnn.SMorph(
in_channels=3,
out_channels=8,
kernel_size=(3, 3),
channel_merge_mode="sum",
alpha=2.0
)
output = smorph_layer(input_tensor)
Channel Merge Modes Explained
- "sum": Sums values across input channels
- "mean": Averages values across input channels
Project Structure
morphocore/functional/: Basic morphological functionsmorphocore/nn/: PyTorch modules for neural networksmorphocore/functional/csrc/: C++/CUDA source code for accelerationtests/: Unit, functional and benchmark tests
Dependencies
- Python >= 3.8
- PyTorch
- NumPy
Contributing
Contributions are welcome! Please submit issues and pull requests.
License
This project is licensed under the MIT License.
Metadata
Release files for morphocore 0.12.1.211
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| morphocore-0.12.1.211-cp311-abi3-win_amd64.whl | CPython 3.11 | abi3 | Windows x86-64 | Details for morphocore-0.12.1.211-cp311-abi3-win_amd64.whl |
| morphocore-0.12.1.211-cp311-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl | CPython 3.11 | abi3 | Linux glibc 2.24+ x86-64, Linux glibc 2.28+ x86-64 | Details for morphocore-0.12.1.211-cp311-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
Total release size: 5.5 MB
Release files / morphocore-0.12.1.211-cp311-abi3-win_amd64.whl
| Download URL | morphocore-0.12.1.211-cp311-abi3-win_amd64.whl |
|---|---|
| Size | 904.8 kB |
| Tags | CPython 3.11 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
2fe4e736a63ed3c89628d793d5ed11d02386df111b37823da94d60b6a216fd52
|
|
BLAKE2b-256 checksum How to use checksums |
3fdc05d0ad07590f8996c1851c04ccf9126a83b3df09fdedadd82dbc50e843d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.17
|
Release files / morphocore-0.12.1.211-cp311-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | morphocore-0.12.1.211-cp311-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.6 MB |
| Tags | CPython 3.11 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
b1248f134dfa1222c86bb612a28925689ca31c9fa81a3c4ad7777d3b75173cbb
|
|
BLAKE2b-256 checksum How to use checksums |
6cb87b65b7bcc3ed1615f4f419bf95e4825a6e4db528accdfd2fc4e8207d1219
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.17
|
Security for morphocore 0.12.1.211
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.