porosimetry#
- porosimetry(im, sizes=25, inlets=None, access_limited=True, mode='hybrid', divs=1)[source]#
Performs a porosimetry simulution on an image.
- Parameters:
im (ndarray) – An ND image of the porous material containing
True
values in the pore space.sizes (array_like or scalar) – The sizes to invade. If a list of values of provided they are used directly. If a scalar is provided then that number of points spanning the min and max of the distance transform are used.
inlets (ndarray, boolean) – A boolean mask with
True
values indicating where the invasion enters the image. By default all faces are considered inlets, akin to a mercury porosimetry experiment. Users can also apply solid boundaries to their image externally before passing it in, allowing for complex inlets like circular openings, etc. This argument is only used ifaccess_limited
isTrue
.access_limited (bool) – This flag indicates if the intrusion should only occur from the surfaces (
access_limited
isTrue
, which is the default), or if the invading phase should be allowed to appear in the core of the image. The former simulates experimental tools like mercury intrusion porosimetry, while the latter is useful for comparison to gauge the extent of shielding effects in the sample.mode (str) –
Controls with method is used to compute the result. Options are:
- ’hybrid’
(default) Performs a distance tranform of the void space, thresholds to find voxels larger than
sizes[i]
, trims the resulting mask ifaccess_limitations
isTrue
, then dilates it using the efficient fft-method to obtain the non-wetting fluid configuration.- ’dt’
Same as ‘hybrid’, except uses a second distance transform, relative to the thresholded mask, to find the invading fluid configuration. The choice of ‘dt’ or ‘hybrid’ depends on speed, which is system and installation specific.
- ’mio’
Uses binary erosion followed by dilation to obtain the invading fluid configuration directly. If
access_limitated
isTrue
then disconnected blobs are trimmmed before the dilation. This is the only method that can be parallelized by chunking (seedivs
andcores
).
divs (int or array_like) – The number of times to divide the image for parallel processing. If
1
then parallel processing does not occur.2
is equivalent to[2, 2, 2]
for a 3D image. The number of cores used is specified inporespy.settings.ncores
and defaults to all cores.
- Returns:
image – A copy of
im
with voxel values indicating the sphere radius at which it becomes accessible from theinlets
. This image can be used to find invading fluid configurations as a function of applied capillary pressure by applying a boolean comparison:inv_phase = im > r
wherer
is the radius (in voxels) of the invading sphere. Of course,r
can be converted to capillary pressure using a preferred model.- Return type:
ndarray
Notes
There are many ways to perform this filter, and PoreSpy offers 3, which users can choose between via the
mode
argument. These methods all work in a similar way by finding which foreground voxels can accomodate a sphere of a given radius, then repeating for smaller radii.See also
Examples
Click here to view online example.