trim_nearby_peaks#

trim_nearby_peaks function is a filter which finds nearby peaks in an image and removes the peak that is closer to the solid phase. This filter relies on the distance transform of an image.

import numpy as np
import porespy as ps
import scipy.ndimage as spim
import matplotlib.pyplot as plt
import skimage
from edt import edt
ps.visualization.set_mpl_style()
/opt/hostedtoolcache/Python/3.8.16/x64/lib/python3.8/site-packages/openpnm/algorithms/_invasion_percolation.py:358: NumbaDeprecationWarning: The 'nopython' keyword argument was not supplied to the 'numba.jit' decorator. The implicit default value for this argument is currently False, but it will be changed to True in Numba 0.59.0. See https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-object-mode-fall-back-behaviour-when-using-jit for details.
  def _find_trapped_pores(inv_seq, indices, indptr, outlets):  # pragma: no cover

dt#

The distance transform of a test image is determined using the edt method.

im = ps.generators.blobs(shape=[200, 200])
dt = edt(im)

plt.figure(figsize=[6, 6])
plt.imshow(dt/im)
plt.axis(False);
../../../_images/7c081209ad65e9e2a2436407c0493f6af9bff03e92453d052628b8288199fa96.png

peaks#

The peaks of the distance transform are found using the find_peaks filter and nearby peaks are removed.

peaks = ps.filters.find_peaks(dt, r_max=4)

x = ps.filters.trim_nearby_peaks(peaks=peaks, dt=dt)

fix, ax = plt.subplots(1, 2, figsize=[12, 12])
ax[0].axis(False)
ax[0].imshow(peaks/im)
ax[0].set_title('Before', fontdict={'fontsize': 18});
ax[1].axis(False)
ax[1].imshow(x/im);
ax[1].set_title('After', fontdict={'fontsize': 18});
../../../_images/8aa7303ef4305eff85a1ea4f4b7d04e6e5b83d272d0d55249c70c85d80756802.png