基于区域分裂与合并算法的图像分割系统
项目介绍
本项目是一个基于 MATLAB 开发的非监督图像分割系统,采用经典的区域分裂与合并(Region Splitting and Merging)策略。该系统通过四叉树分解技术对图像进行多尺度划分,并结合区域间的相似性准则进行智能化合并,旨在从复杂背景中精确提取目标目标。系统适用于医学影像分析、遥感地物提取及工业视觉检测等多种应用场景,能够在无需人工标注的前提下实现自动化区域划分。
功能特性
- 交互式图像加载:支持通过图形界面读取多种主流格式的图像文件,并具备示例图片自动加载功能。
- 鲁棒的预处理:内置中值滤波模块,有效消除图像中的椒盐噪声,为后续分割提供平滑的像素基础。
- 递归四叉树分裂:基于图像局部均匀性度量,动态调整分割粒度,实现从宏观到微观的块划分。
- 智能区域合并:利用并查集算法和灰度统计特性,自动融合相邻的相似区域,解决过度分割问题。
- 形态学精修:通过形态学闭运算和开运算,平滑区域边缘并消除细小碎块。
- 多维度结果可视化:提供原始图像、分裂网格、颜色标签、边界覆盖、二值掩模及统计报告的一体化展示。
使用方法
- 环境配置:确保计算机已安装 MATLAB 软件及 Image Processing Toolbox(图像处理工具箱)。
- 运行程序:在 MATLAB 命令行窗口运行主脚本。
- 选择图像:在弹出的文件对话框中选择待处理的图像文件。若取消选择,系统将默认处理内置的硬币图像(coins.png)。
- 参数调整:根据实际图像需求,可在源代码中修改分裂阈值(split_threshold)或合并阈值(merge_thresh)以获得最佳效果。
- 查看结果:程序运行结束后将自动弹出可视化窗口,展示分割的全过程图示及各区域的面积、均值等统计数据。
系统要求
- 软件平台:MATLAB R2016b 或更高版本。
- 依赖工具箱:Image Processing Toolbox。
- 硬件要求:标准 PC 配置,建议内存 8GB 以上以处理高分辨率图像。
逻辑实现说明
主程序严格遵循图像分割的核心 pipeline,具体逻辑步骤如下:
- 图像获取与格式转换:程序首先执行文件读取,将输入的 RGB 彩色图像转换为灰度图像,作为算法处理的基础。
- 降噪预处理:应用 3x3 模板的中值滤波(medfilt2),在保留边缘的同时降低随机噪声对均匀性判别的影响。
- 四叉树分裂(Splitting):
- 维度适配:将图像填充(padding)至 2 的幂次尺寸,以满足四叉树分解的几何要求。
- 递归分解:利用 qtdecomp 函数配合自定义判别函数。判别准则为:计算每个块的归一化标准差,若标准差超过 0.15,则认为该块非均匀,继续等分为四个子块,直到块尺寸达到最小设定的 2x2 或满足均匀性。
- 区域合并(Merging):
- 标签初始化:遍历分裂后的所有块,为每一个独立的子块分配唯一的标签 ID。
- 相似度检查:计算各标签区域的平均灰度级。
- 并查集合并:程序通过遍历像素邻域(右侧与下方邻居),对比相邻块的均值差异。若均值差小于 15,则视为同一物体,利用并查集(Union-Find)逻辑将这些区域的标签进行根节点合并。
- 后处理阶段:针对合并后的结果生成二值掩模,利用 2 像素半径的磁盘形结构元素执行先开后闭的形态学操作,以优化最终的分割形状。
- 统计分析:对最终生成的每一个独立区域进行遍历,计算其像素面积(Area)和平均灰度值(Mean Gray)。
关键函数与算法细节分析
- 均匀性判别函数 (qt_split_test):该函数是分裂阶段的核心,通过将块内像素标准差除以 255 进行归一化,与预设阈值对比。这确保了算法对光照强度具有一定的鲁棒性。
- 区域合并逻辑 (perform_merging):该算法突破了简单的层级合并,采用了基于扫描线的邻域检查机制。它不仅考虑了四叉树产生的父子关系,还考虑了物理空间上的相邻关系。
- 并查集查找 (find_root):在合并过程中,使用并查集数据结构来维护区域的隶属关系。通过路径追踪确保多个被判定为相似的块能最终归属到一个共同的父标签下,大幅提高了合并效率。
- 块信息提取 (get_block_info):该函数用于解析四叉树稀疏矩阵 S,识别出所有不同层级的块尺寸,为标签图像的生成提供参数。
- 可视化引擎 (visualize_results):通过 subplot 布局,将算法的中间态(分裂网格)与最终态(边界识别)并列展示,并实时生成文本格式的统计报告,增强了系统的可解释性。