【计算机视觉】三种图像质量评价指标详解:PSNR、SSIM与SAM

图像质量评价指标详解:PSNR、SSIM与SAM

文章目录

  • 图像质量评价指标详解:PSNR、SSIM与SAM
    • [1. 峰值信噪比(PSNR)](#1. 峰值信噪比(PSNR))
      • [1.1 数学定义](#1.1 数学定义)
      • [1.2 特点与局限性](#1.2 特点与局限性)
    • [2. 结构相似性指数(SSIM)](#2. 结构相似性指数(SSIM))
      • [2.1 数学定义](#2.1 数学定义)
      • [2.2 特点与应用](#2.2 特点与应用)
    • [3. 光谱角度映射器(SAM)](#3. 光谱角度映射器(SAM))
      • [3.1 数学定义](#3.1 数学定义)
      • [3.2 特点与应用](#3.2 特点与应用)
    • [4. Python实现示例](#4. Python实现示例)
    • [5. 指标对比与选择建议](#5. 指标对比与选择建议)
    • [6. 总结](#6. 总结)

在图像处理、压缩和恢复等领域,我们需要客观的指标来评估图像质量。本文将详细介绍三种常用的图像质量评价指标:峰值信噪比(PSNR)、结构相似性指数(SSIM)和光谱角度映射器(SAM)。

1. 峰值信噪比(PSNR)

PSNR是最广泛使用的图像质量评价指标之一,它通过计算原始图像与处理后图像之间的均方误差(MSE)来衡量图像失真程度。

1.1 数学定义

PSNR的计算公式如下:

PSNR = 10 ⋅ log ⁡ 10 ( MAX 2 MSE ) = 20 ⋅ log ⁡ 10 ( MAX MSE ) \text{PSNR} = 10 \cdot \log_{10}\left(\frac{\text{MAX}^2}{\text{MSE}}\right) =20 \cdot \log_{10}\left(\frac{\text{MAX}}{\sqrt{\text{MSE}}}\right) PSNR=10⋅log10(MSEMAX2)=20⋅log10(MSE MAX)

其中:

  • M A X = 2 n − 1 MAX = 2^n -1 MAX=2n−1 是 n n n 位图像可能的最大像素值(例如,对于8位图像为255)
  • M S E MSE MSE是均方误差,定义为:

MSE = 1 m n ∑ i = 0 m − 1 ∑ j = 0 n − 1 [ I ( i , j ) − K ( i , j ) ] 2 \text{MSE} = \frac{1}{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}[I(i,j) - K(i,j)]^2 MSE=mn1i=0∑m−1j=0∑n−1[I(i,j)−K(i,j)]2

其中 I I I和 K K K分别是原始图像和处理后图像, m m m和 n n n是图像尺寸。

1.2 特点与局限性

优点:

  • 计算简单,易于理解,完全客观地反映了两张图片之间的差异
  • 广泛应用于各种图像处理任务

缺点:

  • 仅基于像素级别的差异,不考虑人类视觉系统的特性
  • 对于相同MSE的不同类型的失真,人眼感知可能完全不同
  • PSNR值高并不总意味着视觉质量好

例如,在一个图像去噪任务中,对原始无噪声图像(m×n)进行噪声攻击得到含有噪声的图像(如图3-1),需要对图像进行去噪处理,评价指标为计算原始无噪声图像(m×n)与去噪后图像(m×n)的峰值信噪比 (Peak

Signal to Noise Ratio, PSNR)(武汉大学遥感信息工程学院《数字图像处理》课本P135)。


图1 受到噪声攻击的图像

我在试验的过程中,发现了这样的现象:
图2 PSNR最高的图像(基于 Lucidrains 的开源库 [denoising-diffusion-pytorch] (https://github.com/lucidrains/denoising-diffusion-pytorch) 中的 UNet 模型去噪,PSNR达36.0626)


图3 PSNR不是最高,但给人视觉效果感觉最好的图像

可以发现,由于这个图像去噪的任务的评价指标是PSNR,是一个客观指标,由PSNR的计算公式可知,当去噪后图像与原图越接近时,PSNR越高(图2),但是给人感觉的视觉效果更好(图3)并不意味着与原图更接近。可以说,图2在图像复原上的效果更好,而图3在图像增强上的效果更好。

2. 结构相似性指数(SSIM)

SSIM是一种更符合人类视觉系统特性的评价指标,它考虑了图像的结构信息、亮度和对比度。

2.1 数学定义

SSIM指数的计算基于三个比较因素:亮度(l)、对比度©和结构(s):

SSIM ( x , y ) = [ l ( x , y ) ] α ⋅ [ c ( x , y ) ] β ⋅ [ s ( x , y ) ] γ \text{SSIM}(x,y) = [l(x,y)]^{\alpha} \cdot [c(x,y)]^{\beta} \cdot [s(x,y)]^{\gamma} SSIM(x,y)=[l(x,y)]α⋅[c(x,y)]β⋅[s(x,y)]γ

通常α=β=γ=1,简化后的公式为:

SSIM ( x , y ) = ( 2 μ x μ y + C 1 ) ( 2 σ x y + C 2 ) ( μ x 2 + μ y 2 + C 1 ) ( σ x 2 + σ y 2 + C 2 ) \text{SSIM}(x,y) = \frac{(2\mu_x\mu_y + C_1)(2\sigma_{xy} + C_2)}{(\mu_x^2 + \mu_y^2 + C_1)(\sigma_x^2 + \sigma_y^2 + C_2)} SSIM(x,y)=(μx2+μy2+C1)(σx2+σy2+C2)(2μxμy+C1)(2σxy+C2)

其中:

  • μ x \mu_x μx和 μ y \mu_y μy是图像x和y的平均值
  • σ x 2 \sigma_x^2 σx2和 σ y 2 \sigma_y^2 σy2是图像x和y的方差
  • σ x y \sigma_{xy} σxy是图像x和y的协方差
  • C 1 C_1 C1和 C 2 C_2 C2是为避免分母为零而添加的常数

2.2 特点与应用

优点:

  • 更符合人类视觉感知
  • 考虑结构信息,不仅仅是像素差异
  • 取值范围在-1到1之间,1表示完全相同

应用场景:

  • 图像压缩算法评估
  • 图像降噪和超分辨率重建
  • 视频质量评估

3. 光谱角度映射器(SAM)

SAM主要用于高光谱图像处理领域,它测量两个光谱向量之间的角度,提供了一种与强度无关的相似性度量。

3.1 数学定义

SAM的计算公式为:

SAM ( x , y ) = arccos ⁡ ( ⟨ x , y ⟩ ∣ ∣ x ∣ ∣ ⋅ ∣ ∣ y ∣ ∣ ) \text{SAM}(x,y) = \arccos\left( \frac{\langle x,y \rangle}{||x|| \cdot ||y||} \right) SAM(x,y)=arccos(∣∣x∣∣⋅∣∣y∣∣⟨x,y⟩)

其中:

  • ⟨ x , y ⟩ \langle x,y \rangle ⟨x,y⟩表示向量x和y的内积
  • ∣ ∣ x ∣ ∣ ||x|| ∣∣x∣∣和 ∣ ∣ y ∣ ∣ ||y|| ∣∣y∣∣表示向量x和y的欧几里得范数

SAM也可以通过欧拉积分来表示,类似于伽马函数的定义:

Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb{N} Γ(n)=(n−1)!∀n∈N

是通过欧拉积分定义的:

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.

3.2 特点与应用

优点:

  • 对光照变化不敏感
  • 能够有效区分不同材料的光谱特征
  • 在遥感和高光谱图像分析中特别有用

应用场景:

  • 高光谱图像分类
  • 目标检测与识别
  • 遥感图像分析

4. Python实现示例

下面提供这三种评价指标的Python实现示例:

python 复制代码
import numpy as np
import cv2
from skimage.metrics import structural_similarity as ssim
from math import log10, sqrt

# PSNR实现
def calculate_psnr(original, compressed):
    mse = np.mean((original - compressed) ** 2)
    if mse == 0:  # 图像相同
        return 100
    max_pixel = 255.0
    psnr = 20 * log10(max_pixel / sqrt(mse))
    return psnr

# SSIM实现 (使用skimage库)
def calculate_ssim(original, compressed):
    return ssim(original, compressed, data_range=compressed.max() - compressed.min())

# SAM实现
def calculate_sam(original, compressed):
    # 将图像转换为向量
    original_flat = original.reshape(-1)
    compressed_flat = compressed.reshape(-1)
    
    # 计算内积
    dot_product = np.sum(original_flat * compressed_flat)
    
    # 计算范数
    norm_original = np.sqrt(np.sum(original_flat ** 2))
    norm_compressed = np.sqrt(np.sum(compressed_flat ** 2))
    
    # 计算角度
    angle = np.arccos(dot_product / (norm_original * norm_compressed))
    
    return angle

# 示例使用
original = cv2.imread('original.png', 0)  # 以灰度模式读取
compressed = cv2.imread('compressed.png', 0)

psnr_value = calculate_psnr(original, compressed)
ssim_value = calculate_ssim(original, compressed)
sam_value = calculate_sam(original, compressed)

print(f"PSNR: {psnr_value} dB")
print(f"SSIM: {ssim_value}")
print(f"SAM: {sam_value} radians")

5. 指标对比与选择建议

指标 优势 局限性 适用场景
PSNR 计算简单,直观 不考虑视觉感知 初步评估、有损压缩
SSIM 符合人类视觉系统 计算复杂度高 需要感知质量评估的场景
SAM 对光照变化不敏感 主要适用于多光谱数据 高光谱图像处理、遥感

选择建议

  • 如果追求计算效率和简单性,选择PSNR
  • 如果需要更符合人类视觉感知的评估,选择SSIM
  • 如果处理高光谱或多光谱图像,选择SAM
  • 在实际应用中,建议结合多种指标进行综合评估

6. 总结

PSNR、SSIM和SAM是图像质量评价中的重要指标,各有优缺点和适用场景。在实际应用中,我们应根据具体需求选择合适的评价指标,或结合多种指标进行综合评估,以获得更全面、客观的图像质量评价结果。


希望本文对你理解这些图像质量评价指标有所帮助。如有疑问,欢迎在评论区留言讨论!

相关推荐
文心快码BaiduComate20 小时前
百度云与光本位签署战略合作:用AI Agent 重构芯片研发流程
前端·人工智能·架构
风象南20 小时前
Claude Code这个隐藏技能,让我告别PPT焦虑
人工智能·后端
Mintopia21 小时前
OpenClaw 对软件行业产生的影响
人工智能
陈广亮1 天前
构建具有长期记忆的 AI Agent:从设计模式到生产实践
人工智能
会写代码的柯基犬1 天前
DeepSeek vs Kimi vs Qwen —— AI 生成俄罗斯方块代码效果横评
人工智能·llm
Mintopia1 天前
OpenClaw 是什么?为什么节后热度如此之高?
人工智能
爱可生开源社区1 天前
DBA 的未来?八位行业先锋的年度圆桌讨论
人工智能·dba
叁两1 天前
用opencode打造全自动公众号写作流水线,AI 代笔太香了!
前端·人工智能·agent
前端付豪1 天前
LangChain记忆:通过Memory记住上次的对话细节
人工智能·python·langchain