基于四叉树分解算法的RGB彩色图像分割系统
项目介绍
本项目实现了一个基于四叉树分解(Quadtree Decomposition)算法的彩色图像分割与分析系统。该系统通过递归方式将RGB图像划分为不同大小的同质区域。其核心思想是:根据预设的一致性准则判断图像块的颜色复杂度,如果某个块内的颜色波动超过阈值,则将其等分为四个子块;若满足一致性,则停止分裂。该方法能够根据图像内容的细节丰富程度自适应地调整分割密度,在保持边缘细节的同时,有效简化平滑区域。
功能特性
- 自动重采样与补齐:系统能够自动将输入图像调整为2的幂次方尺寸,以满足四叉树分解的几何要求。
- 演示模式:当输入路径下缺少目标图像时,系统会自动生成带有噪声的合成彩色图像用于演示算法效果。
- 自适应多尺度分割:支持设置最大块尺寸和最小块尺寸,能够在不同空间尺度上捕捉图像特征。
- 统计特征重构:计算每个独立块的红、绿、蓝三通道均值,并使用该均值重构图像,实现区域平滑化。
- 边界可视化:自动提取各分区块的轮廓并在原图上叠加白色边界线,直观展示四叉树划分的层次结构。
- 数据可视化统计:系统会自动统计不同尺度块的数量分布,并通过柱状图反馈区域分布的统计特性。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 必备工具箱:MATLAB 图像处理工具箱 (Image Processing Toolbox)。
- 硬件要求:常规运行内存,支持图形化输出。
实现逻辑说明
系统主程序执行流程严格遵循以下五个步骤:
- 参数预设:定义图像路径、颜色一致性阈值(通常设定在0-1之间)、以及块的尺寸限制范围(如4x4至64x64像素)。
- 图像预处理:
读取图像后,利用 nextpow2 函数计算适合四叉树处理的新尺寸,通过 imresize 将图像填充或调整为 2^n 的正方形。
将图像像素值从 uint8 转换为 double 类型(0-1 范围),以便进行高精度的方差和标准差计算。
- 四叉树递归分解:
调用 qtdecomp 函数执行核心分解逻辑。
判定准则:由自定义的判定逻辑控制。它接收当前图像块的灰度信息,计算块内的标准差。若标准差大于设定的阈值且块尺寸大于最小限制,则返回 true 要求继续分裂。
- 结果提取与代表色填充:
使用 qtgetblk 函数按尺寸从大到小遍历所有叶节点块。
针对每一个块,分别计算其在原始 RGB 空间中对应的三个通道的均值。
将这些均值赋给结果图像的对应区域,从而生成具有油画风格或马赛克风格的分割图。
同时通过索引定位,在边界图像中描绘每个块的四周边缘。
- 可视化呈现:
创建一个 2x2 的多图展示窗口。
左上展示原始输入图像。
右上展示基于均值填充的分割重构图像。
左下展示显示了网格划分结构的边界可视化图。
右下展示区域统计直方图,反映了图像中不同尺寸块的数量,帮助分析图像的纹理复杂度。
关键函数与算法细节
- 一致性判断准则:
算法通过 colorMetric 逻辑进行决策。虽然 qtdecomp 主要基于灰度输入,但本系统在判定时能够通过阈值控制颜色的“纯度”。核心指标是 std2 函数,它反映了像素值的离散程度。
- 稀疏矩阵表达:
四叉树的分解结果存储在一个稀疏矩阵 S 中。该矩阵的非零元素表示每个块的左上角坐标,而元素的值则代表了该块的边长。这种存储方式极大地节省了计算资源。
- 动态块统计:
系统通过自定义的 countInSparse 函数动态检索稀疏矩阵。通过查找特定数值的元素个数,实时掌握图像在不同分辨率下的细节分布情况(例如,较多的小尺寸块意味着该区域包含大量边缘或噪声)。
- 图像重建技术:
系统没有采用简单的像素替换,而是通过提取每个维度(dim)的所有块坐标,批量计算三维矩阵(vals)的统计平均值。这种矩阵化操作保证了在大尺寸图像处理时的执行效率。
使用方法
- 准备图像:将待处理的彩色图像放入项目根目录,并在程序顶部的 targetImage 变量中指定文件名。
- 调整参数:
修改 threshold 增大或减小分割灵敏度(阈值越小,分割越细密)。
调整 minBlockSize 以控制图像最细微的保留程度。
- 运行程序:在 MATLAB 命令行窗口运行主程序,系统将依次完成计算并弹出包含四个子图的可视化窗口。
- 查看输出:程序运行结束后,命令行窗口会输出生成的独立区域总数,用户可通过直方图观察图像的结构特征。