一套分析多孔材料三维图像的工具
poresp的Python项目详细描述
引用为:
Gostick J, Khan ZA, Tranter TG, Kok MDR, Agnaou M, Sadeghi MA, Jervis R. PoreSpy: A Python Toolkit for Quantitative Analysis of Porous Media Images. Journal of Open Source Software, 2019. doi:10.5281/zenodo.2633284
什么是porespy?
porespy是一个图像分析工具的集合,用于提取信息 从多孔材料的三维图像(通常从X射线断层扫描获得)。 有许多软件包提供通用的图像分析工具(即 python环境中的skipage和scipy.ndimage,imagej,matlab的图像 处理工具箱),但所有这些都需要构建复杂的脚本或宏 完成多孔介质的特殊用途。porespy的目的是 为所有常见的多孔介质提供一套预写工具 测量。
porespy在很大程度上依赖于两个通用的图像分析软件包: scipy.ndimage 以及scikit-image也称为skipage。 前者包含各种通用图像分析工具,如图像 形态过滤器,而后者提供更复杂但仍然通用的 分水岭分割等功能。porespy没有复制任何 这些一般功能,因此您还必须安装并学习如何 利用它们从porespy那里得到最大的收益。porespy的功能一般是 使用skipage提供的几个更通用的函数构建 以及scipy。在porespy中有一些函数是被实现的 本机的,但只有在必要时。
能力
porespy由以下模块组成:
- generators:生成多孔材料人造图像的例程,用于测试和说明
- filters:接受图像并返回已更改图像的函数
- metrics:用于量化图像属性的工具
- simulations:基于物理过程的更复杂的计算
- networks:将图像分析为孔隙网络的工具
- visualization:用于创建图像的有用视图的帮助函数
- io:以各种格式输出图像数据的函数,用于通用软件
- tools:用于处理图像的各种有用工具
安装
porespy在很大程度上依赖于scipy堆栈。充分利用 功能环境是 Anaconda distribution。 请确保获得python 3.6+版本。
一旦安装了conda,就可以安装porespy。它是可用的 在Python Package Index上,可以是 通过在conda提示符下键入以下命令安装:
pip install porespy
在windows上,您应该在 “开始”菜单中的“Python”程序组。这将打开一个windows命令 控制台,可以访问由conda添加的python特性,例如 通过pip安装内容。
在Mac或Linux上,您需要打开一个正常的终端窗口,然后键入 source activate {env}其中您将{env}替换为 要安装porespy的环境。如果你不知道这意味着什么, 然后使用source activate root,它将在根目录中安装porespy 默认的环境。
如果你认为你有兴趣为porespy做贡献并希望 使用和编辑源代码,然后应该克隆 repository发送到本地计算机,然后 使用以下pip命令安装:
pip install -e "C:\path\to\the\local\files\"
有关投稿的信息,请参阅contributors guide
示例
下面的代码片段演示如何生成二维图像,应用 几个过滤器,并计算一些常用度量。 此repo中包含一组示例,可以是browsed here。
生成图像
porespy提供了几种生成人工图像的方法,用于快速测试 开发工作流程网络,而不是处理读/写/存储 大的断层扫描。
importporespyaspsimportmatplotlib.pyplotaspltim=ps.generators.blobs(shape=[200,200],porosity=0.5,blobiness=2)plt.imshow(im)
应用过滤器
普通的污秽要应用的er是局部厚度,它替换了每个体素 与之重叠的球体的半径。直方图分析 体素值提供有关孔径分布的信息。
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)
计算指标
metrics子模块包含几个分析二进制文件的公共函数 直接断层扫描。例如简单的孔隙度,以及两点 相关函数。
data=ps.metrics.two_point_correlation_fft(im)fig=plt.plot(*data,'bo-')plt.ylabel('probability')plt.xlabel('correlation length [voxels]')
metrics子模块还包含一组生成图的函数 基于图像中通过过滤器(如local)的值 厚度。
mip=ps.filters.porosimetry(im)data=ps.metrics.pore_size_distribution(mip,log=False)plt.imshow(mip)# Now show intrusion curveplt.plot(data.R,data.cdf,'bo-')plt.xlabel('invasion size [voxels]')plt.ylabel('volume fraction invaded [voxels]')