[![PyPI version](https://badge.fury.io/py/ncolor.svg)](https://badge.fury.io/py/ncolor)
[![Downloads](https://static.pepy.tech/personalized-badge/ncolor?period=total&units=international_system&left_color=grey&right_color=green&left_text=Downloads)](https://pepy.tech/project/ncolor)
# ncolor <img src="https://github.com/kevinjohncutler/ncolor/blob/main/logo.png?raw=true" width="400" title="bacteria" alt="bacteria" align="right" vspace = "0">
Fast remapping of instance labels 1,2,3,...,M to a smaller set of repeating, disjoint labels, 1,2,...,N. The four-color-theorem guarantees that at most four colors are required for any 2D segmentation/map, but this algorithm will opt for 5 or 6 to give an acceptable result if it fails to find a 4-color mapping quickly. Also works for 3D labels (<8 colors typically required) and perhaps higher dimensions as well.
### Usage
If you have an integer array called `masks`, you may transform it into an N-color representation as follows:
```python
import ncolor
ncolor_masks = ncolor.label(masks)
```
If you need the number of unique labels returned:
```python
ncolor_masks, num_labels = ncolor.label(masks,return_n=True)
```
If you need to convert back to `0,...,N` object labels:
```python
labels = ncolor.format_labels(ncolor_masks,clean=True)
```
Note that `format_labels` with ```clean=True``` will also remove small labels (<9px) by default. This behavior can be changed with the `min_area` parameter.
The integer array `ncolor_masks` can be visualized using any color map you prefer. The example in this README uses the viridis colormap. See `example.ipynb` for more details.
Thanks to Ryan Peters ([@ryanirl](https://github.com/ryanirl)) for suggesting the `expand_labels` function. This is applied by default to 2D images (optionally for 3D images with `expand=True`, but this can give bad results since objects in 3D have a lot more wiggle room to make contact when expanded). This preprocessing step eliminates cases where close (but not touching) or dispersed objects previously received the same label. I dug a layer back to use `ndimage.distance_transform_edt` for a speed boost. If undesired for 2D images, use `expand=False`.
Raw data
{
"_id": null,
"home_page": "https://github.com/kevinjohncutler/ncolor",
"name": "ncolor",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": null,
"author": "Kevin Cutler",
"author_email": "kevinjohncutler@outlook.com",
"download_url": "https://files.pythonhosted.org/packages/58/71/2008ba6f792fe6c8ad5690846b602a8ee65a8068bc35931515265da7b587/ncolor-1.3.0.tar.gz",
"platform": null,
"description": "[![PyPI version](https://badge.fury.io/py/ncolor.svg)](https://badge.fury.io/py/ncolor)\n[![Downloads](https://static.pepy.tech/personalized-badge/ncolor?period=total&units=international_system&left_color=grey&right_color=green&left_text=Downloads)](https://pepy.tech/project/ncolor)\n\n# ncolor <img src=\"https://github.com/kevinjohncutler/ncolor/blob/main/logo.png?raw=true\" width=\"400\" title=\"bacteria\" alt=\"bacteria\" align=\"right\" vspace = \"0\">\n\nFast remapping of instance labels 1,2,3,...,M to a smaller set of repeating, disjoint labels, 1,2,...,N. The four-color-theorem guarantees that at most four colors are required for any 2D segmentation/map, but this algorithm will opt for 5 or 6 to give an acceptable result if it fails to find a 4-color mapping quickly. Also works for 3D labels (<8 colors typically required) and perhaps higher dimensions as well.\n\n### Usage\nIf you have an integer array called `masks`, you may transform it into an N-color representation as follows:\n\n```python\nimport ncolor \nncolor_masks = ncolor.label(masks)\n```\n\nIf you need the number of unique labels returned:\n```python\nncolor_masks, num_labels = ncolor.label(masks,return_n=True)\n\n```\nIf you need to convert back to `0,...,N` object labels:\n```python\nlabels = ncolor.format_labels(ncolor_masks,clean=True)\n\n```\n\nNote that `format_labels` with ```clean=True``` will also remove small labels (<9px) by default. This behavior can be changed with the `min_area` parameter. \n\n \nThe integer array `ncolor_masks` can be visualized using any color map you prefer. The example in this README uses the viridis colormap. See `example.ipynb` for more details.\n\nThanks to Ryan Peters ([@ryanirl](https://github.com/ryanirl)) for suggesting the `expand_labels` function. This is applied by default to 2D images (optionally for 3D images with `expand=True`, but this can give bad results since objects in 3D have a lot more wiggle room to make contact when expanded). This preprocessing step eliminates cases where close (but not touching) or dispersed objects previously received the same label. I dug a layer back to use `ndimage.distance_transform_edt` for a speed boost. If undesired for 2D images, use `expand=False`. \n",
"bugtrack_url": null,
"license": "BSD",
"summary": "label matrix coloring algorithm",
"version": "1.3.0",
"project_urls": {
"Homepage": "https://github.com/kevinjohncutler/ncolor"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "9a2f7da00b3399845769a66941ec61e5a6d9101ff06e098ec1ccdfa6034a8a8e",
"md5": "ff371a75639cd42395fd43b49043966e",
"sha256": "9f19dfe7edb2957a87481c51b8423d8984cf7fe8541330bed30aeff99db51fcf"
},
"downloads": -1,
"filename": "ncolor-1.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "ff371a75639cd42395fd43b49043966e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 9796,
"upload_time": "2024-11-07T09:23:39",
"upload_time_iso_8601": "2024-11-07T09:23:39.770733Z",
"url": "https://files.pythonhosted.org/packages/9a/2f/7da00b3399845769a66941ec61e5a6d9101ff06e098ec1ccdfa6034a8a8e/ncolor-1.3.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "58712008ba6f792fe6c8ad5690846b602a8ee65a8068bc35931515265da7b587",
"md5": "cae07d1ee877c07cabb81ac75b650090",
"sha256": "d60be3da1172a040db9e9a7c7fc22d0088acd88ceebb5f46806aa57e51bd2c62"
},
"downloads": -1,
"filename": "ncolor-1.3.0.tar.gz",
"has_sig": false,
"md5_digest": "cae07d1ee877c07cabb81ac75b650090",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 46019,
"upload_time": "2024-11-07T09:23:41",
"upload_time_iso_8601": "2024-11-07T09:23:41.199398Z",
"url": "https://files.pythonhosted.org/packages/58/71/2008ba6f792fe6c8ad5690846b602a8ee65a8068bc35931515265da7b587/ncolor-1.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-07 09:23:41",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "kevinjohncutler",
"github_project": "ncolor",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "ncolor"
}