Scientific reference¶
What each PoreStore tool computes, and exactly how: the equations, the boundary conditions, the numerical method and its settings, how accurate the answer is, and where the method comes from. Use it to understand a quantity such as the tortuosity factor, to compare a result with the literature, or to question it. How to run each tool is in the User guide.
By category¶
| Category | Pages |
|---|---|
| Segmentation | Noise Filtering beta, Basic Thresholding, Interactive Segmentation |
| Preparation | Image Cleaning, Downsample and Resize beta |
| Transport | Diffusivity, Permeability, Conductivity |
| Structure | Pore Size, Porosity Profile, Interfacial Surface Area beta |
| Statistics | Chord Length, Radial Density, Connectivity Analysis beta |
| Multiphase | Mercury Porosimetry |
| REV | REV Porosity |
| Networks | Network Extraction beta, Network Validation betaComing soon |
| Visualize | SEM View and X-Ray View |
Every result is computed in voxel units and converted with the image's voxel size when you read it: see Units and voxel size. Terms are defined in the Glossary, and every method's source is in the Bibliography.
Know which problem was solved¶
Two tools can report the "same" property and disagree, because they define it or set it up differently. Each page states PoreStore's choices; these are the ones that most often explain a difference.
Segmentation sets every number downstream. Otsu, Li and local thresholds can split the same scan differently, and noise left in the binary image counts as pore or solid.
Porosity \(\varphi\) counts every pore voxel, isolated pores included, but only connected pores carry flow. Cleaning the image moves it from total towards effective porosity.
Permeability uses periodic lateral faces on every backend. The backends differ in where they impose pressure and how they measure the gradient.
Diffusivity and conductivity use closed lateral faces. \(D_\text{eff}/D_0\) includes porosity, with the tortuosity factor \(\tau\) and the formation factor \(F\) reported alongside; conductivity solves the same problem in the solid.
Pore size has several definitions: the largest sphere that fits, the throat mercury must pass to get in, straight chords, and distance to the wall. One sample gives a different size for each.
Statistics depend on direction and phase. Chord lengths are measured along each axis separately, and chord length and radial density can describe the solid as well as the pores.
Mercury porosimetry measures entry sizes, not pore sizes: a large pore behind a narrow throat fills at the throat's pressure.
REV asks whether the sample is big enough. Porosity that still drifts as the region grows means a result from the whole image may not hold for the material.
A pore network's permeability depends on the shape assumed for its pores and throats. Validation reports the network's values so you can compare them with the image's.
Network Validation → beta
SEM View and X-Ray View are renderings of the segmented image, not simulations of an instrument: they show the structure the way a micrograph or a radiograph would.
Conventions and notation¶
Every page uses the same symbols. A setting that appears in an equation is given a symbol, and each page says which setting it is.
| Symbol | Meaning |
|---|---|
| \(\Omega\), \(\Omega_p\), \(\Omega_s\) | The image, its pore space (voxels that are 1) and its solid (voxels that are 0) |
| \(\varphi\) | Porosity, \(\lvert\Omega_p\rvert / \lvert\Omega\rvert\), counting every pore voxel, connected or not. A local value is written \(\varphi(x)\), or \(\varphi\) of a named slice or region. |
| \(N\), \(N_p\) | Voxels along the axis in question; pore voxels in the region in question |
| \(h\) | Voxel edge length. Every formula is written in voxel units, \(h = 1\), and results are converted to physical units when you read them. See Units and voxel size. |
| \(d(\mathbf{x})\) | Euclidean distance from a pore voxel's centre to the nearest solid voxel's centre, computed exactly. The image's outer faces don't count as solid unless a page says so. |
| \(F\) | For a size distribution, the fraction at least that size, falling from 1 to 0 as in porosimetry. Medians such as \(r_{50}\) and \(\ell_{50}\) are where it crosses 0.5. |
| \(q^{(j)}\) | A quantity \(q\) at convergence check \(j\) of an iterative solver |
| \(r_q\), \(\delta_q\) | A convergence criterion on \(q\), and the tolerance it must fall below |
| \(n_\text{max}\) | An iteration cap |
A few symbols keep the meaning their own field gives them, and each page that uses them says so: \(\tau\) is the tortuosity factor, but the relaxation time on the permeability page; \(F\) is a cumulative fraction, but the formation factor on the diffusivity page and the size factors \(F^h\), \(F^d\) on the network validation page; \(\ell\) is a chord length, but \(\ell(\mathbf{x})\) is the local thickness; \(\sigma\) is a conductivity, mercury's surface tension or a Gaussian width; \(\mu\) is the dynamic viscosity, but in Beer–Lambert's \(e^{-\mu\ell}\) on the SEM View and X-Ray View page it's an attenuation coefficient, with \(\ell\) a path length; and \(\lambda\) and \(\mu\) are Taubin's two smoothing factors on the interfacial surface area page.
Axes. X, Y and Z are the image's axes 0, 1 and 2, in the order the uploaded file stores them. PoreStore never transposes or flips an image.
Voxels are cubes. The voxel size is a single edge length.
Software versions¶
Each job records the exact solver build that ran it, and that record is the authority on what ran a job. The builds these pages describe are:
| Component | Version |
|---|---|
| PoreSpy | 3.1 development line, commit 198673e |
| OpenPNM beta | 3.6.4 |
| Tortuosity.jl | 0.3.0 (commit 58693bb) |
| TauFactor | 1.2.1 (commit 2947493) |
| Kabs | commit 1f4fbc8, Taichi 1.7.4 |
| waLBerla | suffa/Sparse line, commit 4260c40, with lbmpy |
| Palabos beta | commit 4127697 |
| scikit-image, scikit-learn | 0.26.0, 1.8.0 |
| trimesh | 5.1.1 |