基于MATLAB的图形与图像盒维数计算工具
项目简介
本项目是一个基于MATLAB开发的分形分析工具,旨在利用
盒计数法(Box-Counting Method)原理,计算二维图形或数字图像的分形维数。该工具不仅能够处理外部导入的二值或灰度图像,还内置了标准分形几何图形(谢尔宾斯基地毯)的生成算法,用于验证算法的准确性。通过量化不规则几何体的空间填充特性,该工具可应用于纹理分类、材料表面粗糙度分析及生物医学图像处理等领域。
核心功能特性
- 双模式运行机制:支持“内置演示模式”与“外部文件模式”的灵活切换。
*
演示模式:自动生成不同递归深度的谢尔宾斯基地毯(Sierpinski Carpet),并计算其理论维数与实际计算值的误差。
*
文件模式:支持读取
.bmp、
.jpg等常见格式图像,具备自动灰度转换与错误处理功能。
- 自动化图像预处理:集成Otsu算法(最大类间方差法)自动计算阈值,将输入图像转换为适合分析的二值图像。
- 高效盒计数算法:摒弃低效的逐像素循环,采用MATLAB矩阵向量化操作(Reshape与Sum策略)快速统计网格覆盖数,显著提升计算性能。
- 数据拟合与可视化:
* 利用最小二乘法进行双对数坐标下的线性回归分析。
* 自动计算拟合优度(R-squared)以评估分形特征的显著性。
* 提供可视化界面,同步显示二值化处理结果与双对数拟合曲线。
系统要求
- 软件环境:MATLAB 任意标准版本(推荐 R2016b 及以上以获得最佳的图形显示效果)。
- 工具箱:需安装 Image Processing Toolbox(图像处理工具箱),用于支持
imread, rgb2gray, graythresh, imbinarize 等函数。
使用方法
- 环境准备:将项目源码保存至MATLAB的工作路径中。
- 参数配置:
打开主程序文件,根据需求修改代码顶部的配置部分:
* 设置
mode = 1:启用内置谢尔宾斯基地毯生成模式。
* 设置
mode = 2:启用外部图像读取模式。
* 若选择模式2,需将
img_filename 变量修改为待分析图像的实际文件名(需包含后缀,且文件应位于当前路径下)。
- 运行程序:
直接运行主函数。程序将自动清理工作区,执行计算,并在控制台输出维数结果。
- 结果解读:
*
控制台输出:显示回归方程、计算出的盒维数 $D$、拟合优度 $R^2$。若为模式1,还会显示与理论值的相对误差。
*
图形窗口:左侧显示预处理后的二值图像,右侧显示 $log(N)$ 与 $log(r)$ 的线性拟合图表。
算法实现细节与逻辑分析
本项目的主程序严格按照盒计数法的数学定义实现,具体流程与代码逻辑如下:
1. 图像获取与生成
程序首先依据
mode 参数决定数据源:
- 递归生成算法:若选择内置模式,通过自定义的递归函数构建谢尔宾斯基地毯。该算法初始化一个全白矩阵,通过递归逻辑将每个区域划分为 $3 times 3$ 的网格,并将中心网格挖空(置为黑色/背景),模拟标准的分形构造过程。
- 外部读取与容错:若选择文件模式,程序尝试读取图像文件。若图像为彩色(RGB),则通过
rgb2gray 转换为灰度图;若读取失败,则会抛出错误提示用户检查路径。
2. 图像二值化预处理
为了准确统计几何体的覆盖情况,代码使用
graythresh 函数基于Otsu方法自动寻找最佳全局阈值,随后利用
imbinarize 将图像转化为二值矩阵(前景为1,背景为0)。这一步确保了无论输入图像亮度如何,算法都能基于统计学特征提取出主要纹理或结构。
3. 盒计数核心逻辑(向量化优化)
这是本项目的核心部分。代码并未简单地调用循环来统计盒子,而是实施了高效的矩阵操作:
- 网格序列定义:采用指数递增策略生成网格尺寸序列 $r$ ($1, 2, 4, 8, dots$),直到达到图像短边的一半。这种采样方式在双对数坐标下分布由密到疏,符合分形分析惯例。
- 图像裁剪:针对每个尺寸 $r$,先裁剪图像以确保其长宽能被 $r$ 整除,消除边缘不完整网格带来的统计误差。
- 矩阵重塑(Reshape)加速统计:
代码通过两次
reshape 和
sum 操作,将 $r times r$ 的网格块聚合。
1. 先将图像重排,对列方向进行压缩求和。
2. 再对行方向进行重排和求和。
3. 最后统计非零块的数量。
这种方法避免了显式的四层循环(遍历每个网格尺寸及其内部的每个网格),极大地提高了大规模图像的计算速度。
4. 维数计算与线性回归
根据分形公式 $N(r) propto (1/r)^D$,转化为对数形式 $log(N(r)) = D cdot log(1/r) + C$:
- 数据清洗:自动过滤掉计数为0的无效数据点(防止
log(0) 错误)。 - 对数变换:分别计算网格尺寸的对数 $log(r)$ 和盒计数的对数 $log(N)$。
- 最小二乘拟合:利用
polyfit 函数对数据点进行一阶线性拟合。根据公式推导,拟合直线的斜率对应 $-D$,因此程序取斜率的相反数作为最终的盒维数 output_D。
5. 结果验证与可视化
- 程序计算并输出决定系数 $R^2$,用于衡量线性关系的强弱,值越接近1表示分形特征越显著。
- 对于谢尔宾斯基地毯模式,程序内置了理论维数公式 $frac{ln(8)}{ln(3)} approx 1.8928$,并自动计算算法结果与理论值的相对误差,以便用户评估算法精度。