图像平均梯度计算与清晰度评价脚本
项目简介
本项目是一个基于 MATLAB 开发的图像处理工具,专注于计算图像的平均梯度(Average Gradient, AG)。平均梯度是衡量图像清晰度、纹理丰富程度以及细节反差的重要客观评价指标。该工具不仅能够计算单一图像的梯度值,还内置了对比测试功能,通过模拟高斯模糊图像来直观展示平均梯度在不同清晰度下的数值差异。该脚本代码简洁高效,利用矩阵运算替代传统循环,适用于图像质量评价、医学影像分析及自动对焦算法研究等领域。
功能特性
- 自动化图像读取与容错处理:智能读取 MATLAB 内置示例图像(如 cameraman.tif 或 peppers.png),若未找到示例图,则自动生成随机噪声图像以确保代码顺利运行。
- 图像清晰度对比实验:内置模拟模糊功能,自动生成当前图像的高斯模糊版本,形成“清晰-模糊”对照组。
- 高效的梯度计算算法:利用 MATLAB 的矩阵差分运算代替传统的双重
for 循环,大幅提升计算速度。 - 多维可视化展示:在一个窗口中同时显示原始图像、模糊图像及其对应的梯度幅值伪彩图,直观反映梯度分布情况。
- 定量的评价输出:在命令行自动输出清晰与模糊图像的 AG 值,并根据数值大小自动判定图像质量优劣。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(用于图像读取、灰度转换及滤波操作)
核心算法与代码实现逻辑
本脚本(main.m)的实际执行流程分为以下五个关键模块:
1. 图像读取与预处理
脚本首先清理工作环境,然后采用三级级联尝试机制加载图像:首先尝试加载灰度示例图,失败则尝试彩色示例图,再次失败则生成随机噪声图。读取后,脚本会自动检测图像通道数,如果是彩色图像则转换为灰度图,并最终转换为双精度(double)数据类型,以保证后续数学运算的精度。
2. 构建对比组(模糊模拟)
为了验证平均梯度评价清晰度的有效性,代码使用
fspecial 函数创建了一个大小为 15x15、标准差 sigma=5 的高斯低通滤波器。利用
imfilter 函数对原图进行卷积处理,生成模糊图像。从理论上讲,该模糊图像的边缘细节减少,其计算出的 AG 值应显著低于原图。
3. 平均梯度计算(核心算法)
这是本项目的核心逻辑部分,封装在
calculate_average_gradient 函数中。该函数并未逐个遍历像素,而是采用了向量化的矩阵运算:
- 水平梯度计算:使用
diff(img, 1, 2) 计算沿列的一阶差分。 - 垂直梯度计算:使用
diff(img, 1, 1) 计算沿行的一阶差分。 - 维度对齐:由于差分运算会导致矩阵维度减少 1,代码通过
dx(1:end-1, :) 和 dy(:, 1:end-1) 操作截取矩阵,确保两个方向的梯度矩阵在空间上严格对齐(对应同一个像素点)。 - 幅值计算:应用公式
sqrt((dx^2 + dy^2) / 2) 计算每个像素点的梯度幅值。 - 平均值计算:将所有像素的梯度幅值求和,并除以参与计算的像素总数,得到最终的 AG 值。
4. 结果可视化
脚本创建一个包含四个子图的图形窗口:
- 子图1 & 2:展示原始图像与高斯模糊后的图像,并在标题中直接显示对应的 AG 计算结果。
- 子图3 & 4:展示对应的梯度幅值分布图。为了增强视觉效果,代码使用了
jet 颜色映射表(Colormap),使得高梯度区域(边缘和纹理丰富处)以暖色调显示,低梯度区域(平坦区域)以冷色调显示。
5. 终端结果分析
脚本最后会在 MATLAB 命令行窗口打印格式化的分割线和计算结果。它会比较原图与模糊图的 AG 值,并依据“AG值越大,图像越清晰”的原理输出最终的评价结论。
使用方法
- 将项目脚本保存到 MATLAB 的当前工作目录或路径中。
- 在 MATLAB 命令行窗口输入
main 并回车,或直接点击编辑器中的“运行”按钮。 - 系统将自动弹出图形窗口显示对比结果,并在命令行输出具体的平均梯度数值及评价结论。
- (可选)用户可以将代码中的
imread 路径修改为本地特定的图片路径,以测试自己的图像数据。