了解图像质量评价指标PSNR

一、PSNR是什么

1.1 定义与数学公式

峰值信噪比(Peak Signal-to-Noise Ratio,PSNR)是数字图像处理领域最经典的客观质量评价指标之一。其核心思想是通过计算原始图像与失真图像之间的均方误差(MSE)来衡量失真程度,再通过信号最大功率与噪声功率的比值进行量化评估。

对于大小为 m × n m \times n m×n的灰度图像 I I I K K K,其数学定义如下:

均方误差(MSE)
M S E = 1 m n ∑ i = 0 m − 1 ∑ j = 0 n − 1 [ I ( i , j ) − K ( i , j ) ] 2 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

PSNR计算式
P S N R = 20 ⋅ log ⁡ 10 ( M A X I M S E ) PSNR = 20 \cdot \log_{10}\left(\frac{MAX_I}{\sqrt{MSE}}\right) PSNR=20log10(MSE MAXI)

1.2 物理意义解读

  • 信号功率:以 M A X I 2 MAX_I^2 MAXI2表示,体现图像的动态范围
  • 噪声功率:即MSE,反映像素级误差的累计
  • 对数转换:将线性比例转换为分贝(dB),更符合人类对声光强度的感知特性

二、PSNR的算法实现

如下为python的两种实现方式,并给出可视化显示

import numpy as np
import cv2
import matplotlib.pyplot as plt"""计算两幅RGB图像的PSNR值
参数:img1: 原始图像(numpy数组)img2: 待评估图像(numpy数组)
返回:PSNR值(dB)
"""
def rgb_psnr(img1, img2):# 确保输入是numpy数组img1 = np.array(img1, dtype=np.float64)img2 = np.array(img2, dtype=np.float64)# 计算各通道MSEmse_r = np.mean((img1[:, :, 0] - img2[:, :, 0]) ** 2)mse_g = np.mean((img1[:, :, 1] - img2[:, :, 1]) ** 2)mse_b = np.mean((img1[:, :, 2] - img2[:, :, 2]) ** 2)# 计算平均MSEmse = (mse_r + mse_g + mse_b) / 3# 处理完全相同的图像if mse == 0:return float('inf')return 20 * np.log10(255 / np.sqrt(mse))def psnr(img1, img2):img1 = img1.astype(np.float64)img2 = img2.astype(np.float64)mse = np.mean((img1 - img2) ** 2)if mse == 0:return float('inf')if img1.max() > 1:max_pixel = 255.0else:max_pixel = 1.0return 20 * np.log10(max_pixel / np.sqrt(mse))if __name__ == "__main__":# 1. 读取原始图像original = cv2.imread('../../mario.png')  # BGR格式original = cv2.cvtColor(original, cv2.COLOR_BGR2RGB)  # 转换为RGB# 2. 创建测试图像(添加高斯噪声)noisy = original + np.random.normal(0, 25, original.shape)noisy = np.clip(noisy, 0, 255).astype(np.uint8)# 3. 计算PSNR# psnr_value = rgb_psnr(original, noisy)psnr_value = psnr(original, noisy)print(f"PSNR between original and noisy image: {psnr_value:.2f} dB")# 4. 可视化比较plt.figure(figsize=(12, 6))plt.subplot(1, 2, 1)plt.imshow(original)plt.title('Original Image')plt.axis('off')plt.subplot(1, 2, 2)plt.imshow(noisy)plt.title(f'Noisy Image (PSNR={psnr_value:.2f}dB)')plt.axis('off')plt.tight_layout()plt.show()

在这里插入图片描述

三、PSNR的评价标准与应用场景

3.1 典型评价尺度

PSNR范围(dB)图像质量评价
>40极好(肉眼不可辨差异)
30-40良好(可接受质量)
20-30较差(明显失真)
<20严重失真(不可接受)

3.2 核心应用领域

图像压缩评估

比较JPEG/WebP等编码器的压缩效果。实验表明,当PSNR下降超过2dB时,90%的观察者能感知到质量差异。

去噪算法优化

高斯噪声方差与PSNR的关系:
P S N R = 10 log ⁡ 10 ( 25 5 2 σ 2 ) PSNR = 10\log_{10}\left(\frac{255^2}{\sigma^2}\right) PSNR=10log10(σ22552)
其中 σ \sigma σ为噪声标准差,可通过PSNR变化评估去噪效果[21][150]。

