nphase_border#

Computes the number of phases that border on each pixel.

import matplotlib.pyplot as plt
import numpy as np
import porespy as ps
ps.visualization.set_mpl_style()
[03:25:47] ERROR    PARDISO solver not installed, run `pip install pypardiso`. Otherwise,          _workspace.py:56
                    simulations will be slow. Apple M chips not supported.                                         

The arguments and their defaults are:

import inspect
inspect.signature(ps.filters.nphase_border)
<Signature (im, include_diagonals=False)>

im#

This function works on both 2D and 3D images. If an im

matrix = ps.generators.blobs([200, 200])
inclusions = ps.generators.rsa(~matrix, r=5, return_spheres=True, clearance=3)
bd = ps.filters.nphase_border(matrix*1.0 + inclusions*1.0)

fig, ax = plt.subplots(1, 2, figsize=[12, 6])
ax[0].imshow(matrix*1.0 + inclusions*1.0, origin='lower', interpolation='none')
ax[0].axis(False)
ax[1].imshow(bd, origin='lower', interpolation='none')
ax[1].axis(False);
/tmp/ipykernel_2978/2381005276.py:2: DeprecationWarning: Call to deprecated function (or staticmethod) rsa. (This function will be renamed random_spheres in a future version)
  inclusions = ps.generators.rsa(~matrix, r=5, return_spheres=True, clearance=3)
../../../_images/b6a65689ac93b229b3e40cfa91d07926d0ca933fe59d9b218f9b4469a4d2517f.png
np.unique(bd)
array([1., 2., 3.])

The unique values in bd are 1, 2 and 3 indicating that some pixels border on 1 phase (internal pixels), 2 phases (edges) or 3 phases (corners where void, matrix and inclusion meet). Including diagonals results in a thicker border since more voxels are found that lie on an edge.

include_diagonals#

Controls that neighbor of the search.

bd1 = ps.filters.nphase_border(matrix*1.0 + inclusions*1.0, include_diagonals=False)
bd2 = ps.filters.nphase_border(matrix*1.0 + inclusions*1.0, include_diagonals=True)

fig, ax = plt.subplots(1, 2, figsize=[12, 6])
ax[0].imshow(bd1, origin='lower', interpolation='none')
ax[0].axis(False)
ax[1].imshow(bd2, origin='lower', interpolation='none')
ax[1].axis(False);
../../../_images/caf227b22428359cb2057824df64922277f82abb1c96e20a8aa15c5bdf271362.png