马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1. PSNR(Peak Signal-to-Noise Ratio,峰值信噪比)
1.1. 界说
PSNR是一种常用的评价图像质量的指标,它通过比较失真图像和原始图像来衡量图像恢复质量的优劣。PSNR是基于MSE(均方误差)计算得出的,用于衡量图像重建的误差。
1.2. 阐明
PSNR是基于像素值的全局评估,不思量图像的结构信息。
- PSNR接近50dB:表示压缩后的图像质量非常高,仅有非常小的误差。在这种环境下,原始图像和压缩后的图像之间的差别几乎不可察觉。
- PSNR大于30dB:通常认为,人眼很难察觉到这种压缩水平下图像的失真。这意味着压缩后的图像在视觉上与原始图像非常接近。
- PSNR介于20dB到30dB之间:在这个范围内,人眼可以开始察觉到图像的一些差别,但这些差别通常不会太显著。
- PSNR介于10dB到20dB之间:在这个范围内,人眼可以较为明显地看出图像的差别,但仍然可以辨识出图像的根本结构。只管存在失真,但人们大概仍然会认为两张图像是相似的。
- PSNR低于10dB:当PSNR值非常低时,图像的质量会显著下降,以至于人眼很难判定两个图像是否为同一场景的图像,或者一个图像是否为另一个图像的有用压缩版本。
1.3. 代码
利用Python和kornia库来计算图像的峰值信噪比(PSNR),kornia是一个开源的库,它提供了一系列用于计算机视觉的神经网络工具,包括图像质量评估指标的计算。
- import torch
- import kornia.losses
-
- # 假设 images 和 encoded_images 是已经加载或处理的图像张量
- # images = ...
- # encoded_images = ...
-
- # 计算 PSNR
- psnr_value = - kornia.losses.psnr_loss(encoded_images.detach(), images, 2)
- print(f"PSNR: {psnr_value.item()}")
复制代码 2. SSIM(Structural Similarity Index,结构相似性指数)
2.1. 界说
结构相似性指数是一种更为先辈的图像质量评估指标,它不但思量像素值的差别,还思量图像的结构信息。
2.2. 阐明
SSIM在0到1之间,值越接近1表示图像质量越好。
SSIM思量了图像的亮度、对比度和结构信息,因此比PSNR更符合人眼视觉特性。
2.3. 代码
- import torch
- import kornia.losses
-
- # 假设 images 和 encoded_images 是已经加载或处理的图像张量
- # images = ...
- # encoded_images = ...
-
-
- # 计算 SSIM
- ssim_value = 1 - 2 * kornia.losses.ssim_loss(encoded_images.detach(), images, window_size=11, reduction="mean")
- print(f"SSIM: {ssim_value.item()}")
复制代码 3. LPIPS(Learned Perceptual Image Patch Similarity,学习感知图像块相似性)
3.1. 界说
LPIPS利用一个预练习的深度网络(如VGG网络)来提取图像的特性,然后计算这些特性之间的间隔。具体来说,它计算了两幅图像在多个层的特性之间的欧氏间隔,并将这些间隔聚合起来得到终极的相似度分数。
3.2. 阐明
LPIPS的取值范围是[0, 1],值越小表示图像质量越好。
由于LPIPS基于深度学习,它可以捕捉到更复杂的图像特性和感知差别,因此在许多环境下比PSNR和SSIM更准确。
3.3. 代码
- import lpips
- import torch
- from PIL import Image
- from torchvision import transforms
-
- # 加载图像并转换为张量
- image1 = Image.open("path_to_image1.jpg").convert('RGB')
- image2 = Image.open("path_to_image2.jpg").convert('RGB')
-
- # 定义图像预处理步骤
- preprocess = transforms.Compose([
- transforms.Resize((256, 256)),
- transforms.ToTensor(),
- transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
- ])
-
- image1_tensor = preprocess(image1).unsqueeze(0) # 添加批次维度
- image2_tensor = preprocess(image2).unsqueeze(0)
-
- # 确保图像张量在正确的设备上
- device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
- image1_tensor = image1_tensor.to(device)
- image2_tensor = image2_tensor.to(device)
-
- # 初始化LPIPS模型
- lpips_model = lpips.LPIPS(net='vgg').to(device)
-
- # 计算LPIPS
- lpips_value = lpips_model(image1_tensor, image2_tensor).item()
-
- print(f"LPIPS: {lpips_value}")
复制代码 4. FID(Fréchet Inception Distance)
4.1. 界说
FID的计算是基于两个图像分布之间的特性向量空间的Fréchet间隔。以下是FID的计算公式:
4.2. 阐明
较小的 FID 值表示天生的图像与真实图像在特性空间中的分布更为接近,意味着天生模型可以或许天生更逼真、更接近真实数据分布的样本,表明天生模型的性能更好。
而较大的 FID 值则意味着天生的图像与真实图像的差别较大,天生模型的性能相对较差。
4.3. 代码
- import numpy as np
- from scipy
- .linalg import sqrtm
- # 两个示例特征向量集合的均值和协方差矩阵
- mu_P = np.array([0.5, 0.5])
- sigma_P = np.array([[1.0, 0.5], [0.5, 1.0]])
- mu_G = np.array([0.8, 0.7])
- sigma_G = np.array([[1.2, 0.4], [0.4, 1.3]])
- # 计算FID
- diff = mu_P - mu_G
- covar_trace = np.trace(sigma_P + sigma_G - 2.0 * sqrtm(sigma_P @ sigma_G))
- fid = np.dot(diff, diff) + covar_trace
- print(f"FID Value: {fid}")
复制代码 参考文献
常用图像评价指标以及代码 :PSNR、SSIM、 LPIPS_psnr ssim lpips-CSDN博客
3DGS中图像质量评估三板斧——PSNR/SSIM/LPIPS_psnr ssim lpips-CSDN博客
https://zhuanlan.zhihu.com/p/658827245
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |