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

2023-12-01 11:52

本文主要是介绍图像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)

这篇关于图像img2img任务任务中评估指标的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/441060

相关文章

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编