图像处理工具 - CFAImage

分块、二值化、掩码生成和基于多重分形的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)

重要说明

  1. corp_type=-1(裁剪)最常用;corp_type=1(填充)保留所有像素
  2. ROI:大正q值选择高强度/密集区域;大负q值选择稀疏区域
  3. 块坐标:raw_blocks[y, x, ...]对应像素[y*bh:(y+1)*bh, x*bw:(x+1)*bw]