图像img2img任务任务中评估指标

  1. 均方误差(Mean Squared Error,MSE):计算两个图像像素之间的平均差异的平方。MSE越小,表示两个图像越接近。

  2. 均方根误差(Root Mean Squared Error,RMSE):MSE的平方根。RMSE也用于衡量两个图像之间的差异,与MSE类似,但更易于解释。

  3. 均方根对数似然比误差(Root Mean Square Logarithmic Error,RMSLE):计算两个图像像素值的对数之间的均方根差异。RMSLE通常在图像处理和计算机视觉任务中使用。

  4. 结构相似性指数(Structural Similarity Index,SSIM):衡量两个图像在结构、纹理和亮度方面的相似性。SSIM值介于0和1之间,值越接近1表示图像越相似。

  5. 峰值信噪比(Peak Signal-to-Noise Ratio,PSNR):衡量图像失真程度的指标,常用于图像和视频压缩评估。PSNR值越高,表示图像质量越好。

  6. 结构相位相似性(Structural Phase Similarity,SPS):类似于SSIM,但在相位信息上进行比较。SPS测量了两个图像在结构和纹理方面的相似性。

  7. 多尺度结构相似性(Multi-Scale Structural Similarity,MS-SSIM):对图像进行多尺度分解,并计算每个尺度上的SSIM值,然后进行加权平均得到最终的相似性指数。

这些指标可以根据具体需求选择使用,不同的指标适用于不同的应用场景。

峰值信噪比(Peak Signal-to-Noise Ratio,PSNR): PSNR是衡量重建图像与原始图像之间峰值信噪比的指标,数值越高表示重建图像质量越好。

import torch
import torch.nn.functional as Fdef psnr(img1, img2):mse = F.mse_loss(img1, img2)psnr = 10 * torch.log10(1 / mse)return psnrdef psnr(img1, img2):mse = F.mse_loss(img1, img2)psnr = 10 * torch.log10(255** 2 / mse)return psnr

结构相似性指数(Structural Similarity Index,SSIM): SSIM可以衡量重建图像与原始图像之间结构相似性的指标,数值越接近1表示重建图像质量越好

import torch
import torch.nn.functional as Fdef ssim(img1, img2, window_size=11, size_average=True):# 设置窗口参数channels = img1.size(1)window = create_window(window_size, channels).to(img1.device)# 计算图像均值、方差和协方差mu1 = F.conv2d(img1, window, padding=window_size//2, groups=channels)mu2 = F.conv2d(img2, window, padding=window_size//2, groups=channels)mu1_sq = mu1.pow(2)mu2_sq = mu2.pow(2)mu1_mu2 = mu1 * mu2sigma1_sq = F.conv2d(img1 * img1, window, padding=window_size//2, groups=channels) - mu1_sqsigma2_sq = F.conv2d(img2 * img2, window, padding=window_size//2, groups=channels) - mu2_sqsigma12 = F.conv2d(img1 * img2, window, padding=window_size//2, groups=channels) - mu1_mu2# 计算SSIM值C1 = (0.01 * 255)**2C2 = (0.03 * 255)**2numerator = (2 * mu1_mu2 + C1) * (2 * sigma12 + C2)denominator = (mu1_sq + mu2_sq + C1) * (sigma1_sq + sigma2_sq + C2)ssim_map = numerator / denominatorif size_average:return ssim_map.mean()else:return ssim_map.mean(1).mean(1).mean(1)def gaussian(window_size, sigma):gauss = torch.exp(-(torch.arange(window_size) - window_size//2)**2 / (2*sigma**2))return gauss / gauss.sum()def create_window(window_size, channels):_1D_window = gaussian(window_size, 1.5).unsqueeze(1)_2D_window = _1D_window.mm(_1D_window.t()).float().unsqueeze(0).unsqueeze(0)window = _2D_window.expand(channels, 1, window_size, window_size).contiguous()return window# 示例用法
img1 = torch.randn(1, 3, 256, 256)  # 输入图像1
img2 = torch.randn(1, 3, 256, 256)  # 输入图像2ssim_value = ssim(img1, img2)
print(ssim_value)

其它

