分形维度分析 - CFAImageFD

BC、DBC、SDBC三种方法计算2D图像分形维度

应用场景

使用示例

基础用法

import cv2 from FreeAeonFractal.FAImageFD import CFAImageFD from FreeAeonFractal.FAImage import CFAImage rgb_image = cv2.imread('./images/fractal.png') gray_image = cv2.cvtColor(rgb_image, cv2.COLOR_BGR2GRAY) bin_image, threshold = CFAImage.otsu_binarize(gray_image) 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 分形维度:", fd_bc['fd']) print("DBC 分形维度:", fd_dbc['fd']) print("SDBC 分形维度:", fd_sdbc['fd']) CFAImageFD.plot(rgb_image, gray_image, bin_image, fd_bc, fd_dbc, fd_sdbc)

GPU加速版本

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() # 注意:GPU版本 p_value 为 None

批量处理

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'])

类说明

CFAImageFD

初始化参数

参数类型默认值说明
imagenumpy.ndarray必填输入2D单通道数组
max_sizeintNone最大盒子尺寸(默认为图像最小维度)
max_scalesint30目标不同尺度数量
with_progressboolTrue是否显示进度条
min_sizeint2最小盒子尺寸

get_bc_fd(corp_type=-1, fit_range=None)

盒计数法(BC),适用于二值图像。返回 dict:fd, scales, counts, log_scales, log_counts, intercept, r_value, p_value, std_err

get_dbc_fd(corp_type=-1, fit_range=None)

差分盒计数法(DBC,Sarkar & Chaudhuri 1994)。公式:n_r = ceil(I_max/h) - ceil(I_min/h) + 1。适用于灰度图像。

get_sdbc_fd(corp_type=-1, fit_range=None)

移位差分盒计数法(SDBC,Chen et al. 1995)。公式:n_r = floor((I_max - I_min)/h) + 1。小尺度精度更高。

get_fd(scale_list, box_count_list)

对自定义尺度和计数数据进行对数-对数线性回归。

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

2×3子图可视化:原始图像、灰度图、二值图,以及三种方法的拟合结果。

get_batch_bc / get_batch_dbc / get_batch_sdbc [静态]

批量处理,共享尺度生成。返回结果字典列表。

算法说明

BC法

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

DBC法

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

SDBC法

n_r(i,j) = floor((I_max - I_min) / h) + 1

重要说明

  1. BC需要二值图像;DBC/SDBC直接接受灰度图像
  2. fit_range 可限制拟合范围,排除不可靠的极端尺度
  3. 2D图像分形维度通常在1-2之间;r_value 接近1表示良好的幂律拟合
  4. 批量处理或大图像时使用 CFAImageFDGPU

参考文献