基于SMQT算法的灰度图像增强系统
项目介绍
本项目实现了一种基于 2005 年国际图像处理会议(ICIP)发布的连续均值量化变换(Successive Mean Quantization Transform, SMQT)算法。该算法采用非线性的方式对灰度图像进行增强,核心在于通过嵌套式的二叉树结构对图像数据进行递归均值量化。与传统的直方图均衡化(HE)相比,SMQT 能够更有效地提取并强化信号的底层结构,在提升对比度的同时,最大限度地保持原始图像直方图的分布形状,从而避免了常见的对比度过饱和、伪影以及细节丢失等问题。
功能特性
- 自动图像获取:系统会自动尝试加载内置的标准低对比度图像,若环境缺失样本,则通过正弦函数生成具有复杂纹理的低对比度合成图像。
- 多层级 SMQT 增强:支持自定义分解层级(默认为8层,对应8位图像增强),通过递归均值量化逐层提取细节。
- 结构保护特性:增强过程具有平移与伸缩不变特性,能够保证图像直方图的波形骨架基本不变,保留原始光影物理结构。
- 定量指标评估:系统集成信息熵(Entropy)计算模块,从信息论角度定量评估增强效果。
- 对比可视化分析:通过 2x3 的矩阵视图展示原始图像、SMQT 增强图像及传统 HE 增强图像的视觉效果与直方图波形对比。
实现逻辑与算法模型
程序内部的实现逻辑严格遵循 SMQT 算法的数学定义:
- 预处理阶段:
数据输入后首先进行灰度化处理(若是彩色图)并转换为双精度浮点型。如果读取指定图像失败,程序会通过
meshgrid 生成一个 256x256 的合成图像,其公式为
100 + 30 * sin(X/10) * cos(Y/10),用以模拟低对比度环境。
- 核心算法 (SMQT):
核心逻辑由一个递归分解函数实现,具体流程如下:
-
初始化:创建一个全零的结果矩阵,并初始化节点辅助数组,将所有像素标记在根节点下。
-
迭代量化:进行 $L$ 次循环($L=8$)。在每一层中,识别当前所有的唯一节点,并计算每个节点所包含像素的局部均值(Mean)。
-
二值化与累加:根据局部均值对像素进行二值划分(大于均值为1,小于等于为0)。将此二值结果按权重 $2^{(L-l)}$ 累加到最终结果中。
-
节点更新:根据二值化结果更新像素所属的节点索引,实现二叉树路径的向下划分(左子节点或右子节点)。
-
归一化:将计算得到的累加值映射到 0-255 范围,重构为增强后的图像。
- 对比与评估逻辑:
程序调用内置函数进行直方图均衡化,并对三类图像(原图、SMQT、HE)分别计算信息熵。信息熵越高通常代表图像细节信息越丰富。
- 可视化逻辑:
使用 MATLAB 图形系统创建白色底色的展示窗口。第一行显示图像缩略图和对应的信息熵数值;第二行通过自定义的美化函数,以半透明填充面积图的形式展示三者的直方图分布。
关键函数详述
- 核心增强处理函数:负责执行 SMQT 的非线性映射。它不依赖于全局直方图,而是通过对数据空间进行逐级划分,有效地将原本集中的灰度值拉伸到全局,同时利用二叉树增长保持了像素间的相对序关系。
- 直方图美化展示函数:利用
imhist 获取分布数据,并通过 area 函数配合 FaceAlpha 透明度设置,生成直方图波形对比图,直观展现 SMQT 对直方图形状的保护作用。 - 环境自适应逻辑:通过
try-catch 机制确保了代码在不同环境下的健壮性。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 工具箱:需要安装 Image Processing Toolbox(图像处理工具箱)以支持
histeq、entropy、imhist 等操作。
使用方法
- 启动 MATLAB 软件。
- 将相关代码脚本置于当前工作路径。
- 在命令行窗口直接运行主入口函数。
- 程序将自动弹出对比界面,并在控制台实时打印三项对比技术的信息熵计算结果。