基于MATLAB的图像结构相似性(SSIM)算法实现
项目简介
本项目基于MATLAB编程环境,完整复现并封装了结构相似性(Structural Similarity, SSIM)图像质量评价算法。该算法作为一种全参考(Full-Reference)评价指标,旨在模拟人类视觉系统(HVS)对图像结构信息的高度敏感特性,从亮度(Luminance)、对比度(Contrast)和结构(Structure)三个维度衡量待测图像相对于参考图像的失真程度。
与传统的均方误差(MSE)和峰值信噪比(PSNR)不同,本实现不单纯依赖像素误差的统计,而是通过局部窗口统计特性来评估图像感知的质量。
功能特性
- 全流程自动化处理:包含从图像读取、失真模拟、预处理、算法计算到结果可视化的完整链路。
- 鲁棒的图像输入:优先读取经典测试图像,若缺失则自动生成随机噪声图像,确保代码在任何环境下均可运行。
- 复合失真模拟:代码内部集成图像失真生成机制,同时叠加高斯噪声与运动模糊,用于验证算法对复杂失真的评估能力。
- 标准SSIM核心算法:严格遵循SSIM定义的数学模型,采用高斯加权滑动窗口计算局部统计量,包含亮度、对比度和结构项的综合计算。
- 直观的可视化输出:提供1x3的对比视图,包含参考图像、失真图像以及彩色的SSIM局部索引图,并直接显示全局均值(MSSIM)。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱,用于图像滤波、噪声添加及色彩转换)
使用方法
- 将项目代码保存至MATLAB工作路径。
- 直接运行主程序脚本。
- 系统将自动执行计算并在控制台输出全局MSSIM值,同时弹出结果分析图表。
实现逻辑详细说明
本项目的主程序逻辑严密遵循以下四个阶段,与实际代码执行流程完全一致:
1. 数据准备与失真模拟
程序首先尝试读取MATLAB内置的经典测试图像(
peppers.png)。为了保证程序的健壮性,采用
try-catch 结构,若无法读取文件,则自动生成一幅512x512的随机RGB彩色图像作为参考源。
随后,程序对参考图像进行人为破坏以模拟失真环境。这一过程包含两步:
- 添加噪声:使用高斯模型向图像添加均值为0、方差为0.01的噪声。
- 添加模糊:设计一个长度为7、角度为45度的运动模糊算子,对噪声图像进行卷积滤波。
最终得到的图像同时包含了噪声干扰和模糊失真,作为待测图像(Distorted Image)。
2. 图像预处理
由于SSIM算法主要针对图像的亮度信息进行感知评价,程序包含自动的色彩空间转换逻辑。
- 检测输入图像是否为三通道(RGB)彩色图像,若是,则调用函数将其转换为灰度图像。
- 将图像数据类型由整数(uint8)转换为双精度浮点数(double),以确保后续数学计算的精度。
3. 核心算法参数配置
在调用算法前,程序设定了SSIM计算所需的标准参数,完全符合算法原始论文定义:
- 动态范围 (L):255(适用于8位图像)。
- 稳定常数 (K1, K2):分别设定为 0.01 和 0.03,用于防止分母为零并调节计算稳定性,进而推导出常数 C1 和 C2。
- 高斯窗口:定义尺寸为 11x11,标准差 (sigma) 为 1.5 的高斯低通滤波器,并对其归一化,用于后续的局部统计量计算。
4. 结果可视化与输出
程序创建一个包含三个子图的窗口进行综合展示:
- 左图:显示原始参考图像及其尺寸。
- 中图:显示经过噪声和模糊处理后的失真图像。
- 右图:展示SSIM局部索引图(SSIM Map)。为了更直观地观察图像各区域的相似度差异,使用
jet 彩色映射表,其中暖色调代表高相似度,冷色调代表严重失真。
同时,控制台会格式化打印出计算得到的全局结构相似度(MSSIM)数值及数据动态范围。
关键算法实现细节
本项目的核心计算模块(calculate_ssim 函数)通过以下数学原理实现:
1. 滑动窗口统计
利用预定义的高斯核对两幅图像进行滑动卷积(滤波)操作,利用MATLAB的 imfilter 函数(采用 'replicate' 边界填充)计算以下局部统计量:
- 局部均值 ($mu$):反应图像的亮度信息。
- 局部方差 ($sigma^2$):利用公式 $E[x^2] - (E[x])^2$ 间接计算,反应图像的对比度信息。
- 局部协方差 ($sigma_{12}$):反应两幅图像之间的结构相似程度。
2. SSIM索引图生成
根据统计量,应用SSIM标准公式计算每一个像素位置的相似度索引:
SSIM = [(2 * $mu_1$ * $mu_2$ + C1)(2 * $sigma_{12}$ + C2)] / [($mu_1^2$ + $mu_2^2$ + C1)($sigma_1^2$ + $sigma_2^2$ + C2)]
该步骤生成了一个与原图尺寸一致的二维矩阵(Map),矩阵中每个点的值代表该局部区域的质量保留程度。
3. 全局指标 (MSSIM)
最后,对整幅SSIM索引图求取算术平均值(mean2),得到一个介于0到1之间的标量,作为评价整幅图像质量的最终指标。