基于粒子群优化算法的图像自适应阈值分割系统
项目介绍
本项目是一个基于 MATLAB 环境开发的图像处理工具,采用启发式搜索算法——粒子群优化算法(PSO)与经典的大津法(Otsu's Method)相结合,实现了图像的最佳单阈值自动化寻找。该系统旨在克服传统穷举搜索在大规模灰度空间或未来扩展多级阈值时的计算压力,通过模拟群体智能行为,快速且准确地锁定使图像前景与背景类间方差最大化的分割点。
功能特性
- 自动预处理:系统支持彩色图像输入并自动转换为灰度图像,同时计算其灰度分布概率。
- 启发式搜索:利用粒子速度-位置更新机制,在 0-255 的灰度范围内进行高效全局搜索。
- 自适应阈值:基于图像自身的直方图特性,动态计算最佳分割值,无需人工干预。
- 鲁棒性约束:内置速度边界限制和位置边界控制,防止粒子在迭代过程中跳出合法灰度空间。
- 实时可视化:提供直观的运行结果,包括分割对比图、阈值线标记的直方图以及详细的收敛曲线。
- 兼容性强:代码逻辑原生实现,不依赖于特定的 MATLAB 附加工具箱(如 Image Processing Toolbox 的高级函数),利于底层算法学习。
系统要求
- 运行环境:MATLAB R2016a 及以上版本(较低版本可能需要微调)。
- 依赖库:基础 MATLAB 内置函数。
- 硬件建议:普通桌面 PC 即可,图像处理速度通常在秒级以内。
详细实现逻辑
算法的执行过程严格遵循以下逻辑步骤:
- 图像数据准备:
* 系统读取指定图像,若路径下无目标文件则调用内置测试图。
* 通过灰度化处理将图像像素信息降维,随后统计 256 个灰度级的出现频率,计算归一化的概率分布分布曲线。
- 粒子群参数初始化:
*
种群规模:设置 30 个独立粒子。
*
迭代限制:最大迭代次数设定为 100 次。
*
权重参数:惯性权重 w 为 0.8,个体学习因子 c1 与社会学习因子 c2 均设为 1.5。
*
动态控制:最大飞行速度限制为 10,搜索范围锁定在 [0, 255]。
- 核心搜索机制:
*
初始化阶段:在灰度范围内随机产生粒子的初始位置和初始速度,并计算各粒子的初始适应度。
*
迭代循环:在每一次迭代中,每个粒子根据其自身历史最优位置(pBest)以及群体历史最优位置(gBest)来调整自己的速度向量。
*
位置修正:粒子的新位置通过当前位置加上更新后的速度得出,并立即进行边界检查,确保阈值落在合法区间内。
*
最优更新:若当前位置产生的类间方差优于历史记录,则更新该粒子的个体最优和群体的全局最优。
- 适应度评价(大津法):
* 评价函数将粒子位置取整作为候选阈值。
* 计算该阈值下的背景(0 到阈值)和前景(阈值+1 到 255)的权重(像素占比)及平均灰度值。
* 计算两类群体之间的类间方差。方差越大,说明该阈值产生的图像分割效果越好(前景与背景差异最明显)。
- 结果输出与可视化:
* 经过 100 次迭代后,获取全局最优粒子所代表的整数灰度值。
* 程序通过命令行输出最优阈值、最大类间方差以及算法运行总耗时。
* 绘制四部分图形:原始对比图、二值化分割图、带有红线标注的灰度直方图以及随迭代次数变化的适应度收敛曲线。
关键函数与算法分析
- 粒子群算法逻辑:算法通过模拟鸟群觅食行为,利用 c1 引导粒子向“自我经验”学习,利用 c2 引导粒子向“社会经验”学习。这种机制在寻找单阈值分割点时能极快地避开局部细节干扰,定位全局最优解。
- fitness_otsu 评价函数:这是系统的核心判据。其物理意义在于:最优阈值应该使前景和背景的灰度分布尽可能分离。该函数通过数学公式
w0 * w1 * (avg0 - avg1)^2 计算,其中 w 为概率,avg 为均值。函数内包含健全的边界处理逻辑,对于全黑或全白的极端阈值选择会返回 0,确保搜索方向的正确性。 - 运动学约束:代码中通过
max(min(...)) 操作对速度和位置进行双重截断处理。这保证了算法即使在高动态更新下,也不会出现非法像素值的误算,增强了代码的稳健性。
使用方法
- 将 MATLAB 的当前文件夹切换至脚本所在目录。
- 若需处理自定义图像,请将图像放置在同级目录下,并在代码开始处修改变量
imgName 为相应文件名。 - 点击“运行”或在命令行窗口输入主函数命令。
- 观察弹出的 Figure 窗口,其展示了从原始图像到最终分割结果的完整分析流程。