基于MATLAB的盒子计数法分形维数计算工具
项目简介
本项目是一个基于MATLAB平台开发的专业计算工具,专用于利用经典的盒子计数法(Box-counting Algorithm)求解二维图像或几何结构的分形维数(Minkowski–Bouligand维数)。程序实现了从图像预处理、多尺度网格扫描、数据统计到数值拟合及可视化的完整流程。该代码结构清晰,算法严谨,特别适用于纹理分析、材料科学中的多孔介质研究、医学影像特征提取以及地理形态学分析。
功能特性
- 灵活的数据源支持:程序内置了合成数据生成器,可直接生成标准的谢尔宾斯基地毯(Sierpinski Carpet)进行算法验证;同时也支持读取外部图像文件,并自动进行灰度转换与二值化处理。
- 鲁棒的预处理机制:针对外部图像,采用Otsu算法(最大类间方差法)自动确定阈值进行二值化,确保前景特征提取的客观性。
- 高效的盒子扫描算法:利用MATLAB矩阵操作特性,采用非重叠块处理方式,高效计算不同尺度下的非空网格数量。
- 对数尺度采样:在网格尺寸的选择上采用了对数分布采样,确保在双对数坐标系下数据点分布均匀,提高拟合精度。
- 可视化分析:提供丰富的数据展示,包括二值化图像显示、带有统计方程的双对数回归拟合图(Log-Log Plot)以及网格覆盖示意图。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
* 需要使用
imbinarize,
graythresh,
im2col,
rgb2gray 等函数。
使用方法
- 启动程序:在MATLAB环境中直接运行主程序即可开始计算。
- 模式切换:
* 默认模式下,变量
use_synthetic_data 被设置为
true,程序将自动生成5阶谢尔宾斯基地毯进行演示。
* 若需分析自定义图像,请在代码中将
use_synthetic_data 修改为
false,并更改
fileName 变量指向目标图像路径。
- 结果解读:程序运行结束后,控制台将输出估算的分形维数(D),同时弹出窗口展示拟合曲线和原始图像处理结果。
核心算法与实现逻辑分析
本项目的主程序通过以下四个关键步骤实现分形维数的精确计算:
1. 数据获取与预处理
程序首先清空工作区以确保环境纯净。紧接着根据用户配置选择数据源:
- 合成数据生成:调用内部算法递归生成谢尔宾斯基地毯。该算法从一个实心矩形开始,通过迭代将中心区域镂空(3x3模式中的中间块置0),生成具有理论分形特征的逻辑矩阵。
- 外部图像处理:读取图像文件后,逻辑自动判断是否需要进行RGB转灰度处理。随后使用
graythresh 计算全局阈值,并调用 imbinarize 将图像转换为逻辑矩阵(二值图像),确保背景为0,前景结构为1。
2. 盒子计数扫描(Core Algorithm)
这是本项目的核心计算模块。
- 尺寸序列生成:程序根据图像的最小边长,利用
logspace 函数生成一系列呈对数分布的盒子尺寸(Box Sizes)。这一设计避免了线性采样在小尺度下过于密集而大尺度下稀疏的问题。 - 网格分割与统计:对于每一个选定的盒子尺寸 $r$:
* 程序首先对图像边缘进行裁剪,使其尺寸能够被 $r$ 整除,消除边界效应。
* 利用
im2col 函数配合
'distinct' 参数,极其高效地将图像分割为互不重叠的 $r times r$ 像素块,将每个块展平为列向量。
* 通过逻辑运算
any 快速判断每一个块中是否包含前景像素(即是否非空)。
* 最终求和得到该尺度下的非空盒子总数 $N(r)$。
3. 数值回归分析
根据分形几何理论,分形维数 $D$ 满足关系 $N(r) propto (1/r)^D$。程序对统计数据进行线性化处理:
- 计算 $x = log(1/r)$ 和 $y = log(N(r))$。
- 使用最小二乘法函数
polyfit 对 $(x, y)$ 数据点进行一阶线性拟合。 - 拟合直线的斜率即为估算出的分形维数 $D$。
4. 结果可视化
程序利用
subplot 构建复合图形窗口:
- 二值化概览:展示经过预处理后的输入图像。
- 网格示意:在原图上叠加绘制青色半透明网格线,直观展示特定尺度下“盒子”是如何覆盖图像的。
- 双对数回归图:绘制 $log(1/r)$ 与 $log(N)$ 的散点图及拟合直线。图表中自动标注了拟合得到的回归方程,便于用户评估线性拟合的优度(线性度越好,分形特征越显著)。
辅助函数说明
程序末尾包含一个名为 generateSierpinskiCarpet 的特定功能函数。该函数接收迭代次数 $n$ 作为输入,通过递归方式构建矩阵。在每次迭代中,它将当前的图形矩阵复制填充到3x3网格的边缘8个位置,而中心位置填充全零矩阵,从而模拟标准的谢尔宾斯基地毯分形结构。这为算法的准确性验证提供了标准的理论数据。