Metrics
One can perform REV analysis for 22 metrics, implemented using corresponding classes. The summary of their properties is presented at the table below:

Let us briefly desribe these metrics.
Porosity
Porosity, the scalar metric, is computed internally by counting the number of pore voxels with subsequent normalization over the total number of voxels in the considered volume.
This metric is implemented using class Porosity.
Permeability
In order to compute permeability (class Permeability), we use the Python wrapper of C++ FDMSS solver, the external solver of Stokes’s equation with 4th order spatial accuracy scheme (Gerke, K. M., Vasilyev, R. V., Khirevich, S., Collins, D., Karsanina, M. V., Sizonenko, T. O., … & Mallants, D. (2018). Finite-difference method Stokes solver (FDMSS) for 3D pore geometries: Software development, validation and case studies. Computers & geosciences, 114, 41-58).
Euler density
Euler density, the scalar metric, describing the topological properties of 3D image, is computed by the normalization of Euler number \(\chi\) over the total number of voxels in the considered volume. One can use its correct (class EulerDensityI) and approximate (class EulerDensityII) values.
The correct Euler number for a given voxel domain can be calculated using the following expression (Vogel, H. J., Weller, U., & Schlüter, S. (2010). Quantification of soil structure based on Minkowski functions. Computers & Geosciences, 36(10), 1236-1245):
where \(\#\) means ‘number of’. The correct Euler densities are computed using julia library EulerCharacteristic.jl.
One can also use the approximate expression for Euler number using the characteristics of pore-network model (PNM), extracted from 3D image (see the next subsection):
where \(N_p\) and \(N_t\) are pores and throat numbers given by PNM.
PNM characteristics
Pore-network models (PNM) divide the void space of the 3D image into pores representing wider regions that are connected through narrower restrictions called throats. Coonectivity (also called coordination number) for a single pore is defined as the number of thoats, connecting the given pore with the other ones.
Here, we consider 6 scalar PNM-based metrics:
pore number (class PoreNumber),
throat number (class ThroatNumber),
mean pore radius (class MeanPoreRadius),
mean throat radius (class MeanThroatRadius),
mean connectivity (class MeanConnectivity),
approximate Euler density (class EulerDensityII, also see the previous subsection).
We also consider 3 vector PNM-based metrics:
pore radius (class PoreRadius),
throat radius (class ThroatRadius),
connectivity (class Connectivity).
Pore, throat radii and connectivities can be presented as 1d histograms (see the figure below). These histograms can be vectorized using histogram vectorizer (class HistVectorizer).

Correlation functions
We consider 5 types of directional correlation functions (CFs):
Each correlation function measures a probability of some event for a given correlation length \(\boldsymbol{r}\). Specifically, \(S_2(\boldsymbol{r})\) measures the probability that both ends of the \(\boldsymbol{r}\) line segment lie within pore phase, \(L_2(\boldsymbol{r})\) — the probability that the whole segment lies within the pore space, \(C_2(\boldsymbol{r})\) — that both ends of the segment lie within the same pore cluster, \(F_{SS}(\boldsymbol{r})\) — that both ends fall into a pore-solid interface, \(F_{SV}(\boldsymbol{r})\) - that one end lies in a pore-solid interface and the other one lies within the pore volume. The correlation length \(\boldsymbol{r}\) was chosen to vary from 0 to a half of total linear size (in voxels) of the studied sample. These CFs ara computed along three major orthogonal directions \(x\), \(y\) and \(z\).
We also consider two types of probability density CFs:
chord length function \(p(r)\) (class ChordLength),
pore size function \(P(r)\) (class PoreSize),
CF \(p(r)\) measures the probability of finding a chord of length between \(r\) and \(r+dr\) in pore phase. Chord is a line segment which lies entirely in the same phase and touches the interface with its ends. CF \(P(r)\) measures the probability that a randomly chosen point in a set of points belonging to the void phase lies at a distance between \(r\) and \(r+dr\) from the nearest point on the pore-solid interface.
Any additional details on different CFs can be found in comprehensive Torquato’s book (Torquato S. (2002) Random Heterogeneous Materials: Microstructure and Macroscopic Properties (SpringerVerlag, New York).
Graphical explanation in addition to definitions above is presented in the figure below.

All CFs are computed using julia library CorrelationFunctions.jl (Postnicov, V., Samarin, A., Karsanina, M. V., Gravey, M., Khlyupin, A., & Gerke, K. M. (2024). Evaluation of classical correlation functions from 2/3D images on CPU and GPU architectures: Introducing CorrelationFunctions. jl. Computer Physics Communications, 299, 109134).
The directional and probability density CFs are vectorized using CF vectorizer (class CFVectorizer) and Direct Vectorizer (class DirectVectorizer), respectively.
Persistence diagrams
Persistence diagram (PD) is 2D visualization of persistent homology analysis applied to some 3D domain. PDs provide the scales of topological features and clarify the geometric relationships among them. The total set of persistent pairs located in 2D coordinate plane form a persistence diagram \(\mathrm{PD}_k\). We condider 3 PD-based vector metrics:
\(\mathrm{PD}_0\) represents the births and deaths of connected components, \(\mathrm{PD}_1\) — the births and deaths of 1-cycles (rings), and \(\mathrm{PD}_2\) — the births and deaths of 2-cycles (cavities). The example of computed PDs are presented at the figure below.

In our library PDs are generated using the python wrapper of C++ library Diamorse (https://github.com/AppliedMathematicsANU/diamorse).
The generated PD data can be vectorized using 4 different vectorization methods (vectorizers):
simple binning (class SimpleBinningVectorizer),
persistence image (class PersistenceImageVectorizer),
landscape (class LandscapeVectorizer),
silhouette (class SilhouetteVectorizer).
For the details of these vectorization methods see Supplementary Materials in (Zubov, A. S., Khlyupin, A. N., Karsanina, M. V., & Gerke, K. M. (2024). In search for representative elementary volume (REV) within heterogeneous materials: A survey of scalar and vector metrics using porous media as an example. Advances in Water Resources, 192, 104762).