You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

分形盒计数函数异常:Python实现中各网格尺寸下N恒为1的问题排查

盒计数法代码修复方案

原代码的核心问题:

  • 提前返回导致计数中断:count函数中,找到第一个包含目标像素(值为0)的盒子后立刻return N,直接终止了后续的计数循环,所以所有尺寸对应的N都只能是1。
  • 切片范围错误:img_matrix[i:step,j:step]的写法错误,应该取当前盒子的区域image[i:i+size, j:j+size],否则每次都只检查从0到size的左上角区域。
  • 变量不统一+未定义问题:函数参数是image,内部却用了未传入的img_matrix;Lx和Ly没有定义,需要从输入图像的尺寸获取。
  • 无效的盒子尺寸:size=np.arange(0,10,1)包含了0,步长为0会引发循环错误,盒子尺寸应从1开始。

修正后的代码:

import numpy as np

def count(image, size):
    N = 0
    Lx, Ly = image.shape[:2]  # 从输入图像获取尺寸
    step = size
    # 遍历所有盒子的左上角坐标
    for i in range(0, Lx, step):
        for j in range(0, Ly, step):
            # 确保切片不超出图像边界(处理图像尺寸不能被size整除的情况)
            box = image[i:i+step, j:j+step]
            if (box == 0).any():  # 检查当前盒子是否包含目标像素
                N += 1
    return N  # 遍历完所有盒子后再返回总数

# 生成测试图像(示例,替换为你的实际图像矩阵)
img = np.random.randint(0, 2, size=(50, 50))

# 盒子尺寸从1到9,步长1
sizes = np.arange(1, 10, 1)
Ns = []
for s in sizes:
    current_N = count(img, s)
    Ns.append(current_N)

print(Ns)

额外说明:

  • 加入了边界处理:当图像尺寸不能被盒子尺寸整除时,最后一行/列的盒子会自动取到图像边缘,避免索引越界。
  • 替换了测试图像,你需要把img换成自己的实际图像矩阵。
  • 现在Ns会正确记录每个盒子尺寸对应的非空盒子数量,后续可以通过log(Ns)和log(1/sizes)做线性拟合得到分形维度。

内容的提问来源于stack exchange,提问作者meak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 20:13:16