对于人眼来说,很容易看出两个给定图像的质量有多相似。例如下图将各种空间噪声添加到图片中,我们很容易将它们与原始图像进行比较,并指出其中的扰动和不规则性。但是在机器学习中我们需要数学表达式来量化这种差异。
在本文中,我们将看到如何使用一行代码实现以下相似性度量,并对比各相似度的评分:
Mean Squared Error (MSE)
Root Mean Squared Error (RMSE)
Peak Signal-to-Noise Ratio (PSNR)
Structural Similarity Index (SSIM)
Universal Quality Image Index (UQI)
Multi-scale Structural Similarity Index (MS-SSIM)
Erreur Relative Globale Adimensionnelle de Synthèse (ERGAS)
Spatial Correlation Coefficient (SCC)
Relative Average Spectral Error (RASE)
Spectral Angle Mapper (SAM)
Visual Information Fidelity (VIF)
sewar库可用于实现所有这些指标(以及其他一些指标)。
开始安装sewar:
pip install sewar
首先我们导入相应的库
from sewar.full_ref import mse, rmse, psnr, uqi, ssim, ergas, scc, rase, sam, msssim, vifp
这些模块很容易使用,可以直接调用,如下所示。
print("MSE: ", mse(blur,org))
print("RMSE: ", rmse(blur, org))
print("PSNR: ", psnr(blur, org))
print("SSIM: ", ssim(blur, org))
print("UQI: ", uqi(blur, org))
print("MSSSIM: ", msssim(blur, org))
print("ERGAS: ", ergas(blur, org))
print("SCC: ", scc(blur, org))
print("RASE: ", rase(blur, org))
print("SAM: ", sam(blur, org))
print("VIF: ", vifp(blur, org))
对于每一种噪声方法,我们可以看到下面的相似结果。“Original”一栏显示的是原始图像与自身比较后的分数,以便看到理想的分数。
每一种噪声方法的值都与上面图像网格直观获得的值相对应。例如,Salt and Pepper和Poisson方法添加的噪声是肉眼不容易看到的,需要我们通过对图像的肉眼近距离观察发现。在相似度评分中,我们可以看到,与其他噪声方法相比,Salt and Pepper和Poisson的值更接近于理想值。类似的观察结果也可以从其他噪声方法和指标中得到。
从结果看来,ERGAS、MSE、SAM和VIFP能够足够敏感地捕捉到添加的噪声并返回放大的分数。
但这种简单的量化有什么用呢?
最常见的应用是重新生成或重建的图像与其原始的、干净的版本进行比较。GAN最近在去噪和清理图像方面做得非常好,这些指标可以用来衡量模型在视觉观察之外实际重建图像的效果。利用这些相似度指标来评估大量生成图像的再生质量,可以减少人工可视化评估模型的工作。
此外,相似度度量也可以判断和强调图像中是否存在的对抗性攻击。因此,这些分数可以用来量化这些攻击带来的干扰量。
作者:Param Raval