超分辨率重建

在EDSR、RCAN等算法中,PSNR常作为损失函数的一部分。但需注意高PSNR可能伴随纹理细节丢失的问题。

水印鲁棒性测试

对含水印图像进行攻击(如滤波、裁剪)后,通过PSNR评估水印不可见性和鲁棒性。

四、PSNR的局限性

4.1 与人眼视觉的不一致性

对比度拉伸:PSNR下降但视觉质量提升
高频噪声:PSNR轻微变化但视觉感知明显
色彩偏移:对亮度分量敏感,忽略色度失真

4.2 数学局限性

均匀误差惩罚:对所有像素误差平等对待,忽略空间频率敏感性
局部特征盲区:无法检测结构相似性和纹理变化
动态范围依赖:对HDR图像评估失效

五、展望未来

感知驱动评估:结合JND(Just Noticeable Difference)模型改进PSNR
多模态融合:联合光学参数(MTF、SNR)构建综合评价体系
深度学习替代:训练神经网络预测主观质量评分(如LPIPS)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/42334.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NX二次开发刻字功能——布尔运算

刻字功能在经历、创建文本、拉伸功能以后就剩下布尔运算了。布尔运算的目的就是实现文本时凸还是凹。这部分内容很简单。 1、首先识别布尔运算的类型&#xff0c;我这里用到一个枚举类型的选项&#xff0c;凸就是布尔求和&#xff0c;凹就是布尔求差。 2、其放置位置为创建拉伸…

《C语言实现金字塔图案打印》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言练习题分享 &#x1f30d;文章目入 程序代码程序功能程序分析外层循环内层循环输出结果 示例运行总结 在学习编程的过程中&#xff0c;打印图案是一个非常有趣的练习&#xff0c;它可…

Shiro学习(一):Shiro介绍和基本使用

一、Shiro介绍 1、百科对shiro的定义如下&#xff1a; Apache Shiro 一个强大且易于使用的 Java 安全框架&#xff0c;它提供了身份验证、授权、加密和会话管理等功能。Shiro 的设计目标是简化企业级应用程序的安全性开发过程&#xff0c;同时保持代码的简洁和易于维护。 2、…

Java多线程与高并发专题——关于Condition

Condition接口 源码注释 还是老样子&#xff0c;看看源码注释&#xff1a; Condition factors out the Object monitor methods (wait, notify and notifyAll) into distinct objects to give the effect of having multiple wait-sets per object, by combining them with t…

JavaScript 性能优化实战:突破瓶颈,打造极致 Web 体验

在当今快节奏的互联网时代&#xff0c;用户对于 Web 应用的性能要求越来越高。一个响应迅速、流畅运行的 Web 页面能够极大地提升用户体验&#xff0c;反之&#xff0c;缓慢的加载速度和卡顿的交互则可能导致用户流失。JavaScript 作为 Web 开发的核心语言之一&#xff0c;其性…

《白帽子讲 Web 安全》之服务端请求伪造(SSRF)深度剖析:从攻击到防御

引言 在当今复杂的网络环境中&#xff0c;Web 应用安全犹如一座时刻需要精心守护的堡垒。随着技术的不断演进&#xff0c;各类安全威胁层出不穷&#xff0c;其中服务端请求伪造&#xff08;SSRF&#xff09;正逐渐成为令开发者与安全从业者头疼的一大难题。吴翰清在《白帽子讲…

Pandas的轴,axis=0,axis=1

八. Pandas的轴 axis0代表跨行&#xff08;down)&#xff0c;而axis1代表跨列&#xff08;across) 使用0值表示沿着每一列或行标签\索引值向下执行方法使用1值表示沿着每一行或者列标签模向执行对应的方法 下图代表在DataFrame当中axis为0和1时分别代表的含义: axis参数作用…

matplotlib学习

开始学习Python数据可视化 一.基础绘图函数 1.创建画布与坐标轴 import matplotlib.pyplot as plt# 创建画布和坐标轴 fig, ax plt.subplots() # 默认1行1列&#xff0c;返回Figure对象和Axes对象 2.绘制线图 x [1, 2, 3, 4] y [10, 20, 15, 25]# 绘制线图 ax.plot(x,…

系统架构设计前的多角度思考

首先&#xff0c;从需求分析入手&#xff0c;不仅关注当前功能&#xff0c;还要考虑业务未来的扩展方向。比如数据量预估增长多少&#xff1f;这些都是影响架构的重要因素。 然后是架构设计原则&#xff0c;比如分层设计、模块化、高内聚低耦合等。比如如何划分服务边界&#x…

leetcode230.二叉搜索树中第k小的元素

中序遍历&#xff0c;第k次出现的数值就是结果 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left…

运筹说 第134期 | 矩阵对策的解法

上一期我们了解了矩阵对策的基本理论&#xff0c;包含矩阵对策的纯策略、矩阵对策的混合策略和矩阵对策的基本定理。 接下来小编将为大家介绍矩阵对策的解法&#xff0c;包括图解法、方程组法和线性规划法三种经典方法。 01 图解法 本节首先介绍矩阵对策的图解法&#xff0c;…

Python贝叶斯分层模型专题|对环境健康、医学心梗患者、体育赛事数据空间异质性实证分析合集|附数据代码

全文链接&#xff1a;https://tecdat.cn/?p41267 在大数据时代&#xff0c;多水平数据结构广泛存在于环境健康、医学研究和体育赛事等领域。本专题合集聚焦贝叶斯分层模型&#xff08;Hierarchical Bayesian Model&#xff09;的创新应用&#xff0c;通过氡气污染数据与 季后…

NOI2015提高组.子串

题目 520. 子串 思路 设计状态表示 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k]表示 a a a的前 i i i个字符, b b b的前 j j j个字符, 并且已经分割了 k k k个子串的所有方案, 将状态划分为包含第 i i i个字符和不包含第 i i i个字符, 不包含第 i i i个字符的状态是 f [ i…

医疗智能体通信整合-大模型训练中沟通优化策略研究

一、引言:医疗模型训练的沟通困境 1.1 医疗 AI 发展背景 在数智化浪潮的推动下,医疗 AI 正以前所未有的速度融入现代医疗体系。从智能影像诊断助力医生精准识别病灶,到基于大数据分析的个性化药物研发,医疗 AI 在提升医疗效率、改善医疗质量方面展现出巨大潜力。据相关数据…

存储管理(一)

目录 一、存储管理的功能 1.地址映射&#xff08;地址重定位&#xff09; 2.主存分配和回收 3.存储保护 4.主存扩充&#xff08;虚拟存储&#xff09; 二、程序的装入与链接 程序的装入&#xff1a; 程序的链接 三、连续分配方式 单一连续分配 固定分区分配 动态分…

SpringBoot学习笔记3.27

目录 实战篇第二课 1.注册参数的校验&#xff1a; 学习过程中遇到的问题&#xff1a; 1.什么是正则表达式 2.怎么自定义异常&#xff1f; 1. 创建全局异常处理类 2. 定义响应对象 3. 使用 ExceptionHandler 4. 设置响应状态码 5. 返回统一响应 6. 测试全局异常处理 …

基于springboot+vue的游戏账号交易系统的设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

小测验——合并多个网格文件调用相机参数进行适配

文章目录 一、前言1.1 对于rule1.2 对于ask、agent、edit1.3 对于没有notepad二、代码展示一、前言 1.1 对于rule 对于.cursorrules里面的文件内容,就是从提示词、项目简介、技术架构、目录结构、代码规范这几方面进行介绍 1.2 对于ask、agent、edit 切换模式在聊天框下方…

敏捷测试(Agile Testing)

敏捷测试&#xff08;Agile Testing&#xff09; 敏捷测试是在敏捷开发&#xff08;Agile Development&#xff09;环境下进行的软件测试方法&#xff0c;强调快速反馈、持续测试、团队协作&#xff0c;以确保软件质量贯穿整个开发周期。与传统瀑布模型不同&#xff0c;敏捷测…

FreeRTOS内核实现与应用学习之6——多优先级

在FreeRTOS中&#xff0c;数字优先级越小&#xff0c;逻辑优先级也越小&#xff1b;在任务创建时&#xff0c;会根据任务的优先级将任务插入就绪列表不同的位置。 相同优先级的任务插入就绪列表中的同一条链表中。 要想任务支持优先级&#xff0c;即只要实现在任务切换&#xf…