Skip to content

Units and voxel size

Every tool runs on the voxel grid as if each voxel were one unit wide, and stores its result in voxel units. The image's voxel size turns those into physical units whenever you look at a result. This page explains the conversion and why it's exact.

  • Stored in voxel units: lengths in voxels, areas in voxel², and so on
  • Shown in physical units, using the image's current voxel size \(h\) in micrometres
  • Changing \(h\) re-expresses every result on the image at once, with nothing rerun
  • How to set it Voxel size in the User guide

Results are computed in voxels

A pore radius of 3.2 means 3.2 voxel edges, and a permeability of 0.85 means 0.85 voxel areas. The physical size of a voxel never enters the computation. Whenever a result is shown, PoreStore converts it with the image's current voxel size \(h\):

\[ q_\text{physical} = q_\text{voxel} \cdot h^{\,n} \]

where \(n\) is the power of length the quantity carries:

Quantity Power \(n\) Shown in Example
Length (pore radius, chord length, position) \(1\) µm \(r = 3.2\ \text{vox} \to 17.1\ \text{µm}\) at \(h = 5.345\)
Area (interfacial area) beta \(2\) µm²
Volume (REV region) \(3\) µm³
Distribution density (per unit length) \(-1\) µm⁻¹
Specific surface area beta \(-1\) µm⁻¹
Permeability \(2\) m², and mD in headlines \(k = 0.85\ \text{vox}^2 \to 2.43\times10^{-11}\ \text{m}^2\)
Network permeability beta \(2\) m², and mD in headlines
Capillary pressure \(-1\) Pa
Porosity, saturation, tortuosity factor, \(D_\text{eff}/D_0\) \(0\) dimensionless unchanged

SI quantities, permeability and pressure, use the voxel edge in metres, \(h \times 10^{-6}\). Permeability headlines use the millidarcy: \(1\ \text{D} = 9.869233\times10^{-13}\ \text{m}^2\) and \(1\ \text{mD} = 10^{-3}\ \text{D}\).

Without a voxel size

With no voxel size, results stay in voxel units: lengths in voxels, areas and permeability in voxel², and capillary pressure in N/m per voxel (the surface-tension term divided by a length of one voxel). Everything dimensionless is unaffected. That's enough to compare images at the same resolution.

What keeps the spacing it was made with

  • Exported files embed the voxel size at the time of export.
  • beta Resized and downsampled copies are new images with their own voxel size, derived from the source's when they're made.
  • beta Pore networks are stored in voxel units, and network validation converts them with the image's current voxel size.

Why it works this way

The physics of every tool is scale-invariant in the way that matters here:

  • Geometry (distances, sizes, areas, volumes) scales exactly with \(h^n\).
  • Stokes flow is linear. Solving it on a unit grid and rescaling, \(k = k_\text{vox} h^2\), gives exactly the permeability of the same geometry at voxel size \(h\). See Permeability.
  • Diffusion and conduction results (\(D_\text{eff}/D_0\), \(\tau\), \(\sigma_\text{eff}/\sigma_s\)) are ratios, and don't depend on \(h\) at all.
  • Capillary pressure from the Young–Laplace equation, \(P_c = -2\sigma\cos\theta/r\), scales as \(1/h\).

So a result computed in voxels and converted on read is identical to one computed in physical units, and a wrong voxel size can be corrected at any time without running anything again.

Voxels are cubes. The voxel size is a single edge length; PoreStore doesn't model voxels with different lengths along different axes.