应用场景
- 预处理:分形分析前的二值化和裁剪
- 分块操作:将图像分割为盒子进行多重分形计算
- 掩码生成:基于块位置创建空间掩码
- ROI提取:基于多重分形度量的区域提取
- 数据增强:随机块采样用于深度学习
使用示例
Otsu二值化
import cv2
from FreeAeonFractal.FAImage import CFAImage
gray = cv2.imread('./images/face.png', cv2.IMREAD_GRAYSCALE)
bin_image, threshold = CFAImage.otsu_binarize(gray)
print(f"阈值: {threshold}")
图像分块和合并
import numpy as np
from FreeAeonFractal.FAImage import CFAImage
image = np.zeros((256, 256), dtype=np.uint8)
blocks, raw_blocks = CFAImage.get_boxes_from_image(image, block_size=(64, 64), corp_type=-1)
print("块数量:", blocks.shape[0]) # 16块(4×4网格)
merged = CFAImage.get_image_from_boxes(raw_blocks)
mask_pos = [(0,0), (1,1), (2,2)]
mask_image = CFAImage.get_mask_from_boxes(raw_blocks, mask_pos)
masked = (merged * mask_image).astype(np.uint8)
基于多重分形q值的ROI提取
image = cv2.imread('./images/face.png')
mask_union, masked_image = CFAImage.get_roi_by_q(
image=image,
q_range=(-5, 5),
step=1.0,
box_size=16,
target_mass=0.90,
combine_mode="or",
use_grayscale_measure=True
)
类说明(所有静态方法)
crop_data(data, block_size)
将H,W裁剪为block_size的整数倍。支持2D(H,W)和3D(H,W,C)。
pad_data(data, block_size, mode="constant", constant_values=0)
将H,W填充为block_size的整数倍。
otsu_binarize(img)
自动Otsu阈值化。彩色图像先转灰度;浮点图像自动缩放到[0,255]。返回 (bin_img, threshold)。
get_boxes_from_image(image, block_size, corp_type=-1)
分割为(bh,bw)块,通道维度保持不变。corp_type:-1裁剪,1填充,0严格。返回 (blocks_reshaped, raw_blocks)。
get_image_from_boxes(raw_blocks)
将raw_blocks合并回图像。
get_mask_from_boxes(raw_blocks, mask_block_pos)
构建float32掩码,mask_block_pos((y,x)块网格坐标列表)中的块置0,其余置1。
get_random_patches(image, num_patches=100, ratio=0.25)
采样不重复的随机块。ratio控制块尺寸(占图像维度的比例)。
get_roi_by_q(image, q_range, step, box_size, target_mass, combine_mode, ...)
多重分形重新加权ROI提取。对每个q:权重wᵢ ∝ μᵢ^q,选取累积权重≥target_mass的前几个块。返回 (mask_union, masked_image)。
重要说明
corp_type=-1(裁剪)最常用;corp_type=1(填充)保留所有像素- ROI:大正q值选择高强度/密集区域;大负q值选择稀疏区域
- 块坐标:
raw_blocks[y, x, ...]对应像素[y*bh:(y+1)*bh, x*bw:(x+1)*bw]