凡科做网站要钱,代理公司韩剧剧情介绍,蓝色网站导航,打开浏览器历史记录均方误差#xff08;Mean Squared Error#xff0c;MSE#xff09;#xff1a;计算两个图像像素之间的平均差异的平方。MSE越小#xff0c;表示两个图像越接近。 均方根误差#xff08;Root Mean Squared Error#xff0c;RMSE#xff09;#xff1a;MSE的平方根。RM… 均方误差Mean Squared ErrorMSE计算两个图像像素之间的平均差异的平方。MSE越小表示两个图像越接近。 均方根误差Root Mean Squared ErrorRMSEMSE的平方根。RMSE也用于衡量两个图像之间的差异与MSE类似但更易于解释。 均方根对数似然比误差Root Mean Square Logarithmic ErrorRMSLE计算两个图像像素值的对数之间的均方根差异。RMSLE通常在图像处理和计算机视觉任务中使用。 结构相似性指数Structural Similarity IndexSSIM衡量两个图像在结构、纹理和亮度方面的相似性。SSIM值介于0和1之间值越接近1表示图像越相似。 峰值信噪比Peak Signal-to-Noise RatioPSNR衡量图像失真程度的指标常用于图像和视频压缩评估。PSNR值越高表示图像质量越好。 结构相位相似性Structural Phase SimilaritySPS类似于SSIM但在相位信息上进行比较。SPS测量了两个图像在结构和纹理方面的相似性。 多尺度结构相似性Multi-Scale Structural SimilarityMS-SSIM对图像进行多尺度分解并计算每个尺度上的SSIM值然后进行加权平均得到最终的相似性指数。
这些指标可以根据具体需求选择使用不同的指标适用于不同的应用场景。 峰值信噪比Peak Signal-to-Noise RatioPSNR 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 IndexSSIM SSIM可以衡量重建图像与原始图像之间结构相似性的指标数值越接近1表示重建图像质量越好
import torch
import torch.nn.functional as Fdef ssim(img1, img2, window_size11, size_averageTrue):# 设置窗口参数channels img1.size(1)window create_window(window_size, channels).to(img1.device)# 计算图像均值、方差和协方差mu1 F.conv2d(img1, window, paddingwindow_size//2, groupschannels)mu2 F.conv2d(img2, window, paddingwindow_size//2, groupschannels)mu1_sq mu1.pow(2)mu2_sq mu2.pow(2)mu1_mu2 mu1 * mu2sigma1_sq F.conv2d(img1 * img1, window, paddingwindow_size//2, groupschannels) - mu1_sqsigma2_sq F.conv2d(img2 * img2, window, paddingwindow_size//2, groupschannels) - mu2_sqsigma12 F.conv2d(img1 * img2, window, paddingwindow_size//2, groupschannels) - 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)