prune_branches#

Removes dangling branches from a skeleton.

import numpy as np
import porespy as ps
import scipy.ndimage as spim
import matplotlib.pyplot as plt
from skimage.morphology import skeletonize_3d
ps.visualization.set_mpl_style()
[17:44:18] ERROR    PARDISO solver not installed, run `pip install pypardiso`. Otherwise,          _workspace.py:56
                    simulations will be slow. Apple M chips not supported.                                         

im#

The function requires a skeleton such as that produced by skimage.mophology.skeletonize_3d:

im = ps.generators.blobs(shape=[250, 250], blobiness=1, porosity=0.6)
sk = skeletonize_3d(im)
sk1 = ps.filters.prune_branches(sk)

fig, ax = plt.subplots(1, 2, figsize=[12, 6])
ax[0].imshow(sk/im, interpolation='none', origin='lower')
ax[0].axis(False)
ax[1].imshow(sk1/im, interpolation='none', origin='lower')
ax[1].axis(False);
../../../_images/92d3fe362c23edb55ba16aa596d7c7cca7af6927c90a2051c1b29ee0636a7ec5.png

iterations#

How many times to repeat the process. This is equivalen to just calling the function multiple times with the returned image, but is more convenient.

sk1 = ps.filters.prune_branches(sk, iterations=1)
sk2 = ps.filters.prune_branches(sk, iterations=2)
sk3 = ps.filters.prune_branches(sk, iterations=3)

fig, ax = plt.subplots(1, 3, figsize=[15, 5])
ax[0].imshow(sk1/im, interpolation='none', origin='lower')
ax[0].axis(False)
ax[1].imshow(sk2/im, interpolation='none', origin='lower')
ax[1].axis(False)
ax[2].imshow(sk3/im, interpolation='none', origin='lower')
ax[2].axis(False);
../../../_images/dd12b9dd6e0404990627c74f47f5828a390e3a8cba5fbbcbf2af9d055c17b89d.png