{ "info": { "author": "Jeff Gostick", "author_email": "jgostick@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Physics" ], "description": ".. image:: https://travis-ci.org/PMEAL/porespy.svg?branch=master\n :target: https://travis-ci.org/PMEAL/porespy\n\n.. image:: https://codecov.io/gh/PMEAL/PoreSpy/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/PMEAL/PoreSpy\n\n.. image:: https://img.shields.io/badge/ReadTheDocs-GO-blue.svg\n :target: http://porespy.readthedocs.io/en/master/\n\n.. image:: https://img.shields.io/pypi/v/porespy.svg\n :target: https://pypi.python.org/pypi/porespy/\n\n.. image:: https://img.shields.io/badge/DOI-10.5281%2Fzenodo.2633284-blue.svg\n :target: https://www.doi.org/10.5281/zenodo.2633284\n\n----\n\n**Cite as:**\n\n Gostick J, Khan ZA, Tranter TG, Kok MDR, Agnaou M, Sadeghi MA, Jervis R.\n PoreSpy: A Python Toolkit for Quantitative Analysis of Porous Media Images.\n Journal of Open Source Software, 2019.\n doi:10.5281/zenodo.2633284\n\n\n-------------------------------------------------------------------------------\nWhat is PoreSpy?\n-------------------------------------------------------------------------------\n\nPoreSpy is a collection of image analysis tool used to extract information\nfrom 3D images of porous materials (typically obtained from X-ray tomography).\nThere are many packages that offer generalized image analysis tools (i.e\nSkimage and Scipy.NDimage in the Python environment, ImageJ, MatLab's Image\nProcessing Toolbox), but the all require building up complex scripts or macros\nto accomplish tasks of specific use to porous media. The aim of PoreSpy is to\nprovide a set of pre-written tools for all the common porous media\nmeasurements.\n\nPoreSpy relies heavily on two general image analysis packages:\n`scipy.ndimage `_\nand `scikit-image `_ also known as **skimage**.\nThe former contains an assortment of general image analysis tools such as image\nmorphology filters, while the latter offers more complex but still general\nfunctions such as watershed segmentation. PoreSpy does not duplicate any of\nthese general functions so you will also have to install and learn how to\nuse them to get the most from PoreSpy. The functions in PoreSpy are generally\nbuilt up using several of the more general functions offered by **skimage**\nand **scipy**. There are a few functions in PoreSpy that are implemented\nnatively, but only when necessary.\n\n-------------------------------------------------------------------------------\nCapabilities\n-------------------------------------------------------------------------------\n\nPoreSpy consists of the following modules:\n\n* ``generators``: Routines for generating artificial images of porous materials useful for testing and illustration\n* ``filters``: Functions that accept an image and return an altered image\n* ``metrics``: Tools for quantifying properties of images\n* ``simulations``: More complex calculations based on physical processes\n* ``networks``: Tools for analyzing images as pore networks\n* ``visualization``: Helper functions for creating useful views of the image\n* ``io``: Functions for output image data in various formats for use in common software\n* ``tools``: Various useful tools for working with images\n\n-------------------------------------------------------------------------------\nInstallation\n-------------------------------------------------------------------------------\n\nPoreSpy depends heavily on the Scipy Stack. The best way to get a fully\nfunctional environment is the\n`Anaconda distribution `_.\nBe sure to get the **Python 3.6+ version**.\n\n\nOnce you've installed *Conda*, you can then install PoreSpy. It is available\non the `Python Package Index `_ and can be\ninstalled by typing the following at the *conda* prompt:\n\n::\n\n pip install porespy\n\n\nOn Windows, you should have a shortcut to the \"anaconda prompt\" in the\nAnaconda program group in the start menu. This will open a Windows command\nconsole with access to the Python features added by *Conda*, such as\ninstalling things via ``pip``.\n\nOn Mac or Linux, you need to open a normal terminal window, then type\n``source activate {env}`` where you replace ``{env}`` with the name of the\nenvironment you want to install PoreSpy. If you don't know what this means,\nthen use ``source activate root``, which will install PoreSpy in the root\nenvironment which is the default.\n\n\nIf you think you may be interested in contributing to PoreSpy and wish to\nboth *use* and *edit* the source code, then you should clone the\n`repository `_ to your local machine, and\ninstall it using the following PIP command:\n\n::\n\n pip install -e \"C:\\path\\to\\the\\local\\files\\\"\n\nFor information about contributing, refer to the `contributors guide `_\n\n-------------------------------------------------------------------------------\nExamples\n-------------------------------------------------------------------------------\n\nThe following code snippets illustrate generating a 2D image, applying\nseveral filters, and calculating some common metrics.\nA set of examples is included in this repo, and can be `browsed here `_.\n\n...............................................................................\nGenerating an image\n...............................................................................\n\nPoreSpy offers several ways to generate artificial images, for quick testing\nand developmnet of work flows, instead of dealing with reading/writing/storing\nof large tomograms.\n\n.. code-block:: python\n\n import porespy as ps\n import matplotlib.pyplot as plt\n im = ps.generators.blobs(shape=[200, 200], porosity=0.5, blobiness=2)\n plt.imshow(im)\n\n.. image:: https://github.com/PMEAL/porespy/raw/master/docs/_static/fig1.png\n\n...............................................................................\nApplying filters\n...............................................................................\n\nA common filter to apply is the local thickness, which replaces every voxel\nwith the radius of a sphere that overlaps it. Analysis of the histogram of\nthe voxel values provides information about the pore size distribution.\n\n.. code-block:: python\n\n lt = ps.filters.local_thickness(im)\n plt.imshow(lt)\n\n.. image:: https://github.com/PMEAL/porespy/raw/master/docs/_static/fig2.png\n\nA less common filter is the application of chords that span the pore space in\na given direction. It is possible to gain information about anisotropy of the\nmaterial by looking at the distributions of chords lengths in each principle\ndirection.\n\n.. code-block:: python\n\n cr = ps.filters.apply_chords(im)\n cr = ps.filters.flood(cr, mode='size')\n plt.imshow(cr)\n\n.. image:: https://github.com/PMEAL/porespy/raw/master/docs/_static/fig3.png\n\n...............................................................................\nCalculating metrics\n...............................................................................\n\nThe metrics sub-module contains several common functions that analyze binary\ntomogram directly. Examples are simple porosity, as well as two-point\ncorrelation function.\n\n.. code-block:: python\n\n data = ps.metrics.two_point_correlation_fft(im)\n fig = plt.plot(*data, 'bo-')\n plt.ylabel('probability')\n plt.xlabel('correlation length [voxels]')\n\n.. image:: https://github.com/PMEAL/porespy/raw/master/docs/_static/fig4.png\n\nThe metrics sub-module also contains a suite of functions that produce plots\nbased on values in images that have passed through a filter, such as local\nthickness.\n\n.. code-block:: python\n\n mip = ps.filters.porosimetry(im)\n data = ps.metrics.pore_size_distribution(mip, log=False)\n plt.imshow(mip)\n # Now show intrusion curve\n plt.plot(data.R, data.cdf, 'bo-')\n plt.xlabel('invasion size [voxels]')\n plt.ylabel('volume fraction invaded [voxels]')\n\n.. image:: https://github.com/PMEAL/porespy/raw/master/docs/_static/fig5.png\n.. image:: https://github.com/PMEAL/porespy/raw/master/docs/_static/fig6.png", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://porespy.org", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "porespy", "package_url": "https://pypi.org/project/porespy/", "platform": "", "project_url": "https://pypi.org/project/porespy/", "project_urls": { "Homepage": "http://porespy.org" }, "release_url": "https://pypi.org/project/porespy/1.2.0/", "requires_dist": null, "requires_python": "", "summary": "A set of tools for analyzing 3D images of porous materials", "version": "1.2.0" }, "last_serial": 5629040, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "4a7e5341aeefa0ed46f785a340dfae1e", "sha256": "c3f12e3013f9a6b3f5a3fc50812da677668f705c2a0d136a390ace6adda0766e" }, "downloads": -1, "filename": "porespy-0.1.zip", "has_sig": false, "md5_digest": "4a7e5341aeefa0ed46f785a340dfae1e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11834, "upload_time": "2015-07-23T01:05:47", "url": "https://files.pythonhosted.org/packages/7f/11/57a90b5b67cce4f1097ee3f53f8efb80aa18d43545897dc17db863280a27/porespy-0.1.zip" } ], "0.3.4": [], "0.3.5": [ { "comment_text": "", "digests": { "md5": "2f6d06910f4b7c194289d66ee1260724", "sha256": "88d02210faebe5a0d1185cb389e2b059e17f638465caffed21fc3325fe7294d0" }, "downloads": -1, "filename": "porespy-0.3.5.tar.gz", "has_sig": false, "md5_digest": "2f6d06910f4b7c194289d66ee1260724", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32561, "upload_time": "2017-09-15T18:06:32", "url": "https://files.pythonhosted.org/packages/7c/49/fff822d4f14fc53f2dcaaba58f5b9a3ce71c8cc1d77c8c5aa3ffa69e9dc9/porespy-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "7bc0bf2d94082ddd63beb5d060713287", "sha256": "94a3f6f6f7b33569f0fca249f73280dca7bfa037e7050f824c5668116af3869e" }, "downloads": -1, "filename": "porespy-0.3.6.tar.gz", "has_sig": false, "md5_digest": "7bc0bf2d94082ddd63beb5d060713287", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34694, "upload_time": "2018-01-14T02:49:12", "url": "https://files.pythonhosted.org/packages/43/99/149d8c66a28302fd43c1dc040c1cc701c9fb500b1d22a30b15f7d54ae032/porespy-0.3.6.tar.gz" } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "d3aadecfb3ef4bac44292283bcb12268", "sha256": "13ba20d64df96e5cd243deffaa0f66aa5443ae16b82b0f3bd4c99f586ec82539" }, "downloads": -1, "filename": "porespy-0.3.9.tar.gz", "has_sig": false, "md5_digest": "d3aadecfb3ef4bac44292283bcb12268", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44985, "upload_time": "2018-01-15T17:21:48", "url": "https://files.pythonhosted.org/packages/0b/f8/c3b225a7f46cf94e055d158e496df08a23cf6e4fefd0b09c4622e52e6ce1/porespy-0.3.9.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "17dd2bfaee28da1909bf00f9698d3610", "sha256": "fa97c0d2868283213a7ea501c7a28c7654a36cc6d14edb4e2a17374c5ed55457" }, "downloads": -1, "filename": "porespy-0.4.0.tar.gz", "has_sig": false, "md5_digest": "17dd2bfaee28da1909bf00f9698d3610", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49177, "upload_time": "2019-01-16T16:19:21", "url": "https://files.pythonhosted.org/packages/15/b7/9fffa9e13848655b63a3d6aacc130e29f125a8d34e4bd44a9effd2225173/porespy-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "5565b42341974b6c73cbd1502620d8ea", "sha256": "1193947ea318cbd06c417f4665dc00053878079e9d41f45d95f719ffa2bd7bd0" }, "downloads": -1, "filename": "porespy-0.4.1.tar.gz", "has_sig": false, "md5_digest": "5565b42341974b6c73cbd1502620d8ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 51842, "upload_time": "2019-01-20T04:24:16", "url": "https://files.pythonhosted.org/packages/a4/65/5083c5f8523eaac65a4d60ffdd7db620e480d262fb44cb63fb49be8cdeab/porespy-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "22079bcd125757961ee162c4aef7393b", "sha256": "5431ce218952003d081c4d89c2a7d8e2ae0012ea780552a5e8bf95d8e02fe181" }, "downloads": -1, "filename": "porespy-0.4.2.tar.gz", "has_sig": false, "md5_digest": "22079bcd125757961ee162c4aef7393b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55652, "upload_time": "2019-02-03T02:01:32", "url": "https://files.pythonhosted.org/packages/6e/7d/e813a0ce7a42596647ad25e57a5dc035019ae2abc33463db7a45b87ea04f/porespy-0.4.2.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "05242359c80490c9adfa8567848f5b2e", "sha256": "b727a1a5f3488f9c70020f5e82753fececf58df6a6256c71cb15829f0230ac0f" }, "downloads": -1, "filename": "porespy-1.0.0.tar.gz", "has_sig": false, "md5_digest": "05242359c80490c9adfa8567848f5b2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55541, "upload_time": "2019-02-09T21:36:32", "url": "https://files.pythonhosted.org/packages/94/21/ac5ccd77e0122840554ab8456f9ce8e278b8a9a4965fe43a87f76d4493de/porespy-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "ca4283c1741b888ba4aa2704e4a5b7d8", "sha256": "f5b6a2435cdd7c922a56b471d4864f389ee1d479670f139f8430d828a985567a" }, "downloads": -1, "filename": "porespy-1.1.0.tar.gz", "has_sig": false, "md5_digest": "ca4283c1741b888ba4aa2704e4a5b7d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63506, "upload_time": "2019-04-08T20:23:46", "url": "https://files.pythonhosted.org/packages/29/95/9c824aeca5c2cc7c96d5811b72f339c9b82d80bba93db7f6dcab1c5beb37/porespy-1.1.0.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "1e3bafbc3ca90dc9bd98317cbcaae9e0", "sha256": "e8558ee274c6b7b783182f26247b6ea1942ed3d5ec25bcab69feee412cf23184" }, "downloads": -1, "filename": "porespy-1.1.2.tar.gz", "has_sig": false, "md5_digest": "1e3bafbc3ca90dc9bd98317cbcaae9e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 64047, "upload_time": "2019-04-28T20:46:49", "url": "https://files.pythonhosted.org/packages/7f/76/dbac510c5dc67328193d7199f7fcb280751de5dfae74210caf7f2f217d91/porespy-1.1.2.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "3e6f3f776b9c48d8610db5d2fe536f8e", "sha256": "7dea5e903792a83e49c10e180f10493645a7c4112141816e291d09201ce2aa52" }, "downloads": -1, "filename": "porespy-1.2.0.tar.gz", "has_sig": false, "md5_digest": "3e6f3f776b9c48d8610db5d2fe536f8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66784, "upload_time": "2019-08-03T19:55:17", "url": "https://files.pythonhosted.org/packages/ed/36/ec0a082d967bf7eefa8ce0c7a3b9cb185cd7d414666e3c61ada592ebd06b/porespy-1.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3e6f3f776b9c48d8610db5d2fe536f8e", "sha256": "7dea5e903792a83e49c10e180f10493645a7c4112141816e291d09201ce2aa52" }, "downloads": -1, "filename": "porespy-1.2.0.tar.gz", "has_sig": false, "md5_digest": "3e6f3f776b9c48d8610db5d2fe536f8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 66784, "upload_time": "2019-08-03T19:55:17", "url": "https://files.pythonhosted.org/packages/ed/36/ec0a082d967bf7eefa8ce0c7a3b9cb185cd7d414666e3c61ada592ebd06b/porespy-1.2.0.tar.gz" } ] }