详解Python如何求不同分辨率图像的峰值信噪比
作者:梦想橡皮擦 发布时间:2023-03-25 09:51:58
可以使用 Python 的 NumPy 和 OpenCV 库来实现这个任务。提前准备一张图片作为素材。
什么是峰值信噪比
峰值信噪比(Peak Signal to Noise Ratio,PSNR)是衡量图像质量的常用指标,它表示图像中信号和噪声的比值。通常,较高的 PSNR 值表示图像质量较高。
PSNR 的公式如下:
PSNR = 10 * log10(MAX^2 / MSE)
其中,MAX 是图像的最大亮度(一般为 255),MSE 是图像的均方误差,表示原图像和处理后的图像的差异。
如果需要在 Python 代码中计算 PSNR,可以使用 NumPy 库,并使用它提供的平方误差函数 (numpy.mean((A-B)**2)),然后计算 PSNR 值。还可以使用 OpenCV 库中的 PSNR 函数,它可以直接计算 PSNR 值:
import cv2
import numpy as np
img1 = cv2.imread("demo1.jpg")
img2 = cv2.imread("demo2.jpg")
psnr = cv2.PSNR(img1, img2)
print("PSNR:", psnr)
在计算 PSNR 之前,图像必须具有相同的分辨率,并且必须使用相同的颜色空间(例如,都是灰度图或彩色的图)。
PSNR 峰值信噪比补充说明
PSNR 是一个非常常见的图像质量评估指标,广泛应用于图像压缩、图像处理、图像识别等领域。
需要注意,PSNR 仅考虑图像的像素均方误差,并不考虑其他的图像质量因素,例如:图像的细节和纹理等。
因此,在评估图像质量时,可以使用其他图像质量评估指标,例如:结构相似度(SSIM),以获得更全面的评估结果。
使用 OpenCV 库来实现这个任务
开始前需要先读入图像的灰度图。
import cv2
import numpy as np
img = cv2.imread("demo.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
使用 NumPy 的 mean 和 std 函数计算图像的均值和标准差:
mean, std = np.mean(gray), np.std(gray)
最后,计算峰值信噪比:
PSNR = 20 * np.log10(255 / np.sqrt(mean))
运行代码得到如下结果:
峰值信噪比的计算基于图像的灰度图,因此可以直接对灰度图进行计算。
PSNR 的计算值受图像的亮度影响
如果需要比较不同分辨率的图像,可以先将图像调整到相同的亮度,以便更准确地评估图像质量。
以下是如何使用 Python 和 OpenCV 将图像调整到相同亮度的代码示例:
import cv2
import numpy as np
img1 = cv2.imread("demo.jpg")
img2 = cv2.imread("demo1.jpg")
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
img1 = cv2.normalize(img1, None, 0, 255, cv2.NORM_MINMAX)
img2 = cv2.normalize(img2, None, 0, 255, cv2.NORM_MINMAX)
psnr = cv2.PSNR(img1, img2)
print("PSNR:", psnr)
上面的代码将两张图像转换为灰度图,并使用 OpenCV 的 normalize 函数将其调整到相同的亮度。随后可以计算 PSNR。
计算不同分辨率图像的 PSNR
使用下面的代码计算不同分辨率图像的 PSNR:
import cv2
import numpy as np
img1 = cv2.imread("demo1.jpg")
img2 = cv2.imread("demo2.jpg")
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
img1 = cv2.resize(img1, (100, 100))
img2 = cv2.resize(img2, (100, 100))
img1 = cv2.normalize(img1, None, 0, 255, cv2.NORM_MINMAX)
img2 = cv2.normalize(img2, None, 0, 255, cv2.NORM_MINMAX)
psnr = cv2.PSNR(img1, img2)
print("PSNR:", psnr)
上面的代码先将两张图像转换为灰度图,然后使用 OpenCV 的 resize() 函数将图像的分辨率调整到相同。
接下来,使用上面提到的代码将图像调整到相同的亮度,最后计算 PSNR。
python 求不同分辨率图像的峰值信噪比 | 其他知识点补充
PSNR 的应用:PSNR 常常被用来评估图像压缩、图像处理、图像修复等技术的质量。
PSNR 的限制:尽管 PSNR 是一个有用的指标,但它并不能完全反映图像质量,因为它不能评估图像细节的损失。
其他评估指标:除了 PSNR 之外,还有其他评估图像质量的指标,例如:SSIM(结构相似性指数)、MSE(均方误差)等。
来源:https://blog.csdn.net/hihell/article/details/128809175


猜你喜欢
- 一、简介Python 内置了 requests 模块,该模块主要用来发送 HTTP 请求,requests 模块比 urllib
- 如:http://localhost/newurl/WebForm1.aspx 1.方法document.URL(注意大小写) 结果是:ht
- MySQL 序列 AUTO_INCREMENT详解及实例代码MySQL序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段
- Javascript函数类型判断完美解决方案在判断函数类型时,我们通常使用typeof方法,一般情况下,它会得到我们所预想的效果。但是,有一
- 本文实例讲述了php 多继承的几种常见实现方法。分享给大家供大家参考,具体如下:class Parent1 { function
- 装饰器这东西我看了一会儿才明白,在函数外面套了一层函数,感觉和java里的aop功能很像;写了2个装饰器日志的例子,第一个是不带参数的装饰器
- 用nodejs怎样来实现对微信公众平台的开发呢?别的就不多说了,先来简单介绍微信公众平台的基本原理。微信服务器就相当于一个转发服务器,终端(
- SQL SERVER 2000安装教程:https://www.jb51.net/article/37380.htm1、如果您的SQL空间开
- django上线后,需要把setting.py文件的debug=True改为False,以防暴露代码报错问题。因为我项目用到css的地方只有
- 假如有一个数据表A:id name title
- 由于我在从源码看vue(v2.7.10)的computed的实现原理中详细的讲解过computed的实现,本篇跟computed的原理类似。
- 本文主要介绍下如何使用第三方库。1. 理解第三方库Python相当于一个手机,第三方库相当于手机里各种各样的APP。当我们想搭建网站时,可以
- 1.什么是MD5加密MD5消息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出
- 在日常的工作中,有时候会有这样的需求,需要一个常驻任务,持续的监听一个目录下文件的变化,对此作出回应.pyinotify就是这样的一个pyt
- 弄了半天也没有找到原因,然后又重新到网上下载几个,还是不行,郁闷坏了,最后结合其他编辑器的用法,才知道是配置文件夹中上传文件夹的路径写错了
- Access SQL 函数 收藏 ▲日期/时间CDate 将字符串转化成为日期 select CDate("2005/
- 本文实例讲述了Python中偏函数用法。分享给大家供大家参考,具体如下:python中偏函数当一个函数有很多参数时,调用者就需要提供多个参数
- 项目中我们可能会碰到导出Excel文件的需求,一般后台管理系统中居多,将table中展示的数据导出保存到本地。当然我们也可以通过一些处理来修
- 前言reinhard算法:Color Transfer between Images,作者Erik Reinhardwelsh算法:Tran
- 前言最近在新的环境配置pycharm的项目时候,发现pycharm不能连接到mysql数据库。由于安了java环境但是还没配置相关的库,并且