Fractal Dimension Analysis - CFAImageFD

BC, DBC, and SDBC fractal dimension calculation for 2D images

Application Scenarios

Usage Examples

Basic Usage

import cv2 from FreeAeonFractal.FAImageFD import CFAImageFD from FreeAeonFractal.FAImage import CFAImage # Read image rgb_image = cv2.imread('./images/fractal.png') gray_image = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2GRAY) # For BC method, need binary image bin_image, threshold = CFAImage.otsu_binarize(gray_image) # Calculate three fractal dimensions fd_bc = CFAImageFD(bin_image).get_bc_fd(corp_type=-1) fd_dbc = CFAImageFD(gray_image).get_dbc_fd(corp_type=-1) fd_sdbc = CFAImageFD(gray_image).get_sdbc_fd(corp_type=-1) print("BC Fractal Dimension:", fd_bc['fd']) print("DBC Fractal Dimension:", fd_dbc['fd']) print("SDBC Fractal Dimension:", fd_sdbc['fd']) # Visualize results (raw_img, gray_img, bin_img, fd_bc, fd_dbc, fd_sdbc) CFAImageFD.plot(rgb_image, gray_image, bin_image, fd_bc, fd_dbc, fd_sdbc)

GPU Accelerated Version

from FreeAeonFractal.FAImageFDGPU import CFAImageFDGPU fd_bc = CFAImageFDGPU(bin_image, device='cuda').get_bc_fd() fd_dbc = CFAImageFDGPU(gray_image, device='cuda').get_dbc_fd() fd_sdbc = CFAImageFDGPU(gray_image, device='cuda').get_sdbc_fd() # Note: p_value is None in GPU version

Batch Processing

import cv2, glob from FreeAeonFractal.FAImageFD import CFAImageFD images = [cv2.imread(f, cv2.IMREAD_GRAYSCALE) for f in glob.glob('./images/*.png')] results_bc = CFAImageFD.get_batch_bc(images) results_dbc = CFAImageFD.get_batch_dbc(images) results_sdbc = CFAImageFD.get_batch_sdbc(images) for r in results_bc: print("BC FD:", r['fd'])

Restrict Fit Range

# Only use middle scales for fitting (avoids sigmoid tails) fd_bc = CFAImageFD(bin_image, max_scales=30).get_bc_fd(fit_range=(4, 64))

Class Description

CFAImageFD

Description: Calculates 2D image fractal dimensions using Box-Counting (BC), Differential Box-Counting (DBC), and Shifted DBC (SDBC).

Initialization Parameters

ParameterTypeDefaultDescription
imagenumpy.ndarrayRequiredInput 2D single-channel array
max_sizeintNoneMaximum box size (default: min image dimension)
max_scalesint30Target number of distinct scales
with_progressboolTrueShow progress bar
min_sizeint2Minimum box size

get_bc_fd(corp_type=-1, fit_range=None)

Box-Counting on binary image. Any positive pixel = occupied.

corp_type: -1 crop (default), 0 strict, 1 pad

fit_range: Optional (min_scale, max_scale) to restrict regression to power-law regime

Returns dict: fd, scales, counts, log_scales, log_counts, intercept, r_value, p_value, std_err

get_dbc_fd(corp_type=-1, fit_range=None)

Differential Box-Counting (Sarkar & Chaudhuri 1994). Formula: n_r = ceil(I_max/h) - ceil(I_min/h) + 1 where h = s × H / G_max. For grayscale images.

get_sdbc_fd(corp_type=-1, fit_range=None)

Shifted DBC (Chen et al. 1995). Formula: n_r = floor((I_max - I_min)/h) + 1. Avoids boundary-crossing overcount of plain DBC.

get_fd(scale_list, box_count_list)

Utility: log-log linear regression on custom scale/count data. Returns same dict as get_bc_fd.

plot(raw_img, gray_img, bin_img, fd_bc, fd_dbc, fd_sdbc) [static]

2×3 subplot visualization: raw image, gray image, binary image, BC fit, DBC fit, SDBC fit.

get_batch_bc / get_batch_dbc / get_batch_sdbc [static]

Batch processing. Scale generation is shared across images. Parameters: images, max_size, max_scales, min_size, corp_type, fit_range, with_progress. Returns list of dicts.

Algorithm Description

BC Method

D = lim(ε→0) log(N(ε)) / log(1/ε)

DBC Method

h = s × H / G_max n_r(i,j) = ceil(I_max / h) - ceil(I_min / h) + 1 (Sarkar & Chaudhuri 1994)

SDBC Method

n_r(i,j) = floor((I_max - I_min) / h) + 1 (Chen et al. 1995)

Scale Generation

Geometrically spaced in [min_size, max_size]. Generates floats, rounds, deduplicates, and sorts — ensuring the requested count of distinct integer scales.

Log-Log Regression

Scales with N=0 are dropped (not replaced with epsilon). Use fit_range to restrict to the power-law regime.

Important Notes

  1. Image Preprocessing: BC requires binary image; DBC/SDBC accept grayscale directly
  2. Scale Selection: max_scales=30 is good default; use fit_range to exclude unreliable extremes
  3. Result Interpretation: Dimension typically 1–2 for 2D images; r_value close to ±1 means good power-law fit
  4. Performance: Use CFAImageFDGPU for large images or batch; set with_progress=False to suppress tqdm

References