find_peaks#

Finds local peaks in the distance transform. This is need for watershed segmentations.

[1]:
import numpy as np
import porespy as ps
import scipy.ndimage as spim
import matplotlib.pyplot as plt
from edt import edt
import inspect
np.random.seed(11)
ps.visualization.set_mpl_style()
inspect.signature(ps.filters.find_peaks)
[1]:
<Signature (dt, r_max=4, strel=None, sigma=None, divs=1)>

dt#

The distance transform must be provided

[2]:
im = ps.generators.blobs(shape=[100, 100], blobiness=0.5, porosity=0.7)
dt = edt(im)

fig, ax = plt.subplots(1, 2, figsize=[6, 3])

pk = ps.filters.find_peaks(dt=dt)
ax[0].imshow(dt/im)
ax[0].axis(False)

ax[1].imshow(dt/im/~pk)
ax[1].axis(False);
../../../_images/examples_filters_reference_find_peaks_3_0.svg

r_max#

The radius that should be searched for local maxima.

[3]:
fig, ax = plt.subplots(1, 2, figsize=[6, 3])

r_max = 3
pk = ps.filters.find_peaks(dt=dt, r_max=r_max)
ax[0].imshow(pk/im)
ax[0].axis(False)
ax[0].set_title(f'r_max = {r_max}')

r_max = 7
pk = ps.filters.find_peaks(dt=dt, r_max=r_max)
ax[1].imshow(pk/im)
ax[1].axis(False)
ax[1].set_title(f'r_max = {r_max}');
../../../_images/examples_filters_reference_find_peaks_5_0.svg

strel#

The structuring element to use, in the form of a function handle. The value of r_max is passed to this function, so note that the meaning for r differs depending on the strel used. The default is a disk/ball.

[4]:
im = ps.generators.blobs(shape=[100, 100], blobiness=0.5, porosity=0.7)
dt = edt(im)

from skimage.morphology import disk, square

fig, ax = plt.subplots(1, 2, figsize=[6, 3])

pk = ps.filters.find_peaks(dt=dt, strel=disk(3))
ax[0].imshow(pk/im)
ax[0].axis(False)
ax[0].set_title('disk')

pk = ps.filters.find_peaks(dt=dt, strel=square(5))
ax[1].imshow(pk/im)
ax[1].axis(False)
ax[1].set_title('square');
../../../_images/examples_filters_reference_find_peaks_7_0.svg