PSNR/SSIM/LPIPS图像质量评估三件套(含代码)

在图像质量评估上,有三个重要指标:PSNR,SSIM,LPIPS。本文提供简易脚本分别实现。

PSNR,峰值信噪比,是基于MSE的像素比较低质量评估,一般30dB以上质量就不错,到40dB以上肉眼就很难分别了。
SSIM,结构相似性,从分布上来比较相似性,量化到(0-1)之间,越接近1则证明图像质量越好。具体数学公式可以看我之前的博客《SSIM》。
LPIPS,利用AI模型来量化图像之间的相似性。取值范围也是[0,1],与SSIM相反,LPIPS是越小则证明图像质量越好

像这种常见的图像质量评价指标,都会收录到torchmetrics里面。只需安装:

pip install torchmetrics

实验脚本:

import torch
from torchmetrics.image.lpip import LearnedPerceptualImagePatchSimilarity
from torchmetrics.image import StructuralSimilarityIndexMeasure
from torchmetrics.image import PeakSignalNoiseRatio_ = torch.manual_seed(123)def psnr_torch(img1, img2):mse = ((img1 - img2) ** 2).view(img1.shape[0], -1).mean(1, keepdim=True)return 20 * torch.log10(1.0 / torch.sqrt(mse))def psnr(img1, img2):metric = PeakSignalNoiseRatio()return metric(img1, img2)def ssim(img1, img2):metric = StructuralSimilarityIndexMeasure(data_range=1.0)return metric(img1, img2)def lpips(img1, img2):metric = LearnedPerceptualImagePatchSimilarity(net_type='vgg')return metric(img1, img2)def _main():img1 = torch.rand(1, 3, 100, 100)img2 = torch.rand(1, 3, 100, 100)# PSNRprint("PNSR: ", psnr_torch(img1, img2))print("PNSR1: ", psnr(img1, img2))print("SSIM: ", ssim(img1, img2))print("LPIPS: ", lpips(img1, img2))if __name__ == "__main__":_main()

代码里给了两种PSNR实现方法,计算结果差别不大。欢迎自取~

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

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

相关文章

Java例子

