基于区域邻接图(RAG)的自适应区域合并算法库
项目简介
本项目实现了一套基于区域邻接图(Region Adjacency Graph, RAG)的图像区域合并算法库。该工具旨在作为图像分割后的处理步骤,通过分析区域间的颜色、纹理和空间关系,自动将过分割的图像(如超像素)合并为语义完整的区域。核心引擎采用迭代贪婪策略,支持动态更新图拓扑结构和区域属性,能够显著减少过分割现象,适用于医学影像分析、遥感图像处理及计算机视觉基础研究。
核心功能特性
- 自动化数据生成:内置合成图像生成器,能够创建包含颜色差异、纹理特征及噪声的测试图像,无需外部数据即可运行演示。
- 初始过分割处理:集成简单线性迭代聚类(SLIC)算法,基于紧凑度参数生成初始超像素,为RAG构建提供基础节点。
- 多维特征提取:
* 颜色特征:自动将图像从RGB空间转换为Lab颜色空间,计算区域平均颜色以符合人类视觉感知。
* 纹理特征:利用灰度图像的区域像素标准差作为纹理描述符。
* 几何特征:计算区域质心及像素面积大小。
- 高效RAG构建:利用稀疏矩阵存储邻接关系,通过向量化操作(矩阵移位比较)快速识别水平和垂直方向的相邻区域,构建无向图结构。
- 自适应迭代合并引擎:
* 采用贪婪算法策略,每次迭代优先合并代价最小的边。
* 支持RAG拓扑的动态维护,在节点合并后自动更新邻接关系和边权重,无需全局重建。
* 实现了区域属性的加权更新(颜色、纹理、大小),确保合并后的新区域特征准确。
- 可配置的合并代价模型:提供灵活的代价计算接口,综合加权了颜色欧氏距离、纹理差异以及基于区域尺寸的惩罚因子(优先合并小区域)。
系统要求
- MATLAB R2014b 或更高版本
- Image Processing Toolbox(图像处理工具箱)
使用方法
- 环境准备:确保MATLAB路径中包含本项目的所有函数文件。
- 运行主程序:直接执行主入口函数。程序将自动生成合成数据,执行从过分割到最终合并的全过程。
- 参数调整:在主函数的参数设置部分,可以修改以下关键参数以适应不同场景:
* 超像素数量:决定初始分割的精细程度。
* 紧凑度:控制初始超像素的形状规则程度。
* 合并阈值:决定迭代停止的条件,阈值越高合并越激进。
* 权重系数:分别控制颜色差异、纹理差异和区域大小在合并判别中的重要性。
算法实现细节
本项目的主要逻辑流程分为数据准备、图构建、迭代合并与结果重构四个阶段,具体实现逻辑如下:
1. 初始分割与图构建
- 超像素生成:利用SLIC算法对原始图像进行过分割,生成标签矩阵。为方便后续计算,标签即被视为RAG的初始节点索引。
- 节点特征计算:遍历每个标签区域,提取Lab颜色均值、灰度标准差(纹理)以及像素索引列表。
- 邻接与边构建:
* 不使用低效的双重循环,而是通过对标签矩阵进行“错位比较”(当前像素与右侧/下方像素对比),快速提取所有相邻节点对。
* 使用稀疏矩阵(Sparse Matrix)构建邻接矩阵,并确保其对称性,以此表示无向图的边。
2. 多维合并代价计算
合并代价函数 (
calculateCost) 定义了两个相邻区域是否相似。计算公式包含三个核心部分:
- 颜色距离:Lab空间下两个区域均值的欧氏距离。
- 纹理差异:两个区域灰度标准差的绝对差值。
- 尺寸因子:鼓励小区域优先合并。使用了两个区域大小最小值的平方根作为调节因子。
- 最终代价是颜色与纹理的加权和乘以尺寸因子的结果。
3. 动态迭代合并引擎
这是本项目的核心模块 (
performRegionMerging),其工作流程如下:
- 初始化:将稀疏矩阵中的所有边转换为边列表(Edge Table),并预计算所有边的初始代价。
- 贪婪迭代:
* 在循环中不断查找并选中代价最小且低于设定阈值的边。
*
节点融合:将两个节点(r1, r2)合并。新节点的属性(颜色、纹理)通过基于像素数量的加权平均计算得出,以保证统计特性的准确性。
*
映射更新:建立索引映射,记录被吞并的节点(r2)指向保留节点(r1)的关系。
*
局部拓扑更新:这是算法高效的关键。并不重建整个图,而是移除被吞并节点的相关边,将其邻居重新连接到保留节点上。
*
即时权重更新:对于新建立的连接,立即基于更新后的节点属性重新计算合并代价。
- 终止条件:当最小边的代价超过预设阈值,或图中不再存在有效边时,停止迭代。
4. 结果重构
合并过程完成后,算法通过路径压缩逻辑处理节点映射表,将所有初始标签映射到最终的区域ID。随后,根据映射关系重建最终的图像标签矩阵,完成从像素级数据到语义区域的转换。