项目:基于二维属性直方图的Otsu自动阈值分割系统
项目简介
本项目实现了一种改进的高级图像分割算法,旨在解决传统一维Otsu算法在低对比度或高噪声环境下分割效果不佳的问题。核心技术在于构建“二维属性直方图”,利用像素的灰度值与其邻域平均灰度值的联合分布统计,引入空间相关性信息。
系统通过构建二维直方图并应用快速二维Otsu算法(基于积分图加速),在二维平面上寻找最佳阈值向量(灰度阈值,邻域均值阈值),从而实现对噪声图像的高精度分割。本项目基于MATLAB开发,包含完整的图像处理、算法求解及多维度可视化评估流程。
功能特性
- 抗噪鲁棒性:通过引入$3 times 3$邻域均值信息,有效抑制高斯噪声对分割结果的干扰。
- 二维属性统计:构建并可视化像素灰度与空间邻域信息的二维联合概率矩阵(二维直方图)。
- 快速算法实现:采用积分图(Integral Image)与查找表技术,将二维Otsu算法的寻优效率大幅提升,避免了繁重的重复计算。
- 自适应输入:支持自动读取外部图像或生成包含几何形状(圆、矩形)与梯度的合成测试图像。
- 全方位可视化:提供包含原图、一维直方图对比、3D二维直方图、平面投影轨迹图、分割结果及图层融合的综合展示界面。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 工具箱依赖:Image Processing Toolbox(图像处理工具箱),用于图像滤波、噪声添加及直方图计算等常规操作。
详细功能与算法实现逻辑
本项目的代码逻辑严密,主要流程如下:
1. 图像获取与预处理
- 智能加载:程序优先尝试读取系统内置的
cameraman.tif 图像;若文件不存在,则自动调用内部函数生成一张包含背景梯度、圆形和矩形目标的合成图像用于测试。 - 预处理:将图像转换为灰度图(如为彩色),并将数据类型转换为
double以保证计算精度。 - 噪声模拟:为了验证算法的有效性,代码主动向图像中添加均值为0、方差为0.01的高斯噪声,模拟真实的恶劣成像环境。
2. 构建二维属性直方图
- 空间特征提取:使用 $3 times 3$ 的平均滤波器对噪声图像进行卷积,计算每个像素的邻域平均灰度。
- 二维统计:遍历图像中的每一个像素,以
(像素灰度值 i, 邻域均值 j) 为坐标,统计其出现的频数。最终生成一个 $256 times 256$ 的二维直方图矩阵,并进行归一化处理得到联合概率分布 $P(i, j)$。
3. 二维Otsu阈值快速寻优
算法核心在于寻找最佳阈值向量 $(s, t)$,使得前景(目标)与背景在二维空间上的类间方差最大。为了解决传统二维Otsu算法计算量大的问题,代码实现了基于积分图的加速策略:
- 积分图计算:预先计算二维直方图的零阶累积矩(概率和)和一阶累积矩(灰度均值累积、邻域均值累积)。利用
cumsum 函数,将区域求和操作的时间复杂度降至 $O(1)$。 - 快速迭代:在 $0-255$ 的二维平面内遍历所有可能的阈值组合 $(s, t)$。
- 准则函数:对于每一组阈值,利用积分图快速计算前景类的概率 $omega_0$ 及其均值向量 $mu_0$,以及背景类的概率 $omega_1$ 和均值向量 $mu_1$。
- 最大化类间方差:计算类间离散度矩阵的迹(Trace),即 $sigma_b = omega_0 times omega_1 times |mu_0 - mu_1|^2$。记录使 $sigma_b$ 达到最大值的 $(s, t)$ 作为最佳分割阈值。
4. 图像分割与二值化
- 双重判决:利用计算出的最佳灰度阈值 $s_{opt}$ 和最佳邻域阈值 $t_{opt}$ 执行联合分割。
- 分割策略:仅当像素点的灰度值大于 $s_{opt}$ 且 其邻域均值大于 $t_{opt}$ 时,该像素才被判定为前景(白色),否则为背景。这种策略比单独使用灰度阈值更能抵抗噪点干扰。
5. 结果可视化与评估
系统最后通过一个包含6个子图的窗口展示完整流程:
- 输入图像:显示添加了高斯噪声的灰度图像。
- 传统一维直方图:显示常规灰度直方图及对应的灰度阈值线,用于对比。
- 二维属性直方图 (3D):以三维网格图(Mesh)形式展示 $(i, j)$ 的联合分布,并用红色星号标记优化出的最佳阈值点。
- 2D Otsu 投影分割图:以平面视图显示二维直方图(对数增强显示),绘制出最佳阈值分割线(十字交叉),直观展示分割界面。
- 二维Otsu分割结果:展示最终的二值化图像,并在标题中标注了算法的计算耗时。
- 分割掩膜融合显示:将分割结果半透明叠加在原图上,方便用户肉眼验证边缘分割的准确性。
使用方法
- 确保MATLAB已安装并包含图像处理工具箱。
- 将代码保存为脚本文件(通常包含主函数和若干局部函数)。
- 直接运行主函数。
- 程序将自动执行图像读取、加噪、计算和绘图,并在命令窗口输出以下信息:
* 最佳灰度阈值 (s)
* 最佳邻域阈值 (t)
* 算法核心计算耗时 (秒)
- 观察弹出的可视化窗口以分析算法性能。