图像修复算法常用评估指标介绍及Python代码(PSNR/SSIM/FID)

目录

峰值信噪比PSNR(Peak Signal-to-Noise Ratio)

结构相似度SSlM(Structural Similarity Index Measurement)

FID(Fréchet Inception Distance)

代码实践:计算两张图片之间的PSNR和SSIM

代码实践:计算两个文件夹图片之间的PSNR和SSIM


基于Python计算两张图片/两个文件夹图片之间的PSNR和SSIM参考另一篇博客:IQA-PyTorch快速使用教程

峰值信噪比PSNR(Peak Signal-to-Noise Ratio)

PSNR是最常用的图像质量评价指标之一。它衡量修复图像原始图像之间的均方根误差,并将其转化为分贝单位。PSNR值越高,表示修复图像与原始图像越接近。PSNR的单位为dB。

PSNR的计算公式如下:

式中:MAX_{J}^{2}_{}^{}为图像可取到的最大像素值,MSE为修复图像和对应真实图像的均方误差。

结构相似度SSlM(Structural Similarity Index Measurement)

SSIM是另一个衡量图像质量的指标,它考虑了亮度、对比度和结构信息之间的相似性。SSIM的值在-1到1之间,越接近1表示修复图像原始图像越相似。

SSIM基于滑动窗口实现计算,即每次计算时从图片上取一个尺寸为N×N的窗口,基于窗口计算SSIM的值,遍历整张图像后再对所有窗口的值取平均,得出整张图像的SSIM值。

SSIM的计算公式如下:

FID(Fréchet Inception Distance)

FID是一种常用于评估图像生成模型和修复算法性能的指标,是目前广泛使用的评估指标之一。它结合了图像质量和多样性,可以用来计算真实图像生成图像的特征向量之间距离的一种度量。FID值越小,则相似程度越高。最好的情况是FID=0,表示两个图像完全相同。

代码实践:计算两张图片之间的PSNR和SSIM

import pyiqa
import torchprint(pyiqa.list_models())
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")# psnr
# iqa_metric = pyiqa.create_metric('psnr', test_y_channel=True, color_space='ycbcr').to(device)
# ssim
iqa_metric = pyiqa.create_metric('ssim', test_y_channel=True, color_space='ycbcr').to(device)score_fr = iqa_metric('./111/图片1.png', './222/图片2.png')
value = score_fr.cpu().item()      # 将张量移动到 CPU,再获取数值
print(value)

代码实践:计算两个文件夹图片之间的PSNR和SSIM

import os
import cv2
import numpy as np
import pyiqa
import torch# Device setup
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
iqa_metric = pyiqa.create_metric('psnr', test_y_channel=True, color_space='ycbcr').to(device)
# iqa_metric = pyiqa.create_metric('ssim', test_y_channel=True, color_space='ycbcr').to(device)# Path to ground truth and results
gt_path = './111'
results_path = './222'# Function to compute PSNR values
def calculate_psnr(gt_path, results_path):psnr_values = []# List all images in the ground truth and results directoriesgt_images = sorted(os.listdir(gt_path))result_images = sorted(os.listdir(results_path))for gt_image, result_image in zip(gt_images, result_images):gt_image_path = os.path.join(gt_path, gt_image)result_image_path = os.path.join(results_path, result_image)# Read the imagesgt_img = cv2.imread(gt_image_path, cv2.IMREAD_COLOR).astype(np.float32) / 255.0result_img = cv2.imread(result_image_path, cv2.IMREAD_COLOR).astype(np.float32) / 255.0# Check if images have the same shapeif gt_img.shape != result_img.shape:print(f'Skipping {gt_image} and {result_image} due to mismatched dimensions.')continue# Move images to the device and compute PSNRgt_tensor = torch.tensor(gt_img).permute(2, 0, 1).unsqueeze(0).to(device)  # (1, C, H, W)result_tensor = torch.tensor(result_img).permute(2, 0, 1).unsqueeze(0).to(device)  # (1, C, H, W)psnr_value = iqa_metric(result_tensor, gt_tensor).item()psnr_values.append(psnr_value)print(f'PSNR between {gt_image} and {result_image}: {psnr_value:.2f} dB')return psnr_values# Call the function
psnr_results = calculate_psnr(gt_path, results_path)
average_psnr = np.mean(psnr_results) if psnr_results else 0
print(f'Average PSNR: {average_psnr:.2f} dB')

以上代码如有错误,欢迎各位读者大大在评论区指出!

参考链接:

1、图像处理之图像质量评价指标PSNR(峰值信噪比)-CSDN博客

 2、图像质量评估指标——SSIM介绍及计算方法-CSDN博客

3、【pytorch】FID讲解以及pytorch实现

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

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

相关文章

家庭财务管理系统的设计与实现ssm小程序+论文源码调试讲解

2系统关键技术 2.1 微信小程序 微信小程序,简称小程序,英文名Mini Program,是一种全新的连接用户与服务的方式,可以快速访问、快速传播,并具有良好的使用体验。 小程序的主要开发语言是JavaScript,它与普…

天润融通亮相CCFA论坛:AI Agent引领零售业服务精细化运营

在新时期实现零售的进化,AI Agent助力客户精细化运营 11月19-21日,CCFA新消费论坛——2024中国零售创新大会在上海召开。大会围绕“在新时期实现零售的进化”主题,通过探讨零售新趋势、新势力、新模式,聚焦新产品、新渠道、新生活…

医学临床机器学习中算法公平性与偏差控制简析

摘要 随着医疗领域中数据的不断积累和计算能力的提升,临床机器学习技术发展迅速,但算法不公平性和偏差问题凸显。本文深入探讨了临床机器学习算法公平性的重要性、概念与定义、在临床应用中的影响、偏差来源、降低偏差方法及提升公平性策略。通过对不同…

