自适应直方图均衡化 (AHE) 图像增强程序项目说明
项目介绍
本项目实现了一种基于自适应直方图均衡化(Adaptive Histogram Equalization, AHE)的图像增强算法。与传统的全局直方图均衡化(GHE)不同,本程序通过将图像划分为多个局部区域并分别计算增强函数,能够显著提升图像的局部对比度,特别适用于光照不均、对比度极低或包含复杂阴影细节的数字图像。为了解决局部处理带来的块状效应,系统内置了双线性插值算法,确保增强后的图像在视觉上保持自然的平滑度。
功能特性
- 局部对比度增强:针对图像的每一个子块独立计算概率分布,使暗部细节清晰可见,同时抑制亮部过曝。
- 双线性插值平滑:通过对相邻四个子块的变换函数进行加权插值,有效消除分块处理导致的边界断层或块状人工痕迹。
- 图像尺寸自适应:程序会自动计算子块尺寸,并对原始图像进行缩放调整,以确保图像长宽能够被子块数量整除,保证计算精度。
- 鲁棒的输入兼容性:支持读取系统标准测试图(如 pout.tif),并具备自动容错机制,在缺少外部文件时能自动生成合成图像进行处理。
- 直观的效果评估:提供原始图像与增强图像的对比显示,并同步展示增强前后的直方图分布,方便量化分析增强效果。
系统要求
- 运行环境:MATLAB R2016b 或更高版本。
- 必备工具箱:Image Processing Toolbox(用于图像读取、色彩空间转换及直方图绘制)。
算法实现过程与逻辑
本程序的核心逻辑严格按照 AHE 算法流程实现,分为以下四个关键阶段:
1. 预处理阶段
程序首先检查输入图像的通道数。如果是 RGB 彩色图像,则利用加权平均法将其转换为灰度图像。随后,将灰度数据转换为双精度浮点数(double)以保证计算精度。为了实现精确的分块,算法会根据预设的 8x8 子块数量计算目标尺寸,并使用插值方法将原图微调至可以被整除的大小。
2. 局部直方图与 CDF 计算
图像被逻辑划分为 64 个互不重叠的矩形子块。程序遍历每一个子块,执行以下操作:
- 统计当前子块内 0-255 灰度级的频数。
- 计算归一化的累积分布函数(CDF)。
- 每一个子块的 CDF 实际上代表了该区域从输入灰度到输出灰度的映射逻辑。这些映射函数被存储在一个三维矩阵中备用。
3. 基于双线性插值的像素映射
这是程序中最复杂的逻辑部分,旨在通过空间位置关联消除块效应:
- 几何中心定义:算法计算每个子块的几何中心点作为该块 CDF 映射的基准参考点。
- 邻域识别:对于图像中的每一个像素点,程序会识别其周围最近的四个子块中心点。
- 插值计算:
- 核心区域:对于处于四个中心点包围范围内的像素,使用双线性公式,根据其到四个中心点的距离权重,混合四个子块的映射值。
- 边缘区域:对于靠近图像四周边界、无法寻找四个邻域中心的像素,程序会自动降级为线性插值或直接采用最近邻映射。
- 灰度合成:最终像素值由插值后的 CDF 值乘以最大灰度级(255)得到。
4. 数据可视化与分析
处理完成后,程序启动图形化界面,在单一窗口中对比展示:
- 处理前后的视觉图像:直观展示细节增强效果。
- 直方图分布:展示原始图像集中的灰度分布如何被平滑地拉伸至全量程,证明算法在统计学意义上的有效性。
关键算法细节说明
- 子块划分:程序默认采用 8x8 的网格划分,这在计算效率与局部增强效果之间取得了平衡。
- 插值权重逻辑:通过计算当前像素坐标与左上、右上、左下、右下四个子块中心坐标的相对位移(th, tw),实现了动态权重分配。这种方法保证了像素在跨越子块边界时,映射函数是连续平滑演变的。
- 灰度级索引:在进行 CDF 映射查找时,由于 MATLAB 索引从 1 开始,程序将像素灰度值(0-255)偏移加 1 处理,确保了数组访问的安全性。