import torch
import torch.nn.functional as Fdef rmse(img1, img2):mse = F.mse_loss(img1, img2)rmse_value = torch.sqrt(mse)return rmse_valuedef sps(img1, img2):fft1 = torch.fft.fftn(img1)fft2 = torch.fft.fftn(img2)phase_corr = torch.cos(fft1.angle() - fft2.angle())sps_value = torch.mean(phase_corr)return sps_value计算RMSLE时,使用1加上两个图像像素值之间的差异的平方。这里加1的目的是为了避免当差异为0时取对数的问题。如果两个像素值相等,即img1 - img2 = 0,那么计算log(1 + (img1 - img2)**2)时,如果没有加1,就会变成log(0),这将导致无穷大或错误的结果。通过加1,我们确保了即使差异为0,取对数时也不会出现问题。
因此,在计算RMSLE时,通常会在差异平方的基础上加1,以确保计算的稳定性和正确性。def rmsle(img1, img2):log_diff = torch.log(1 + (img1 - img2)**2)rmsle_value = torch.sqrt(torch.mean(log_diff))return rmsle_value# 示例用法
img1 = torch.randn(1, 3, 256, 256)  # 输入图像1
img2 = torch.randn(1, 3, 256, 256)  # 输入图像2rmse_value = rmse(img1, img2)
sps_value = sps(img1, img2)
rmsle_value = rmsle(img1, img2)print("RMSE:", rmse_value)
print("SPS:", sps_value)
print("RMSLE:", rmsle_value)

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

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

相关文章

编程之外,生活的美好航程

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

回顾Django的第二天

1.http 1.1http请求协议与响应协议 1.1.1简介 http协议包含由浏览器发送数据到服务器需要遵循的请求协议与服务器发送数据到浏览器需要遵循的请求协议。用于HTTP协议交互的信被为HTTP报文。请求端(客户端)的HTTP报文 做请求报文,响应端(服务器端)的 做响应报文。HTTP报文本身…

使用JAVA语言写一个排队叫号的小程序

以下是一个简单的排队叫号的小程序&#xff0c;使用JAVA语言实现。 import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class NumberingSystem {public static void main(String[] args) {Queue<String> queue new LinkedList<…

PCB布线为什么不能走直角或锐角-笔记

PCB布线为什么不能走直角或锐角-笔记 摘要一.PCB走线在直角转弯的地方&#xff0c;信号前后部分相互影响这几个理由我们来一一分析一下传输线的直角带来的寄生电容从阻抗的角度来看直角的尖角产生放电或者电磁辐射走线直角的工艺问题 摘要 有一定熟悉画过PCB板的人或者PCB教学…

Linux常用命令——mv命令

文章目录 1. 简介2. 命令格式3. 主要参数4. 常见用法及示例4.1 移动文件4.2 重命名文件4.3 交互式移动文件4.4 强制移动文件4.5 移动多个文件4.6 使用通配符移动文件 5. 注意事项6. 结论 1. 简介 mv 命令在Linux系统中用于移动文件或目录&#xff0c;同时也可以用于重命名文件…

【js】如何在不指定具体属性名,而是通过变量获取属性名,设置一个对象中多层级下的某个属性的值

为了优化这种赋值方式&#xff0c;可以考虑使用ES6的解构和展开运算符。 首先&#xff0c;我们可以使用解构运算符来提取需要赋值的变量&#xff0c;以增加代码的可读性和简洁性&#xff1a; const { ContainerKey, formId } obj; obj[ContainerKey][formId[0]][formId[1]] …

Ubuntu Server 20.04.6下Anaconda3安装Pytorch

环境 Ubuntu 20.04.6 LTS Anaconda3-2023.09-0-Linux-x86_64.sh conda 23.7.4 Pytorch 1.11.0 安装 先创建一个工作环境&#xff0c;环境名叫lia&#xff1a; conda create -n lia python3.8环境的使用方法如下&#xff1a; conda activate lia # 激活环境 conda deactiv…

【Java 基础 - 泛型机制详细解释】

Java 基础 - 泛型机制详解 为什么会引入泛型泛型的基本使用 泛型类泛型接口泛型方法泛型的上下限泛型数组深入理解泛型 如何理解Java中的泛型是伪泛型&#xff1f;泛型中类型擦除如何证明类型的擦除呢&#xff1f;如何理解类型擦除后保留的原始类型?如何理解泛型的编译期检查&…

查看Hive表信息及占用空间的方法

