boxcount
#
A method for measuring the fractal dimension of an image
import matplotlib.pyplot as plt
import numpy as np
import porespy as ps
/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
The arguments and their defaults for this function are:
import inspect
inspect.signature(ps.metrics.boxcount)
<Signature (im, bins=10)>
im = ps.generators.sierpinski_foam(dmin=5, n=5, ndim=2)
fig, ax = plt.subplots(1, 1, figsize=[6, 6])
ax.imshow(im, interpolation='none', origin='lower')
ax.axis(False);

im
#
The image which is to be analzyed. Can be 2D or 3D.
b = ps.metrics.boxcount(im=im)
print(b)
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
Results of boxcount generated at Tue Jun 6 13:56:01 2023
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
size Array of size (10,)
count [6505, 4095, 1435, 552, 206, 77, 24, 9, 4, 1]
slope Array of size (10,)
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
The returned object is like a dataclass with each computed value stored in an attribute. The result can be printed for inspection. The results can also be plotted as follows:
fig, ax = plt.subplots(1, 2, figsize=[12, 6])
ax[0].loglog(b.size, b.count)
ax[0].set_xlabel('box length')
ax[0].set_ylabel('number of partially filled boxes')
ax[1].semilogx(b.size, b.slope)
ax[1].plot([0, 1000], [1.9, 1.9])
ax[1].set_xlabel('box length')
ax[1].set_ylabel('slope')
ax[1].set_ylim([0, 3]);

bins
#
The box sizes to use. The default is 10. If an integer is given it computes the range of box sizes. If an array is given, these are used directly
b = ps.metrics.boxcount(im=im, bins=20)
fig, ax = plt.subplots(1, 2, figsize=[12, 6])
ax[0].loglog(b.size, b.count)
ax[0].set_xlabel('box length')
ax[0].set_ylabel('number of partially filled boxes')
ax[1].semilogx(b.size, b.slope)
ax[1].plot([0, 1000], [1.9, 1.9])
ax[1].set_xlabel('box length')
ax[1].set_ylabel('slope')
ax[1].set_ylim([0, 3]);
