基于二维最大熵原理的灰度图像自动分割系统
项目简介
本项目实现了一套完整的基于二维最大熵(2D Maximum Entropy)阈值选取的图像分割算法。与传统的一维Otsu或一维熵方法不同,该系统不仅利用了像素点的灰度信息,还引入了像素的空间邻域信息(3x3邻域均值),构建二维灰度直方图。通过全局搜索算法寻找最佳的二维阈值向量(像素灰度阈值,邻域均值阈值),使目标与背景的后验二维熵之和达到最大,从而实现对低对比度或含噪图像的鲁棒分割。
功能特性
- 二维特征提取:结合原始像素灰度与其3x3邻域均值,有效利用图像空间相关性。
- 抗噪能力强:通过邻域平滑和二维直方图分析,能有效抑制孤立噪声点,适用于由噪声干扰的图像。
- 高效算法实现:利用积分图(Integral Image)技术计算二维累积概率和累积熵,将重复的区域求和运算复杂度大幅降低,加速阈值寻优过程。
- 自适应数据加载:优先读取本地
cameraman.tif图像;若未找到,系统会自动生成带有高斯噪声和形状的合成图像进行演示。 - 全方位可视化:提供包含原图、中间特征图、二维直方图(平面与立体)、熵曲面及最终分割结果的综合对比视图。
系统要求
- MATLAB (建议 R2016a 及以上版本)
- Image Processing Toolbox (用于图像读取、滤波及颜色空间转换)
算法原理与实现逻辑
本项目
main.m 脚本严格按照以下逻辑流程执行:
1. 图像预处理与容错
系统首先尝试读取标准测试图像。如果读取失败(如文件不存在),代码包含一段异常处理逻辑,会生成一个包含圆形目标和高斯白噪声的合成图像。随后,图像被统一转换为灰度图(如果是彩色图)并转换为双精度浮点型,以便进行后续的数学运算。
2. 构建二维特征空间
系统利用空间滤波技术构建第二维特征。通过定义一个 $3 times 3$ 的均值滤波器核,对原始灰度图像进行卷积操作(边界采用复制填充),生成
邻域均值图像。此时,每个像素点由一个二维向量 $(i, j)$ 表示,其中 $i$ 为像素本身灰度,$j$ 为邻域均值灰度。
3. 建立二维联合直方图
代码将像素灰度值和邻域均值灰度值映射到 $1-256$ 的索引空间,利用
accumarray 函数快速统计每一对 $(i, j)$ 出现的频数,构建 $256 times 256$ 的二维联合灰度直方图。随后将其归一化,得到二维联合概率分布矩阵 $P(i, j)$。
4. 积分图加速与最大熵寻优
这是本代码的核心部分。为了避免在遍历每个可能的阈值组合 $(s, t)$ 时重复进行四重循环求和,代码采用了积分图算法:
- 预计算:分别计算概率矩阵 $P$ 和 熵项矩阵 $P cdot ln(P)$ 的二维累积和(Cumulative Sum)。
- 区域划分:假设目标和背景主要分布在二维直方图的对角线区域附近。对于任意阈值对 $(s, t)$,直方图平面被分为背景区 A ($0 sim s, 0 sim t$) 和目标区 B ($s+1 sim 255, t+1 sim 255$)。
- 熵计算:利用积分图,可以在 $O(1)$ 时间内计算出区域 A 和区域 B 内的概率和及熵项和,进而计算该划分下的二维总熵。
- 全局搜索:遍历所有可能的 $s$ 和 $t$ (0-255),记录使总熵最大的阈值组合作为最佳分割阈值。
5. 图像分割执行
获取最佳像素阈值 $T_{gray}$ 和最佳邻域阈值 $T_{mean}$ 后,系统执行二值化分割。
代码采用的分割逻辑是:只有当
像素灰度大于 $T_{gray}$ 且
邻域均值大于 $T_{mean}$ 时,该像素才被判定为前景(目标)。这种“逻辑与”操作进一步增强了对离散噪声的抑制作用。
关键代码细节解析
accumarray 的使用:利用向量化操作替代循环来构建直方图,极大提高了统计速度。cumsum 积分图技术:代码中 cum_P 和 cum_H 的构建,使得在双重循环搜索最佳阈值时,无需在内部再次循环求和,显著提升了算法效率。- 对角分布假设:算法计算熵时,主要考虑了对角线上的两个主区域(背景与目标),这是基于二维最大熵方法的典型假设,即大部分有效信息集中在对角线附近,而远离对角线的区域通常代表边缘或噪声。
- 可视化处理:在绘制直方图时使用了对数变换
log(hist2d_raw + 1),这是为了在热力图上能够清晰显示概率极小但非零的细节区域。
使用方法
- 确保 MATLAB 当前路径下包含
main.m 文件。 - (可选)将一张名为
cameraman.tif 的图片放入同一目录,或者直接运行让系统生成合成图像。 - 在 MATLAB 命令行输入
main 并回车。 - 等待计算完成,控制台将输出最佳阈值及最大熵值,同时弹出一个包含6个子图的分析窗口展示结果。