python求不同分辨率图像的峰值信噪比,一文搞懂

news2024/11/15 9:16:17

可以使用 Python 的 NumPy 和 OpenCV 库来实现这个任务。提前准备一张图片作为素材。

python求不同分辨率图像的峰值信噪比,一文搞懂

文章目录

    • 什么是峰值信噪比
      • PSNR 峰值信噪比补充说明
    • 使用 OpenCV 库来实现这个任务
    • PSNR 的计算值受图像的亮度影响
    • 计算不同分辨率图像的 PSNR
    • python 求不同分辨率图像的峰值信噪比 | 其他知识点补充

什么是峰值信噪比

峰值信噪比(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))

运行代码得到如下结果:

python求不同分辨率图像的峰值信噪比,一文搞懂

峰值信噪比的计算基于图像的灰度图,因此可以直接对灰度图进行计算。

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(均方误差)等。

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 853 篇原创博客

👇 全网 6000+人正在学习的 爬虫专栏 👇👇👇👇

  • ⭐️ Python 爬虫 120,点击订购 ⭐️
  • ⭐️ 爬虫 100 例教程,点击订购 ⭐️

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java面试题:finalize的原理和工作缺点是什么

finalize是 Object 中的一个方法,如果子类重写它,垃圾回收时此方法会被调用,可以在其中进行资源释放和清理工作。其次将资源释放和清理放在 finalize 方法中非常不好,非常影响性能,严重时甚至会引起 OOM,从…

LabVIEW对NI Linux RT应用程序性能进行基准测试

LabVIEW对NI Linux RT应用程序性能进行基准测试如果应用程序具有苛刻的性能要求,则应为应用程序创建性能基准测试,以确保它满足性能要求。性能要求高度依赖于应用程序,应确定哪些性能指标很重要。下面介绍了典型的实时应用程序性能指标。如果…

USBIP

USBIP USB/IP 是一个开源项目,已合入 Kernel,在 Linux 环境下可以通过使用 USB/IP 远程共享 USB 设备。 USB Client:使用USB的终端,将server共享的usb设备挂载到本地。 USB Server:分享本地的usb设备至远程。 USBIP…

Python的入门知识汇集

创建 Python的创始人为Guido van Rossum。1989年圣诞节期间,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。 什么是Pyhton Pytho…

委派模式——从SLF4J说起

作者:vivo 互联网服务器团队- Xiong yangxin 将某个通用解决方案包装成成熟的工具包,是每一个技术建设工作者必须思考且必须解决的问题。本文从业内流行的既有工具包入手,解析实现思路,沉淀一般方法。为技术建设的初学者提供一些实…

Gorm连接以及CURD实战+测试

Gorm CRUD 前言 Gorm是go的一个ORM框架,官方文档地址为-> GORM 指南 本文将介绍与gorm有关的CRUD操作,操作数据库类型为mysql数据库 数据库连接 func Open(dialector Dialector, opts …Option) (db *DB, err error) 该函数用于进行gorm连接对应…

中国市场手机出货量跌穿3亿部,苹果也顶不住了,只有三星暗爽

多家市调机构都给出了2022年中国智能手机市场的数据,数据虽然有些出入,不过都认为中国市场的手机出货量跌穿了3亿部,创下近10年来的新低纪录,国产手机尤其惨,而曾逆势增长的苹果也开始出现下滑。市调机构IDC给出的数据…

词法分析器Flex学习1 - Flex识别关键字

以前曾写过2篇Flex和Bison入门应用的文章; https://blog.csdn.net/bcbobo21cn/article/details/112343850 https://blog.csdn.net/bcbobo21cn/article/details/106193648 我只记得Flex是词法分析器,Bison是语法分析器; 只是一些入门的介绍&…

基于SSM+Layui的图书管理系统(Java版 附源代码及数据库)

目录 功能要求 技术栈 项目架构 登录界面 系统首页 借阅管理 图书管理 读者管理 类型管理 公告管理 管理员管理 统计分析 数据库设计 源代码数据库资料 毕设项目专栏 功能要求 (1)对系统登陆后进行增删改查功能 (2)…

文档管理对人力资源部门的重要影响

文档管理对人力资源部门的重要影响 当人力资源的管理功能是基于纸张或依赖于 Excel 电子表格、共享驱动器和其他无法与其他系统共享数据的软件等技术时,人力资源管理既耗时又耗费劳动力。用数字工作流程取代纸质流程可以简化从招聘和入职到绩效评估的流程。 随着组…

Elasticsearch(七)--ES文档的操作(下)---删除文档

一、前言 上篇文章我们了解了ES的修改文档的操作,也同样分别通过ES的kibana客户端以及Java高级Rest客户端进行学习,那么本篇末尾要给大家介绍的是对文档的删除操作,同新修改文档,也有删除单条文档和批量删除文档操作,…

工赋开发者社区 | 工业5.0为何是下一个10年的制造业关键性变革方向?

近年来,全球经济发展面临下行压力,世界各国重新认识到制造业在拉动经济增长、创造就业机会等方面的作用。欧洲在这种压力下提出了全新的工业5.0发展概念,试图重振制造业并再次引领全球工业发展潮流。本文小编分享一篇来自KNOWHOW的文章&#…

【地铁上的Redis与C#】数据类型(八)--set类型基本操作

这篇文章,我们开始学习set类型,学习set类型前我们先来看一下List类型有什么缺点。 List的缺点 当需要存储大量数据并且要提供高效率的查询时,List是无法完全实现的,这是因为list的存储结构是链表的形式,链表读取数据…

Leetcode力扣秋招刷题路-0114

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 114. 二叉树展开为链表(Mid) 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中…

Linux- 系统随你玩之--文本、字符串处理摸金校尉--RE

文章目录1、前言2、正则表达式2.1、 概述2.2、 特点2.3、正则表达式-测试工具3、知识点3.1、 正则表达式定义3.2、 正则表达式的组成3.3、正则表达式语法支持情况4、速记理解技巧4.1、基础正则表达式4.2、等价4.3、常用运算符与表达式4.4、分割语法4.4.1、例型4.4.2、例型语法与…

Java高手速成 | JSP MVC模式项目案例

MVC模式的核心思想是有效地组合“视图”“模型”和“控制器”。在JSP 技术中,视图是一个或多个JSP页面,其作用主要是向控制器提交必要的数据和为模型提供数据显示;模型是一个或多个Javabean对象,用于存储数据;控制器是…

LifeCycle源码解析

简介 Lifecycle是Jetpack中的一个生命周期组件,可用来感知其他组件(如Activity,Fragment)生命周期的变化,从而可以保证我们的一些代码操作控制在合理的生命周期内; 如何使用? 添加以下依赖 …

什么是接口、接口测试、接口自动化测试、你分的清楚吗?

目录 前言: 服务端接口测试介绍 什么是服务端? 什么是接口? 什么是接口测试? 为什么要做接口测试? 如何做接口测试? 接口测试自动化介绍 为什么是接口测试自动化? 为什么要做接口测试自…

什么是动态域名解析?域名怎么解析到内网IP

首先说说什么是域名解析,域名解析就是把域名解析成一个ip地址,我们大多数人都喜欢记忆域名,但是机器只认识IP地址,把这个IP地址对应相关域名,这就叫域名解析。动态域名与动态域名解析是相互关联的关系,通过…

项目图床选择

总结: 非隐私图片:使用Github、七牛云(http)、SM.MS图床、路过图床。隐私图片:使用阿里云OSS、七牛云(https)(绑定的域名不能丢)。 测试环境(日常使用)自行选择; 生产环境选择阿里云…