一、Hive下查看数据表信息的方法 方法1&#xff1a;查看表的字段信息 desc table_name; 方法2&#xff1a;查看表的字段信息及元数据存储路径 desc extended table_name; 方法3&#xff1a;查看表的字段信息及元数据存储路径 desc formatted table_name; 方法4&#xff1a;…

NetApp AFF A800:为人工智能、深度学习和大数据分析提供动力

NetApp AFF A800&#xff1a;为发挥混合云的最大优势提供动力 您对数据的掌控能力将决定您能否在数字化时代取得成功。借助作为全球速度最快的企业级 NVMe 闪存存储之一的 NetApp AFF A800&#xff0c;您可以突破性能的限制。通过行业领先的云集成&#xff0c;您可以管理从边缘…

Linux:docker的数据管理(6)

数据管理操作*方便查看容器内产生的数据 *多容器间实现数据共享 两种管理方式数据卷 数据卷容器 1.数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中&#xff0c;可将宿主机的目录挂载到数据卷上&#xff0c;对数据卷的修改操作立刻可见&#xff0c;并且更新数…

Springboot快速整合kafka

kafka的基本了解 kafka也是 目前常用的消息中间件,支持同步与异步通信,和rabbitmq一样,工作模式大概相同,并且被spingboot整合的后的都是 中间件Template的实列化客户端类 ,消费者监听注解为KafkaListener,和RabbitListener和很相似,这些消息中间件使用过后,发现大致都是相同的…

基于AT89C51单片机的节日彩灯门设计

1&#xff0e;设计任务 本设计采用单片机为主控芯片&#xff0c;结合外围电路组成彩灯门的控制系统器&#xff0c;用来控制16个彩色的LED发光&#xff0c;实现彩色亮点的循环移动&#xff1b;通过软件编程实现各种各样的彩色亮点平面循环移动&#xff0c;该彩色控制器可以通过输…

fastapi 后端项目目录结构 mysql fastapi 数据库操作

原文&#xff1a;fastapi 后端项目目录结构 mysql fastapi 数据库操作_mob6454cc786d85的技术博客_51CTO博客 一、安装sqlalchemy、pymysql模块 pip install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple pip install pymysql -i https://pypi.tuna.tsinghua.edu.…

IDE1007:当前上下文中不存在名称“xxx“

这种在Halcon中直接导出的代码不能直接放程序中&#xff0c;应该在控件中比如一个按钮中&#xff0c;就不会出错了。

【驱动】SPI驱动分析(五)-模拟SPI驱动

简介 模拟SPI驱动是一种软件实现的SPI总线驱动。在没有硬件SPI控制器的系统中&#xff0c;通过软件模拟实现SPI总线的功能。它允许在不修改硬件的情况下&#xff0c;通过GPIO&#xff08;通用输入/输出&#xff09;引脚模拟SPI总线的通信&#xff0c;从而与SPI设备进行数据交换…

单片机学习12——电容

电容的作用&#xff1a; 1&#xff09;降压作用&#xff1a; 容抗&#xff1a; Xc 1/2fc 串联分压原理。2100Ω的容量&#xff0c;50Hz的频率&#xff0c;可以得到1.5uF。断电之后&#xff0c;需要串联一个1MΩ的电阻放电。 那是不是可以使用2100欧姆的电阻来代替电容呢&am…

Redis基础系列-安装Redis

Redis基础系列-安装Redis 文章目录 Redis基础系列-安装Redis1. 环境要求2. 下载redis3. 安装4. 配置5 参考与感谢 1. 环境要求 &#xff08;安装C语言编译环境&#xff09;redis是用C语言开发的&#xff0c;所以需要安装C语言编译环境,中途可能会出现询问你是否需要可以安装&a…

useDispatch和store.dispatch

在 React 中&#xff0c;useDispatch 是 React Redux 提供的一个 hook&#xff0c;而 store.dispatch 是 Redux 中的一个方法。它们的作用是触发 Redux 中的 action&#xff0c;从而更新状态。下面是它们之间的主要区别&#xff1a; 使用场景&#xff1a; useDispatch: 这是 Re…

DS八大排序之直接选择排序和堆排序

前言 上一期我们已经介绍了&#xff0c;排序、为什么要有排序以及排序在实际生活中的应用。并且介绍并实现了直接插入排序和它的优化即希尔排序~&#xff01;本期我们再来学习一组排序 ---- "选择排序"即直接选择排序和堆排序~&#xff01; 本期内容介绍 直接选择排…