当前位置: 首页 > news >正文

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

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

文章目录

  • 图像质量评价指标详解:PSNR、SSIM与SAM
    • 1. 峰值信噪比(PSNR)
      • 1.1 数学定义
      • 1.2 特点与局限性
    • 2. 结构相似性指数(SSIM)
      • 2.1 数学定义
      • 2.2 特点与应用
    • 3. 光谱角度映射器(SAM)
      • 3.1 数学定义
      • 3.2 特点与应用
    • 4. Python实现示例
    • 5. 指标对比与选择建议
    • 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=10log10(MSEMAX2)=20log10(MSE MAX)

其中:

  • M A X = 2 n − 1 MAX = 2^n -1 MAX=2n1 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=0m1j=0n1[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
受到噪声攻击的图像

图1 受到噪声攻击的图像

我在试验的过程中,发现了这样的现象: 图2
PSNR最高的图像

图2 PSNR最高的图像(基于 Lucidrains 的开源库 [denoising-diffusion-pytorch]
(https://github.com/lucidrains/denoising-diffusion-pytorch) 中的 UNet 模型去噪,PSNR达36.0626)

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

图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)=(n1)!nN

是通过欧拉积分定义的:

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

3.2 特点与应用

优点:

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

应用场景:

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

4. 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 100max_pixel = 255.0psnr = 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是图像质量评价中的重要指标,各有优缺点和适用场景。在实际应用中,我们应根据具体需求选择合适的评价指标,或结合多种指标进行综合评估,以获得更全面、客观的图像质量评价结果。


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

相关文章:

  • 升级xcode15 报错Error (Xcode): Cycle inside Runner
  • 赋能航天教育:高校卫星仿真教学实验平台解决方案
  • 说说stack reconciler 和fiber reconciler
  • 安卓基础(强制转换)
  • ArkTS基础实验 (二)
  • 20250428-AI Agent:智能体的演进与未来
  • About why docker application mode taskmanager not down in time
  • 大数据应用开发和项目实战
  • Android Studio 中使用 SQLite 数据库开发完整指南(Kotlin版本)
  • 聊天室系统:多任务版TCP服务端程序开发详细代码解释
  • 机器学习分类模型性能评估:应对类别不平衡的策略与指标
  • ArcGIS arcpy代码工具——根据属性结构表创建shape图层
  • 基于STM32、HAL库的ATSHA204A安全验证及加密芯片驱动程序设计
  • RAG工程-基于LangChain 实现 Advanced RAG(预检索优化)
  • 代码随想录第30天:动态规划3
  • vue3 css模拟语音通话不同语音、正在加载等的效果
  • 《Operating System Concepts》阅读笔记:p821-p897
  • C++——入门基础
  • C++学习笔记(四十二)——STL之堆操作算法
  • 嵌入式程序发开思路
  • 保利发展去年净利润约50亿元,在手现金1342亿元
  • 安阳一村支书微信群骂村民被警方行拘,辩称对方先“污蔑造谣”
  • 中国贸促会:有近50%的外贸企业表示将减少对美业务
  • 第一集丨《无尽的尽头》值得关注,《榜上佳婿》平平无奇
  • 铁路上海站五一假期预计发送446万人次,同比增长8.4%
  • 孟泽:我们简化了历史,因此也简化了人性