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()

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/99252ee9653609be1696d309acf75bf47c4dc5f8d9fde55aaed22bc5eca789ea.svg

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/49196972411d611b710e6820eee08261ad52a44703a48b1653c32d8ca96e04e9.svg