Skip to main content

一套用于分析多孔材料 3D 图像的工具

项目描述

图片 Pyversions

什么是 PoreSpy?

PoreSpy是一组图像分析工具,用于从多孔材料的 3D 图像(通常从 X 射线断层扫描中获得)中提取信息。有许多提供通用图像分析工具的包(即Python 环境中的 SkimageScipy.NDimage 、 ImageJMatLab的图像处理工具箱),但它们都需要构建复杂的脚本或宏来完成特定用于多孔的任务媒体。PoreSpy的目的是为所有常见的多孔介质测量提供一组预先编写的工具。例如,可以使用单个函数调用(例如porespy.filters.porosimetry)来执行水银入侵模拟。

PoreSpy严重依赖 scipy.ndimagescikit-image也称为skimage。前者包含各种通用图像分析工具,例如图像形态过滤器,而后者提供更复杂但仍然通用的功能,例如分水岭分割。PoreSpy不会复制任何这些通用功能,因此您还必须安装并学习如何使用它们才能充分利用PoreSpy。PoreSpy 中的函数通常是使用skimagescipy提供的几个通用函数构建的。PoreSpy中有几个函数这些都是本机实现的,但仅在必要时才实现。

能力

PoreSpy由以下模块组成:

  • generators:生成用于测试和说明的多孔材料人工图像的程序
  • filters:接受图像并返回更改后图像的函数
  • metrics: 量化图像属性的工具
  • networks: 将图像分析为孔隙网络的算法和工具
  • simulations: 对图像进行物理模拟,包括排水
  • visualization: 用于创建有用的图像视图的辅助函数
  • io: 以各种格式输出图像数据以供通用软件使用的功能
  • tools:用于处理图像的各种有用工具

画廊

引用为

Gostick J、Khan ZA、Tranter TG、Kok MDR、Agnaou M、Sadeghi MA、Jervis R. PoreSpy:用于对多孔介质图像进行定量分析的 Python 工具包。开源软件学报, 2019.doi:10.21105/joss.01296

安装

有关详细和最新的安装说明,请参见此处

贡献

如果您认为您可能有兴趣为 PoreSpy 做出贡献并希望使用编辑源代码,那么您应该将存储库克隆 本地计算机,并使用以下 PIP 命令安装它:

pip install -e "C:\path\to\the\local\files\"

有关贡献的信息,请参阅贡献者指南

致谢

PoreSpy 感谢CANARIE在过去几年中提供的慷慨资助。我们还要感谢加拿大 NSERC 为自 2014 年成立以来为 PoreSpy 做出贡献的许多学生提供的支持。

例子

以下代码片段说明了生成 2D 图像、应用多个过滤器以及计算一些常见指标。此 repo 中包含一组示例,可以在此处浏览

生成图像

PoreSpy 提供了多种生成人工图像的方法,用于快速测试和开发工作流程,而不是处理大型断层图像的读取/写入/存储。

import porespy as ps
import matplotlib.pyplot as plt
im = ps.generators.blobs(shape=[500, 500], porosity=0.6, blobiness=2)
plt.imshow(im)

应用过滤器

一个常用的过滤器是局部厚度,它将每个体素替换为与其重叠的球体的半径。体素值的直方图分析提供了有关孔径分布的信息。

lt = ps.filters.local_thickness(im)
plt.imshow(lt)

一个不太常见的过滤器是在给定方向上跨越孔隙空间的弦的应用。通过查看每个主方向的弦长分布,可以获得有关材料各向异性的信息。

cr = ps.filters.apply_chords(im)
cr = ps.filters.flood(cr, mode='size')
plt.imshow(cr)

计算指标

指标子模块包含几个直接分析二进制断层图的常用函数。例子是简单的孔隙率,以及两点相关函数。

data = ps.metrics.two_point_correlation_fft(im)
fig = plt.plot(*data, 'bo-')
plt.ylabel('probability')
plt.xlabel('correlation length [voxels]')

指标子模块还包含一套函数,这些函数根据已通过过滤器的图像中的值(例如局部厚度)生成图。

mip = ps.filters.porosimetry(im)
data = ps.metrics.pore_size_distribution(mip, log=False)
plt.imshow(mip)
# Now show intrusion curve
plt.plot(data.R, data.cdf, 'bo-')
plt.xlabel('invasion size [voxels]')
plt.ylabel('volume fraction invaded [voxels]')

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

porepy-2.2.0.tar.gz (123.2 kB 查看哈希)

已上传 source

内置分布

porepy-2.2.0-py3-none-any.whl (139.9 kB 查看哈希)

已上传 py3