pyezzi


Namepyezzi JSON
Version 0.8.2.post2 PyPI version JSON
download
home_pageNone
SummaryNone
upload_time2025-08-06 14:48:57
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords medical image processing
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ======
pYezzi
======

Compute the thickness of a solid using Yezzi and Prince method described in
the article "An Eulerian PDE Approach for Computing Tissue Thickness", IEEE
TRANSACTIONS ON MEDICAL IMAGING, VOL. 22, NO. 10, OCTOBER 2003. [#]_

A C implementation by Rubén Cárdenes [#]_ helped me a lot writing this,
especially the anisotropic part.

.. [#] http://dx.doi.org/10.1109/tmi.2003.817775
.. [#] http://www.dtic.upf.edu/~rcardenes/Ruben_Cardenes/Software.html


Requirements
============

Runtime: numpy, OpenMP (e.g., the ``libgomp1`` package on debian).

Build time: a C compiler (e.g., ``gcc`` + ``libc6-dev`` packages on debian).
This is needed in case you are using a platform for which we do not provide binaries
("wheels") on PyPI.

Test time: ``scikit-image``, ``scipy``.


Installation instruction
========================

Available on pypi. [#]_
Use pip: ``pip install pyezzi``

Alternatively, clone the repository and build cython modules with
``pip install .``.

.. [#]  https://pypi.python.org/pypi/pyezzi

Usage
=====

Command line
------------

This package provides a basic CLI. Example usage:

.. code:: bash

    pyezzi /path/to/endo.mha /path/to/epi.mha /path/to/output.mha [--weights /path/to/thickness_weights.mha]

If can use the excellent `uvx <https://docs.astral.sh/uv/guides/tools/>`_, you can download and
launch it in a single command:

.. code:: bash

    uvx pyezzi[cli] --help


Python API
----------

Full API documentation is available on
`gitlabpages.inria.fr <https://ncedilni.gitlabpages.inria.fr/pyezzi>`_.

.. code:: python

    from pyezzi import compute_thickness_cardiac

    thickness = compute_thickness_cardiac(endo, epi)

``endo`` and ``epi`` are numpy binary masks.
``endo`` represents the "inside" boundary of the domain, e.g., the cardiac ventricular blood pool.
``epi`` represents the "outside" boundary of the domain, e.g., the cardiac ventricular epicardium.

A ``spacing`` parameter specifying the spacing between voxels along the axes
can optionnaly be specified.

A ``weights`` parameter can be added to account for "holes" in the wall, cf
"Cedilnik & Peyrat, Weighted tissue thickness, FIMH 2023". [#]_

Check out the included jupyter notebooks in the ``example`` folder for more
details.

.. [#] https://hal.science/hal-04111276/

Contributions
=============

We recommend using `uv <https://docs.astral.sh/uv/>`_ for project management
and `pre-commit <https://pre-commit.com/>`_ to ensure code quality.

After cloning, use ``uv sync --frozen --all-groups --all-extras`` to install dev dependencies.
This will set up a virtualenv in ``.venv`` that you can activate with
``source .venv/bin/activate``. Tests can then be run with ``pytest test``.

To build the cython extension modules in place, use ``python setup.py develop``.

License
=======

This work is licensed under the french CeCILL license. [#]_
You're free to use and modify the code, but please cite the original paper and
me.

.. [#] https://www.cecill.info/licences/Licence_CeCILL_V2.1-en.html

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pyezzi",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "medical image processing",
    "author": null,
    "author_email": "Nicolas Cedilnik <nicoco@nicoco.fr>",
    "download_url": "https://files.pythonhosted.org/packages/fa/f9/ce92148a44a26ba6ba1ef193631463eb776d9072d4a8f6f911becfabec36/pyezzi-0.8.2.post2.tar.gz",
    "platform": null,
    "description": "======\npYezzi\n======\n\nCompute the thickness of a solid using Yezzi and Prince method described in\nthe article \"An Eulerian PDE Approach for Computing Tissue Thickness\", IEEE\nTRANSACTIONS ON MEDICAL IMAGING, VOL. 22, NO. 10, OCTOBER 2003. [#]_\n\nA C implementation by Rub\u00e9n C\u00e1rdenes [#]_ helped me a lot writing this,\nespecially the anisotropic part.\n\n.. [#] http://dx.doi.org/10.1109/tmi.2003.817775\n.. [#] http://www.dtic.upf.edu/~rcardenes/Ruben_Cardenes/Software.html\n\n\nRequirements\n============\n\nRuntime: numpy, OpenMP (e.g., the ``libgomp1`` package on debian).\n\nBuild time: a C compiler (e.g., ``gcc`` + ``libc6-dev`` packages on debian).\nThis is needed in case you are using a platform for which we do not provide binaries\n(\"wheels\") on PyPI.\n\nTest time: ``scikit-image``, ``scipy``.\n\n\nInstallation instruction\n========================\n\nAvailable on pypi. [#]_\nUse pip: ``pip install pyezzi``\n\nAlternatively, clone the repository and build cython modules with\n``pip install .``.\n\n.. [#]  https://pypi.python.org/pypi/pyezzi\n\nUsage\n=====\n\nCommand line\n------------\n\nThis package provides a basic CLI. Example usage:\n\n.. code:: bash\n\n    pyezzi /path/to/endo.mha /path/to/epi.mha /path/to/output.mha [--weights /path/to/thickness_weights.mha]\n\nIf can use the excellent `uvx <https://docs.astral.sh/uv/guides/tools/>`_, you can download and\nlaunch it in a single command:\n\n.. code:: bash\n\n    uvx pyezzi[cli] --help\n\n\nPython API\n----------\n\nFull API documentation is available on\n`gitlabpages.inria.fr <https://ncedilni.gitlabpages.inria.fr/pyezzi>`_.\n\n.. code:: python\n\n    from pyezzi import compute_thickness_cardiac\n\n    thickness = compute_thickness_cardiac(endo, epi)\n\n``endo`` and ``epi`` are numpy binary masks.\n``endo`` represents the \"inside\" boundary of the domain, e.g., the cardiac ventricular blood pool.\n``epi`` represents the \"outside\" boundary of the domain, e.g., the cardiac ventricular epicardium.\n\nA ``spacing`` parameter specifying the spacing between voxels along the axes\ncan optionnaly be specified.\n\nA ``weights`` parameter can be added to account for \"holes\" in the wall, cf\n\"Cedilnik & Peyrat, Weighted tissue thickness, FIMH 2023\". [#]_\n\nCheck out the included jupyter notebooks in the ``example`` folder for more\ndetails.\n\n.. [#] https://hal.science/hal-04111276/\n\nContributions\n=============\n\nWe recommend using `uv <https://docs.astral.sh/uv/>`_ for project management\nand `pre-commit <https://pre-commit.com/>`_ to ensure code quality.\n\nAfter cloning, use ``uv sync --frozen --all-groups --all-extras`` to install dev dependencies.\nThis will set up a virtualenv in ``.venv`` that you can activate with\n``source .venv/bin/activate``. Tests can then be run with ``pytest test``.\n\nTo build the cython extension modules in place, use ``python setup.py develop``.\n\nLicense\n=======\n\nThis work is licensed under the french CeCILL license. [#]_\nYou're free to use and modify the code, but please cite the original paper and\nme.\n\n.. [#] https://www.cecill.info/licences/Licence_CeCILL_V2.1-en.html\n",
    "bugtrack_url": null,
    "license": null,
    "summary": null,
    "version": "0.8.2.post2",
    "project_urls": null,
    "split_keywords": [
        "medical",
        "image",
        "processing"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "777cf9bdb0122369e73fa842492b434a632d4008d850cf43c34e6dc147d6e76d",
                "md5": "36fbfa2c4ab24cd633505866b8a6b41f",
                "sha256": "9e597a9e7447b571c37a72093bccfa96d8f5e6d2795316c0a51ab73ed9729da5"
            },
            "downloads": -1,
            "filename": "pyezzi-0.8.2.post2-cp310-cp310-macosx_10_15_x86_64.whl",
            "has_sig": false,
            "md5_digest": "36fbfa2c4ab24cd633505866b8a6b41f",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 1182885,
            "upload_time": "2025-08-06T14:48:32",
            "upload_time_iso_8601": "2025-08-06T14:48:32.685361Z",
            "url": "https://files.pythonhosted.org/packages/77/7c/f9bdb0122369e73fa842492b434a632d4008d850cf43c34e6dc147d6e76d/pyezzi-0.8.2.post2-cp310-cp310-macosx_10_15_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f54ccd04d4e3a9d06d4e33e3fab6c54b985272becceb4bb7ffe2bc40f7804f32",
                "md5": "71076d97194aa81f070475e1164477b8",
                "sha256": "8b07b827860ee1b9c9cd4530ede1641f4dc4bddd264b2d36a749bdc2c8e23016"
            },
            "downloads": -1,
            "filename": "pyezzi-0.8.2.post2-cp310-cp310-manylinux_2_38_x86_64.whl",
            "has_sig": false,
            "md5_digest": "71076d97194aa81f070475e1164477b8",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 3096287,
            "upload_time": "2025-08-06T14:48:35",
            "upload_time_iso_8601": "2025-08-06T14:48:35.041572Z",
            "url": "https://files.pythonhosted.org/packages/f5/4c/cd04d4e3a9d06d4e33e3fab6c54b985272becceb4bb7ffe2bc40f7804f32/pyezzi-0.8.2.post2-cp310-cp310-manylinux_2_38_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9656eff292c402a88ce8f56663d3076706a614e05b8a25e671f7b7df45a196ae",
                "md5": "8261bb5a995b8607d2df94d8c915996f",
                "sha256": "106f32593c47c40dcd4cc3fe3da3e1c77c556302818ec26cc4456d0e24abbdc1"
            },
            "downloads": -1,
            "filename": "pyezzi-0.8.2.post2-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "8261bb5a995b8607d2df94d8c915996f",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.10",
            "size": 1133869,
            "upload_time": "2025-08-06T14:48:36",
            "upload_time_iso_8601": "2025-08-06T14:48:36.494036Z",
            "url": "https://files.pythonhosted.org/packages/96/56/eff292c402a88ce8f56663d3076706a614e05b8a25e671f7b7df45a196ae/pyezzi-0.8.2.post2-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3433e0f55cb6759432062ff1d75ddc55c12b3bec7ef7d1cd2cf06a94acdef350",
                "md5": "a46982adec4b71662fc60445a822cd5d",
                "sha256": "184a0344655c14e5840da2b7d898dc704720922bafde04d2c169249994bfadf8"
            },
            "downloads": -1,
            "filename": "pyezzi-0.8.2.post2-cp311-cp311-macosx_10_15_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a46982adec4b71662fc60445a822cd5d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 1182423,
            "upload_time": "2025-08-06T14:48:38",
            "upload_time_iso_8601": "2025-08-06T14:48:38.407753Z",
            "url": "https://files.pythonhosted.org/packages/34/33/e0f55cb6759432062ff1d75ddc55c12b3bec7ef7d1cd2cf06a94acdef350/pyezzi-0.8.2.post2-cp311-cp311-macosx_10_15_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "03ada5b23f42df3e4ea56ebfa06102efecc3d956ccb59eeae6b543a11177d149",
                "md5": "1f840e8e6dabda0bcfeaf1b6e386ac4d",
                "sha256": "caf28e539ee602f9cea4f66160e8e9efc92d3efa5c72af071ace01e6ee0fce6d"
            },
            "downloads": -1,
            "filename": "pyezzi-0.8.2.post2-cp311-cp311-manylinux_2_38_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1f840e8e6dabda0bcfeaf1b6e386ac4d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 3232268,
            "upload_time": "2025-08-06T14:48:41",
            "upload_time_iso_8601": "2025-08-06T14:48:41.282179Z",
            "url": "https://files.pythonhosted.org/packages/03/ad/a5b23f42df3e4ea56ebfa06102efecc3d956ccb59eeae6b543a11177d149/pyezzi-0.8.2.post2-cp311-cp311-manylinux_2_38_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7486312c2cd1471c109cb2648557f04e14ece1ee5edd2ed44f278f9640eee246",
                "md5": "9834fedc7aacd830e2b630327608e68b",
                "sha256": "5670f02b2690c95d4cb8921d415727267ba5030c990684b2c666eaf435b3f5d0"
            },
            "downloads": -1,
            "filename": "pyezzi-0.8.2.post2-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "9834fedc7aacd830e2b630327608e68b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.10",
            "size": 1132770,
            "upload_time": "2025-08-06T14:48:42",
            "upload_time_iso_8601": "2025-08-06T14:48:42.907257Z",
            "url": "https://files.pythonhosted.org/packages/74/86/312c2cd1471c109cb2648557f04e14ece1ee5edd2ed44f278f9640eee246/pyezzi-0.8.2.post2-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "49d88ab8f26f16c5a7b38f03f53429bb10ab84e2b533333e212267e51d8d1131",
                "md5": "f095dcd720fdf828f26823ac756b4758",
                "sha256": "3f7315e85389d6f9c2dac39a574dfc5e0aef5e13330d706ebe2d80e47f999125"
            },
            "downloads": -1,
            "filename": "pyezzi-0.8.2.post2-cp312-cp312-macosx_10_15_x86_64.whl",
            "has_sig": false,
            "md5_digest": "f095dcd720fdf828f26823ac756b4758",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 1186253,
            "upload_time": "2025-08-06T14:48:44",
            "upload_time_iso_8601": "2025-08-06T14:48:44.363903Z",
            "url": "https://files.pythonhosted.org/packages/49/d8/8ab8f26f16c5a7b38f03f53429bb10ab84e2b533333e212267e51d8d1131/pyezzi-0.8.2.post2-cp312-cp312-macosx_10_15_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0658a2ea8f0d636130b3988da3a4817472b5e2850271b293bee3f90863c30473",
                "md5": "d248f0c3d8eb639525fb5fb0157dbd12",
                "sha256": "28aa610dc6f2bd5ab75f6e7327f00a6a9b32b6dba244844895d47cab82238f79"
            },
            "downloads": -1,
            "filename": "pyezzi-0.8.2.post2-cp312-cp312-manylinux_2_38_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d248f0c3d8eb639525fb5fb0157dbd12",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 3207706,
            "upload_time": "2025-08-06T14:48:46",
            "upload_time_iso_8601": "2025-08-06T14:48:46.130491Z",
            "url": "https://files.pythonhosted.org/packages/06/58/a2ea8f0d636130b3988da3a4817472b5e2850271b293bee3f90863c30473/pyezzi-0.8.2.post2-cp312-cp312-manylinux_2_38_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "57b2e0e8351925d3a6a6e94107ae95e5dbfe5544270f022456479f86430c9d34",
                "md5": "ef4fa298da303451d25799c6c20eb5a8",
                "sha256": "7a6440bd61141286ab97aa7f1efe30723a948be88fc3473b8600e08fec768347"
            },
            "downloads": -1,
            "filename": "pyezzi-0.8.2.post2-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "ef4fa298da303451d25799c6c20eb5a8",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.10",
            "size": 1133255,
            "upload_time": "2025-08-06T14:48:47",
            "upload_time_iso_8601": "2025-08-06T14:48:47.975891Z",
            "url": "https://files.pythonhosted.org/packages/57/b2/e0e8351925d3a6a6e94107ae95e5dbfe5544270f022456479f86430c9d34/pyezzi-0.8.2.post2-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "24487d1496af754680411ef36151375943c57bac10265c99f218af7d8849fb4e",
                "md5": "c874e0466c47fbe744c76c5e4660b938",
                "sha256": "b28f56320baf7ae494be323944f6604cc4e347b3a166c87996ec2f475c18d9e6"
            },
            "downloads": -1,
            "filename": "pyezzi-0.8.2.post2-cp313-cp313-macosx_10_15_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c874e0466c47fbe744c76c5e4660b938",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 1181194,
            "upload_time": "2025-08-06T14:48:49",
            "upload_time_iso_8601": "2025-08-06T14:48:49.430982Z",
            "url": "https://files.pythonhosted.org/packages/24/48/7d1496af754680411ef36151375943c57bac10265c99f218af7d8849fb4e/pyezzi-0.8.2.post2-cp313-cp313-macosx_10_15_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7f6e8db683e025603316ec32dc5ab9075ee195a88d323bb6f7164894bc0b3fd7",
                "md5": "be4536e297e168307e0c7619e6513ff6",
                "sha256": "67476712c4493355492976c441dd2e5208c405001fe0ba9742c47bdba7c61126"
            },
            "downloads": -1,
            "filename": "pyezzi-0.8.2.post2-cp313-cp313-manylinux_2_38_x86_64.whl",
            "has_sig": false,
            "md5_digest": "be4536e297e168307e0c7619e6513ff6",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 3178783,
            "upload_time": "2025-08-06T14:48:52",
            "upload_time_iso_8601": "2025-08-06T14:48:52.568406Z",
            "url": "https://files.pythonhosted.org/packages/7f/6e/8db683e025603316ec32dc5ab9075ee195a88d323bb6f7164894bc0b3fd7/pyezzi-0.8.2.post2-cp313-cp313-manylinux_2_38_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6384b8dc84fa15d658e9000151de7cc536cc7d4168a1147725c223041854b6af",
                "md5": "7f0d9c521dac4df8b470c28fade1d92e",
                "sha256": "c564310550bb1cdf26663ebb25a9e9c60117fe0794c1a2f1e48a5d42565ead1c"
            },
            "downloads": -1,
            "filename": "pyezzi-0.8.2.post2-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "7f0d9c521dac4df8b470c28fade1d92e",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": ">=3.10",
            "size": 1132218,
            "upload_time": "2025-08-06T14:48:54",
            "upload_time_iso_8601": "2025-08-06T14:48:54.218820Z",
            "url": "https://files.pythonhosted.org/packages/63/84/b8dc84fa15d658e9000151de7cc536cc7d4168a1147725c223041854b6af/pyezzi-0.8.2.post2-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "faf9ce92148a44a26ba6ba1ef193631463eb776d9072d4a8f6f911becfabec36",
                "md5": "4c96e99cc93a9dc6bef606e8b60f1a3e",
                "sha256": "33127a2b66db422ccb2619a898dd0658c9f48fd9636e87ad237d866caf546a38"
            },
            "downloads": -1,
            "filename": "pyezzi-0.8.2.post2.tar.gz",
            "has_sig": false,
            "md5_digest": "4c96e99cc93a9dc6bef606e8b60f1a3e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 9156364,
            "upload_time": "2025-08-06T14:48:57",
            "upload_time_iso_8601": "2025-08-06T14:48:57.228351Z",
            "url": "https://files.pythonhosted.org/packages/fa/f9/ce92148a44a26ba6ba1ef193631463eb776d9072d4a8f6f911becfabec36/pyezzi-0.8.2.post2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-06 14:48:57",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "pyezzi"
}
        
Elapsed time: 1.19957s