【计算机视觉】三种图像质量评价指标详解: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是图像质量评价中的重要指标,各有优缺点和适用场景。在实际应用中,我们应根据具体需求选择合适的评价指标,或结合多种指标进行综合评估,以获得更全面、客观的图像质量评价结果。


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

相关推荐
白熊1883 分钟前
【计算机视觉】目标检测:深度解析YOLOv9:下一代实时目标检测架构的创新与实战
目标检测·计算机视觉·架构
大数据在线4 分钟前
当向量数据库与云计算相遇:AI应用全面提速
人工智能·云计算·向量数据库·亚马逊云科技·zilliz
stevenzqzq6 分钟前
编程中如何与AI交互-结构化输入和理解确认机制
人工智能·交互
高峰君主40 分钟前
生成式AI全栈入侵:当GPT-4开始自动编写你的Next.js路由时,人类开发者该如何重新定义存在价值?
人工智能
不学习怎么给老板打工?1 小时前
yolov8使用
深度学习
J先生x1 小时前
【开源项目】基于sherpa-onnx的实时语音识别系统 - LiveASR
人工智能·语音识别
火星资讯1 小时前
“兴火·燎原”总冠军诞生,云宏信息《金融高算力轻量云平台》登顶
人工智能·科技
AI产品备案1 小时前
算法备案类型解析:如何判断你的算法属于哪种类型?
深度学习·安全
whaosoft-1431 小时前
51c自动驾驶~合集37
人工智能
小技工丨2 小时前
详解大语言模型生态系统概念:lama,llama.cpp,HuggingFace 模型 ,GGUF,MLX,lm-studio,ollama这都是什么?
人工智能·语言模型·llama