深度学习(24): 计算两个图像的LPIPS,SSIM指标 (python代码)

1. 计算LPIPS

1.0.说明

LPIPS:学习感知图像块相似度(Learned Perceptual Image Patch Similarity, LPIPS)也称为“感知损失”(perceptual loss),用于度量两张图像之间的差别。来源于CVPR2018《The Unreasonable Effectiveness of Deep Features as a Perceptual Metric》

1.1. 代码

要计算两张图片之间的LPIPS(Learned Perceptual Image Patch Similarity)距离,可以使用已经训练好的LPIPS模型来进行计算。以下是一个示例代码,演示了如何使用PyTorch和LPIPS模型计算两张图片的LPIPS距离:

import torch
import lpips
from PIL import Image

# 假设您已经有了要计算LPIPS距离的两张图片 image1 和 image2
# 加载图像文件
image1 = Image.open("image1.jpg")
image2 = Image.open("image2.jpg")

# 加载预训练的LPIPS模型
lpips_model = lpips.LPIPS(net="alex")

# 将图像转换为PyTorch的Tensor格式
image1_tensor = torch.tensor(np.array(image1)).permute(2, 0, 1).unsqueeze(0).float() / 255.0
image2_tensor = torch.tensor(np.array(image2)).permute(2, 0, 1).unsqueeze(0).float() / 255.0

# 使用LPIPS模型计算距离
distance = lpips_model(image1_tensor, image2_tensor)

print("LPIPS distance:", distance.item())

在上述代码中,您需要将要计算LPIPS距离的两张图片存储在变量image1和image2中(可以使用PIL库的Image.open()函数加载图像文件)。

然后,我们加载了预训练的LPIPS模型,这里使用了alex网络。您可以根据需要选择其他可用的网络,如vggsqueeze

接下来,我们将图像转换为PyTorch的Tensor格式,并进行归一化处理,将像素值范围从[0, 255]归一化到[0, 1]。注意,这里的图像顺序是通道在前,即形状为[C, H, W]。

最后,我们使用LPIPS模型对两张图像的Tensor进行计算,得到LPIPS距离。距离的值通过distance.item()获取。

请确保安装了PyTorch和lpips库。您可以使用以下命令安装lpips库:

pip install lpips

2. 计算SSIM

2.0 说明

结构相似性指数(SSIM,Structural Similarity Index)

2.1 代码

安装

pip install scikit-image
import cv2
from skimage import metrics

# Assume you have two image files: image1.jpg and image2.jpg

# Load the images
image1 = cv2.imread("image1.jpg")
image2 = cv2.imread("image2.jpg")

# Convert images to grayscale
gray_image1 = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
gray_image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)

# Compute SSIM
ssim_score = metrics.structural_similarity(gray_image1, gray_image2)

print("SSIM score:", ssim_score)

使用cv2.imread()函数加载图像文件,并将其分别存储在变量image1和image2中。

然后,将图像转换为灰度图像,以便计算SSIM。使用cv2.cvtColor()函数将图像从BGR色彩空间转换为灰度色彩空间。

最后,使用skimage.measure.compare_ssim()函数计算两张灰度图像之间的SSIM。

### LPIPS 图像质量评估方法介绍 Learned Perceptual Image Patch Similarity (LPIPS) 是一种基于深度学习图像相似度评估指标。与传统基于误差的方法不同,LPIPS 利用了预训练的神经网络模型来捕捉图像内容之间的感知相关性,进而提供了一种更加贴近人类视觉系统的图像质量评价方式[^3]。 #### 工作原理 LPIPS 的核心在于通过预先训练好的卷积神经网络提取特征图,并计算这些特征图之间的距离作为图像间的差异度量。具体而言: - **特征提取**:采用经过大规模数据集训练后的 CNN 模型(如 VGG 或 AlexNet),从输入图片的不同层次抽取抽象特征表示; - **空间池化**:对于每一对对应位置上的特征向量执行加权求和操作; - **最终得分**:汇总所有层面上的空间平均差值得到整体评分。 这种方法不仅考虑到了像素级别的变化,更重要的是它能够反映高层语义信息的变化情况,在处理诸如风格迁移、超分辨率重建等问题时表现出色。 ```python import lpips from PIL import Image import torch # 初始化LPIPS损失函数,默认使用alexnet架构 loss_fn_alex = lpips.LPIPS(net='alex') img0 = transform(Image.open('image0.jpg')) # 参考图像 img1 = transform(Image.open('image1.jpg')) # 待测图像 dist = loss_fn_alex(img0, img1) print(f"LPIPS Distance: {dist.item()}") ``` 此代码片段展示了如何利用 Python 中 `lpips` 库实现两幅图像LPIPS 距离的简单测量过程。 #### 应用场景 由于其独特的优势——即更接近于人的主观感受来进行比较判断,因此被广泛应用于多个领域: - **计算机视觉任务中的性能评测** - 如图像修复、去噪、增强等技术的效果验证。 - **艺术创作和技术开发辅助工具** - 对生成对抗网络(GANs)产生的作品进行量化分析,帮助调整参数优化输出效果。 - **多媒体通信系统内的传输效率提升研究** - 当涉及到压缩算法设计或者视频流媒体服务的质量监控等方面。 综上所述,作为一种先进的图像质量评估手段,LPIPS 不仅弥补了传统方法存在的不足之处,而且为众多科研工作者提供了强有力的支持平台。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值