基于遗传算法优化的最大类间方差图像分割系统
项目简介
本项目实现了一套基于MATLAB的智能图像分割系统。该系统结合了遗传算法(Genetic Algorithm, GA)的全局寻优能力与最大类间方差法(Otsu算法)的阈值评价标准。旨在解决传统Otsu算法在进行图像分割时,遍历计算量大、效率低的问题。通过模拟自然进化的过程,自动搜索能够使图像前景与背景类间方差最大的最佳灰度阈值,从而实现高效、精确的二值化分割。
功能特性
- 智能图像读取与交互
- 支持通过GUI对话框选择JPG、PNG、BMP等常见格式图像。
-
自动演示模式:若用户取消选择文件,系统会自动生成一张包含暗物体的合成图像(伪彩色),用于演示算法流程。
- 图像预处理
- 自动将彩色图像转换为灰度图像。
- 集成高斯滤波(Gaussian Filtering)去噪功能,采用3x3模板,标准差为0.5,有效减少高频噪声对分割阈值计算的干扰。
- 遗传算法优化Otsu
- 采用二进制编码将灰度阈值映射为染色体。
- 实现了完整的遗传算法流程:种群初始化、适应度计算、轮盘赌选择、单点交叉、基本位变异及精英保留策略。
- 利用Otsu准则作为适应度函数,确保分割后的图像类间方差最大化。
- 可视化分析
- 单一窗口展示四个分析维度:原始图像、灰度直方图(含最优阈值指示线)、适应度收敛曲线、最终二值化分割结果。
- 实时输出迭代过程中的最佳阈值和最大类间方差数据。
系统要求
- MATLAB R2016a 及以上版本
- Image Processing Toolbox(图像处理工具箱)
使用方法
- 将项目代码保存至MATLAB当前工作路径。
- 在MATLAB命令窗口输入
main 并回车运行。 - 在弹出的文件选择窗口中选择待处理的图像文件。
- 若需查看演示效果,直接在文件选择窗口点击“取消”或关闭窗口即可。
- 程序运行结束后,将自动显示包含四个子图的结果窗口,并在控制台输出最优阈值及最大方差值。
代码实现逻辑与细节
1. 预处理模块
程序首先进行环境清理,然后尝试读取图像。若为RGB图像,调用
rgb2gray 进行灰度化。关键步骤是应用高斯滤波器(
fspecial('gaussian', [3, 3], 0.5)),这一步能平滑图像,防止噪声像素造成直方图的伪峰,从而影响Otsu阈值的判定。随后计算图像的灰度直方图及像素概率分布,为后续适应度计算提取全局变量。
2. 遗传算法参数配置
代码中硬编码了作为经典配置的GA参数:
- 种群规模 (pop_size):30,保证了种群的多样性。
- 染色体长度 (chrom_len):8,对应8位灰度图像的0-255个灰度级。
- 最大迭代次数 (max_gen):100代,兼顾收敛速度与计算时间。
- 交叉概率 (pc):0.7,维持较强的种群搜索能力。
- 变异概率 (pm):0.05,防止陷入局部最优。
3. Ostu适应度函数 (calc_fitness)
这是系统的核心。针对每一个个体(潜在阈值k),计算:
- 背景/前景概率权重 (w0, w1):基于预计算的直方图概率分布。
- 背景/前景平均灰度 (u0, u1):基于划分后的像素灰度均值。
- 类间方差:
g = w0 * w1 * (u0 - u1)^2。
代码中包含了边界保护逻辑,防止因阈值选取为0或255导致分母为0的情况,同时给适应度加上微小正数(1e-6)以防止轮盘赌计算出错。
4. 进化策略实现
- 选择 (Selection):实现了标准的轮盘赌算法(Roulette Wheel Selection),基于累积概率分布选择下一代父本,适应度越高的个体被选中的概率越大。
- 交叉 (Crossover):采用单点交叉法,随机选择断点交换相邻两个个体的基因片段。
- 变异 (Mutation):采用基本位变异,遍历每个基因位,按概率翻转0/1状态。
- 精英保留 (Elitism):在每次迭代循环的末尾,强制将上一代全局最优个体覆盖到当前种群的第一个位置,确保优秀基因不会因交叉变异而丢失,保证收敛曲线单调不减。
5. 结果输出与解码
迭代完成后,取出全局最优染色体,通过
decode_chrom 函数将其解码为十进制整数(范围限制在0-255),即为最终的最佳阈值。最后使用
imbinarize 函数基于该阈值生成二值图像。
关键算法分析
解码函数 (decode_chrom)
利用二进制权重向量(128, 64, ..., 1)与二进制种群矩阵相乘并求和,实现了高效的矩阵化解码操作。同时加入了边界检查,强制将大于255的值截断为255,保证阈值有效性。
轮盘赌选择 (selection)
代码首先计算群体总适应度并归一化为选择概率,接着计算累积概率(Cumulative Sum)。通过生成随机数并查找第一个累积概率大于该随机数的个体索引,完成了依概率选择的过程。代码中特别处理了总适应度为0的极端情况,采用等概率选择防止程序崩溃。
适应度计算优化
为了加速计算,代码在主循环外预先计算了 pixel_probs(像素概率)和 pixel_vals(灰度及其索引),在 calc_fitness 内部避免了重复的直方图统计过程,直接进行向量化运算,显著提高了每一代种群评估的效率。