例题1 – 需要有 6中解决方式. 铁道部发布了一个售票任务,要求销售1000张票,要求有3个窗口来进行销售,请编写多线程程序来模拟这个效果 (该题涉及到线程安全,https://www.jb51.net/article/221008.htm)   …

compose学习

compose学习链接 Alertdialog | 你好 Compose

委托复习【C#】

原因: 主窗体内,新建子窗体后; 主窗体可以调用子窗体的【属性】【方法】等; 但是子窗体内无法调用主窗体的【属性】【方法】。 解决办法: 只有全局的属性和方法,才能被任意调用。 所以,2个窗体相…

零基础学python:10、 函数的基础3

函数 1. 生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。 #需求:生成一个1~10的整数列表 list1 = list(range(1,11)) print(list1) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]#需求:生成列表:[1*1, 2*2, 3*3, 4*4, 5*5, 6*6, …

C# WinForms应用程序中,FileSystemWatcher使用监视文件系统更改

在C# WinForms应用程序中,FileSystemWatcher 类用于监视文件系统更改,例如文件的创建、删除、修改以及目录的更改。以下是一个使用 FileSystemWatcher 的简单示例,展示了如何在WinForms应用程序中设置和使用它: 首先,…

ROS机器人入门第一课:ROS快速体验——python实现HelloWorld

文章目录 ROS机器人入门第一课:ROS快速体验——python实现HelloWorld一、HelloWorld实现简介(一)创建工作空间并初始化(二)进入 src 创建 ros 包并添加依赖 二、HelloWorld(Python版)(二)进入 r…

Java JDK8新日期API

一、 JDK8 中增加了一套全新的日期时间 API,这套 API 设计合理,是线程安全的。 java.time – 包含值对象的基础包java.time.chrono – 提供对不同的日历系统的访问java.time.format – 格式化和解析时间和日期java.time.temporal – 包括底层框架和扩展…

考研数学老师怎么选❓看这一篇就够了

张宇、汤家凤、武忠祥、李永乐、杨超、王式安、方浩这些老师都有自己擅长的细分 比如张宇老师,杨超,汤家凤,武忠祥老师的高数讲的很好,李永乐老师是线代的神,王式安、方浩概率论讲的很好,所以对于不同的学…

【文末附gpt升级4.0方案】FastGPT详解

FastGPT知识库结构讲解 FastGPT是一个基于GPT模型的知识库,它的结构可以分为以下几个部分: 1. 数据收集:FastGPT的知识库是通过从互联网上收集大量的文本数据来构建的。这些数据可以包括维基百科、新闻文章、论坛帖子等各种类型的文本。 2…

【openCV】手写算式识别

OpenCV 机器学习库提供了一系列 SVM 函数和类来实现 SVM 模型的训练和预测,方便用户实现自己的 SVM 模型,并应用于分类问题。本文主要介绍使用 openCV 实现手写算式识别的工作原理与实现过程。 目录 1 SVM 模型 1.1 SVM 模型介绍 1.2 SVM 模型原理 2…

在DelayMS加入bsp_Idle,把单片机延时空闲利用起来

在单片机应用中,使用延时函数 DelayMS() 会导致程序在延时期间无法执行其他任务, 这可能影响系统对一些响应时间要求较高的任务的处理。 为了提高系统的响应速度和利用单片机的空闲时间,可以在延时函数中加入 bsp_Idle() 函数, 以…

3.21系统栈、数据结构栈、栈的基本操作、队列、队列的基本操作------------》

栈 先进后出、后进先出 一、系统栈 大小:8MB 1、局部变量 2、未经初始化为随机值 3、代码执行到变量定义时为变量开辟空间 4、当变量的作用域结束时回收空间 5、函数的形参和返回值 6、函数的调用关系、保护现场和恢复现场 7、栈的增长方向,自高…

5.1.5、【AI技术新纪元:Spring AI解码】HuggingFace Chat

HuggingFace 推理端点允许您在云中部署和提供机器学习模型,使其可以通过 API 访问。 入门 关于 HuggingFace 推理端点的更多详细信息可以在此处找到。 先决条件 添加 spring-ai-huggingface 依赖项: <dependency><groupId>org.springframework.ai</groupId…

【Linux进程的状态】

目录 看Linux源码中的说法 如何查看进程状态&#xff1f; 各个状态的关系 僵尸进程 举个栗子 现象 僵尸进程的危害 孤儿进程 举个栗子 现象 进程的优先级 基本概念 为什么要有进程优先级&#xff1f; 查看系统进程 进程的大致属性 进程优先级vs进程的权限 Linu…

[Semi-笔记] 2023_TIP

目录 概要一&#xff1a;Conservative-Progressive Collaborative Learning&#xff08;保守渐进式协作学习&#xff09;挑战&#xff1a;解决&#xff1a; 二&#xff1a;Pseudo Label Determination for Disagreement&#xff08;伪标签分歧判定&#xff09;挑战&#xff1a;…

利用python进行接口测试及类型介绍

前言 其实我觉得接口测试很简单&#xff0c;比一般的功能测试还简单&#xff08;这话我先这样说&#xff0c;以后可能会删O(∩_∩)O哈&#xff01;&#xff09;&#xff0c;现在找工作好多公司都要求有接口测试经验&#xff0c;也有好多人问我&#xff08;也就两三个人&#x…

python离线安装依赖库 依赖库版本

问题&#xff1a;python开发过程中&#xff0c;下载安装某一功能模块&#xff0c;常常需要各种依赖库支持。如果在线安装&#xff0c;则非常方便简单&#xff0c;但往往需要离线下载所需的依赖库。但各种依赖库存在许多版本&#xff0c;如何准确快速知道我们所需要的依赖库呢&a…

解决微信小程序代码包大小限制方法

1 为什么微信小程序单个包的大小限制为 2MB 微信小程序单个包的大小限制为 2MB 是出于以下几个考虑&#xff1a; 保证小程序的启动速度&#xff1a;小程序的启动速度是影响用户体验的关键因素之一。如果包太大&#xff0c;会导致小程序启动时间过长&#xff0c;从而影响用户体…

node安装

这里写目录标题 https://nodejs.cn/ https://registry.npmmirror.com/binary.html?pathnode/ https://registry.npmmirror.com/binary.html?pathnode/v11.0.0/

初识CSS样式 与 文本背景样式

目录 前言: 1.什么是CSS: 2.关于css的主要特性: 2.1层叠性&#xff1a; 2.2继承性&#xff1a; 2.3优先级&#xff1a; 2.4.CSS的组成结构: 3.css样式的三种写法: 3.1内联样式&#xff1a; 3.1.2存在的优点和缺点: 3.2内部样式表&#xff1a; 3.2.2存在的优点和缺点:…