Skip to content

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.

Basic Thresholding →

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.

Image Cleaning →

Permeability uses periodic lateral faces on every backend. The backends differ in where they impose pressure and how they measure the gradient.

Permeability →

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.

Diffusivity →

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.

Pore Size →

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.

Chord Length →

Mercury porosimetry measures entry sizes, not pore sizes: a large pore behind a narrow throat fills at the throat's pressure.

Mercury Porosimetry →

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.

REV Porosity →

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.

SEM View and X-Ray View →

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