在PyTorch中,可以使用 torchvision 库中的 SSIM 函数来计算结构相似性指数 (SSIM)。

SSIM 函数的签名如下:
torchvision.metrics.SSIM(data_range: Union[int, float] = 1, win_size: int = 11,
win_sigma: float = 1.5, k1: float = 0.01, k2: float = 0.03, nonnegative_ssim:
bool = False, eps: float = 1e-8, reduction: str = 'mean')
其中,参数的含义如下:

data_range:输入数据的范围,通常为1.0或255.0。
win_size:滑动窗口的大小。
win_sigma:滑动窗口的高斯核标准差。
k1、k2:SSIM计算公式中的常数。
nonnegative_ssim:是否将SSIM限制在非负数范围内。
eps:数值稳定性的参数。
reduction:用于计算损失的降维方法,可以取值为 mean、sum 或 none。
下面是一个使用 SSIM 函数计算两张图片的 SSIM 值的例子:
import torch import torchvision.transforms.functional as F import torchvision.
metricsas metrics # 读取两张图片 img1 = F.to_tensor(F.resize(F.pil_loader('img1.jpg'),
(256, 256))).unsqueeze(0) img2 = F.to_tensor(F.resize(F.pil_loader('img2.jpg'),
(256, 256))).unsqueeze(0) # 计算 SSIM ssim = metrics.SSIM(data_range=1.0, win_size
=11, win_sigma=1.5, k1=0.01, k2=0.03, eps=1e-8, reduction='mean') print(ssim(
img1, img2))
其中,img1.jpg 和 img2.jpg 是两张待比较的图片。首先使用 pil_loader 函数读取图片,然后使用 resize
函数将图片大小调整为256x256,最后使用 to_tensor 函数将 PIL.Image 对象转换为 PyTorch 张量。

在计算 SSIM 值时,我们需要先创建一个 SSIM 对象,然后将两张图片作为参数传入即可。计算结果将会是一个标量张量

<>使用skimage计算
from skimage.measure import compare_ssim as ssim def ssim_metric(target: object
, prediction: object, win_size: int=21): """ introduce: calculate ssim. args:
:param ndarray target: target, like ndarray[256, 256]. :param ndarray
prediction: prediction, like ndarray[256, 256]. :param int win_size: default.
return: :param float cur_ssim: return ssim, between [-1, 1], like 0.72. """
cur_ssim= ssim( target, prediction, win_size=win_size, data_range=target.max() -
target.min(), ) return cur_ssim
<>SSIM取值范围

SSIM(结构相似性指标)是一种用于测量图像质量的方法,其取值范围为-1到1之间,其中1表示两幅图像完全相同,-1表示两幅图像完全不同。通常情况下,SSIM值越高,表示两幅图像越相似,质量也越好。常见的SSIM取值范围如下:
1:完美匹配 0.9 - 1:非常好 0.7 - 0.9:良好 0.5 - 0.7:一般 0.3 - 0.5:差 0 - 0.3:非常差

需要注意的是,SSIM是一种相对度量,而不是绝对度量。这意味着SSIM值的实际意义取决于它与其他图像的比较结果。因此,在评估图像质量时,应该使用多个SSIM值进行比较,以便得出更准确的结论。

关于取到负数
:SSIM(结构相似性指标)可以取到负数。SSIM的取值范围是-1到1之间,其中1表示两幅图像完全相同,0表示两幅图像没有相似性,而-1表示两幅图像完全不同。在实际应用中,SSIM值通常是在0到1之间,表示图像的相似度越高,SSIM值越接近1。但是,在一些情况下,SSIM值可能会低于0,这通常发生在比较的两幅图像之一具有负值像素时。在这种情况下,SSIM将返回一个负数。因此,当使用SSIM作为图像质量度量时,需要注意检查SSIM值是否为负,并对其进行解释。

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信