如何抓取亚马逊页面动态加载的内容:Python爬虫实践指南

引言 在现代电商领域,数据的重要性不言而喻。亚马逊作为全球领先的电商平台,其页面上动态加载的内容包含了丰富的商品信息。然而,传统的爬虫技术往往难以应对JavaScript动态加载的内容。本文将详细介绍如何使用Python结合Selenium工具来抓取…

MongoDB分片集群架构实战

分片集群架构 分片简介 分片(shard)是指在将数据进行水平切分之后,将其存储到多个不同的服务器节点上的一种扩展方式。分片在概念上非常类似于应用开发中的“水平分表”。不同的点在于,MongoDB本身就自带了分片管理的能力&#…

opencvocr识别手机摄像头拍摄的指定区域文字,文字符合规则就语音报警

安装python,pycharm,自行安装。 Python下安装OpenCv 2.1 打开cmd,先安装opencv-python pip install opencv-python --user -i https://pypi.tuna.tsinghua.edu.cn/simple2.2 再安装opencv-contrib-python pip install opencv-contrib-python --user …

[报错] Error: PostCSS plugin autoprefixer requires PostCSS 8 问题解决办法

报错:Error: PostCSS plugin autoprefixer requires PostCSS 8 原因:autoprefixer版本过高 解决方案: 降低autoprefixer版本 执行:npm i postcss-loader autoprefixer8.0.0 参考: Error: PostCSS plugin autoprefix…

Go学习:编译器(编写程序时应该注意的点)

一、注意: LiteIDE工具: (1)创建项目后,同一个目录下的go文件 只能有一个 main函数,如果多个文件都有main函数,会出现编译错误。例如: (2)如果一个目录下多…

自然语言处理期末试题汇总

建议自己做,写完再来对答案。答案可能存在极小部分错误,不保证一定正确。 一、选择题 1-10、C A D B D B C D A A 11-20、A A A C A B D B B A 21-30、B C C D D A C A C B 31-40、B B B C D A B B A A 41-50、B D B C A B B B B C 51-60、A D D …

市场爆火的“生成式AI大模型”证书如何报考?

随着科技的飞速发展,生成式人工智能正以前所未有的速度渗透到各行各业。从创作艺术、生成音乐到推动虚拟世界的构建,这项技术以其卓越的创新能力改变了传统的生产和创意模式。生成式人工智能不仅仅是数据的复制和再现,而是通过算法实现内容的…

Electron-vue 框架升级 Babel7 并支持electron-preload webapck 4 打包过程记录

前言 我这边一直用的electron-vue框架是基于electron 21版本的,electron 29版本追加了很多新功能,但是这些新功能对开发者不友好,对electron构建出来的软件,使用者更安全,所以,我暂时不想研究electron 29版…

浏览器渲染流程

1.渲染模式 标准模式和怪异模式(Quirks Mode)是两种不同的文档渲染模式,用于指示浏览器如何解析HTML、CSS等页面内容。标准模式是指浏览器按照W3C规范的流程进行解析和渲染网页,这样可以确保不同浏览器对同一份代码的渲染结果基本…

ElementUI 问题清单

1、form 下面只有一个 input 时回车键刷新页面 原因是触发了表单默认的提交行为&#xff0c;给el-form 加上submit.native.prevent就行了。 <el-form inline submit.native.prevent><el-form-item label"订单号"><el-inputv-model"query.order…

ArcGIS求取多个点距离线要素的最近距离以及距离倒数

本文介绍在ArcMap软件中&#xff0c;对于点要素中的每一个点&#xff0c;求取其距离最近的道路的距离、距离倒数的方法。 首先&#xff0c;看一下本文的需求。现在已知一个点要素&#xff0c;其中含有多个点&#xff0c;假设每一个点表示城市中的一家商店&#xff1b;同时&…

【数据库系列】Spring Boot如何配置Flyway的回调函数

Flyway 提供了回调机制&#xff0c;使您能够在特定的数据库迁移事件发生时执行自定义逻辑。通过实现 Flyway 的回调接口&#xff0c;可以在迁移前后执行操作&#xff0c;如记录日志、执行额外的 SQL 语句等。 1. 创建自定义回调类 要配置 Flyway 的回调函数&#xff0c;需要创…

网络安全(1)_对称加密和非对称加密

1 网络安全概述 1.1 计算机网络面临的安全威协 &#xff08;1&#xff09;截获&#xff1a;攻击者从网络上窃听他人的通信内容&#xff0c;通常把这类攻击称为“截获”。在被动攻击中&#xff0c;攻击者只是观察和分析某一个协议数据单元&#xff08;PDU&#xff09;而不干扰信…

【查询基础】.NET开源 ORM 框架 SqlSugar 系列

&#x1f4a5; .NET开源 ORM 框架 SqlSugar 系列 &#x1f389;&#x1f389;&#x1f389; 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列…

计算机毕业设计Python+大模型农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

C语言——指针基础

1 指针基础 怎么获得变量地址 1 如何产生一个指针变量——>类型* 标识符;int* p1;char* p2;double* p3;//不同类型的基本指针占用内存是一样的都是4个字节&#xff08;32位&#xff09;/8个字节&#xff08;64位&#xff09;&#xff0c;都是存的地址2 数组名是数组首地址…

Python语法基础---正则表达式

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 我们这个文章所讲述的&#xff0c;也是数据分析的基础文章&#xff0c;正则表达式 首先&#xff0c;我们在开始之前&#xff0c;引出一个问题。也是我们接下来想要解决的问题。…