一套用于分析多孔材料 3D 图像的工具
项目描述
什么是 PoreSpy?
PoreSpy是一组图像分析工具,用于从多孔材料的 3D 图像(通常从 X 射线断层扫描中获得)中提取信息。有许多提供通用图像分析工具的包(即Python 环境中的
Skimage和Scipy.NDimage 、 ImageJ、MatLab的图像处理工具箱),但它们都需要构建复杂的脚本或宏来完成特定用于多孔的任务媒体。PoreSpy的目的是为所有常见的多孔介质测量提供一组预先编写的工具。例如,可以使用单个函数调用(例如porespy.filters.porosimetry)来执行水银入侵模拟。
PoreSpy严重依赖 scipy.ndimage 和scikit-image也称为skimage。前者包含各种通用图像分析工具,例如图像形态过滤器,而后者提供更复杂但仍然通用的功能,例如分水岭分割。PoreSpy不会复制任何这些通用功能,因此您还必须安装并学习如何使用它们才能充分利用PoreSpy。PoreSpy 中的函数通常是使用skimage和scipy提供的几个通用函数构建的。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]')
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。