snow_partitioning_n#

Similar to snow_partitioning except that it works on an image containing an arbitrary number of phases

Import packages#

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

im#

Generate a test 3 phase image by overlaying two 2 phase images. This works with 3D images as well.

im1 = ps.generators.blobs(shape=[200, 200], porosity=0.5, blobiness=0.75)
im2 = ps.generators.blobs(shape=[200, 200], porosity=0.5, blobiness=0.5)
im = im1.astype(int) + im2.astype(int)

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

Apply snow_partitioning_n filter#

The Results of the filter includes several images

snow = ps.filters.snow_partitioning_n(im)
print(snow)
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Results of snow_partitioning_n generated at Mon Feb  5 03:27:28 2024
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
im                        Array of size (200, 200)
dt                        Array of size (200, 200)
phase_max_label           [65, 102]
regions                   Array of size (200, 200)
peaks                     Array of size (200, 200)
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
fig, ax = plt.subplots(1, 2, figsize=[12, 12])
ax[0].imshow(snow.dt/im/~snow.peaks, origin='lower', interpolation='none')
ax[0].axis(False)
ax[1].imshow(snow.regions/im, origin='lower', interpolation='none')
ax[1].axis(False);
../../../_images/8888a89c4d3ed9fadcfc6a632a27926a0f3d0ba879d121061de9776613530ab9.png