图像评价常用指标
论文中测试生成图像数据的评估指标,可用于光流估计、图像插帧等
PSNR:峰值信噪比
PSNR全称为“Peak Signal-to-Noise Ratio”,中文意思即为峰值信噪比,是衡量图像质量的指标之一。
图像与影像压缩中典型的峰值讯噪比值在30dB 到50dB 之间,越高越好。
- $PSNR\approx50dB$ ,代表压缩后的图像仅有些许非常小的误差。
- $PSNR>30dB$ ,人眼很难察觉压缩后和原始影像的差异。
- $PSNR \in [20dB ,30dB]$,人眼就可以察觉出图像的差异。
- $PSNR \in [10dB ,20dB]$,人眼还是可以用肉眼看出这个图像原始的结构,且直观上会判断两张图像不存在很大的差异。
- $PSNR<10dB$,人类很难用肉眼去判断两个图像是否为相同,一个图像是否为另一个图像的压缩结果。
公式
PSNR是基于MSE(均方误差)定义,对给定一个大小为m*n的原始图像I和对其添加噪声后的噪声图像K,其MSE可定义为:
$$
MSE=\frac{1}{m n} \sum_{i=0}^{m-1} \sum_{j=0}^{n-1}[I(i, j)-K(i, j)]^{2}
$$
则PSNR可定义为:
$$
P S N R=10 \cdot \log {10}\left(\frac{M A X{I}^{2}}{M S E}\right)=20 \cdot \log {10}\left(\frac{M A X{I}}{\sqrt{M S E}}\right)
$$
其中MAXI为图像的最大像素值,PSNR的单位为dB。若每个像素由8位二进制表示,则其值为2^8-1=255。但注意这是针对灰度图像的计算方法,若是彩色图像,通常可以由以下方法进行计算:
方法一:计算RGB图像三个通道每个通道的MSE值再求平均值,进而求PSNR
方法二:直接使用matlab的内置函数psnr()(注意该函数将所有图像当成灰度图像处理)。
方法三:将图像转为YCbCr格式,只计算Y分量即亮度分量的PSNR。
代码
python实现:
from skimage.metrics import peak_signal_noise_ratio as psnr |
matlab实现:
function PSNR = psnr(f1, f2) |
SSIM:结构相似性
SSIM 测量两个图像之间的相似性。人类对像素的绝对亮度/颜色不敏感,但对边缘和纹理的位置非常敏感。 SSIM 通过主要关注边缘和纹理相似性来模仿人类感知。一般取值范围:0-1.值越大,质量越好。
公式
SSIM分别在亮度 (luminance l(x,y))、对比度 (contrast c(x,y)) 和结构 (structure s(x,y))三个方面进行比较。
$$
\operatorname{SSIM}(\mathbf{x}, \mathbf{y})=[l(\mathbf{x}, \mathbf{y})]^{\alpha}[c(\mathbf{x}, \mathbf{y})]^{\beta}[s(\mathbf{x}, \mathbf{y})]^{\gamma}
$$
其中,l(x,y)比较x和y的亮度,c(x,y)比较x和y的对比度,s(x,y)比较x和y的结构。C1、C2、C3是正值常数,用于防止公式出现除0异常。
简化公式
$$
\operatorname{SSIM}(\mathbf{x}, \mathbf{y})=\frac{\left(2 \mu_{x} \mu_{y}+C_{1}\right)\left(2 \sigma_{x y}+C_{2}\right)}{\left(\mu_{x}^{2}+\mu_{y}^{2}+C_{1}\right)\left(\sigma_{x}^{2}+\sigma_{y}^{2}+C_{2}\right)}
$$
C1、C2、C3是正值常数,用于防止公式出现除0异常。
$C_1=(K_1L)(K_1L)$
$C_2=(K_2L)(K_2L)$
$C_3=C_2/2$
默认 $K_1 = 0.01,K_2 = 0.03$,$L=2^B-1$,B是比特深度。常用8bit,所以L值一般是255。
代码
python实现:
from skimage.measure import compare_ssim |
LPIPS 图像相似性度量标准(感知损失)
该度量标准学习生成图像到Ground Truth的反向映射强制生成器学习从假图像中重构真实图像的反向映射,并优先处理它们之间的感知相似度。LPIPS 比传统方法(比如L2/PSNR, SSIM, FSIM)更符合人类的感知情况。LPIPS的值越低表示两张图像越相似,反之,则差异越大。
公式
$$
d\left(x, x_{0}\right)=\sum_{l} \frac{1}{H_{l} W_{l}} \sum_{h, w}\left|w_{l} \odot\left(\hat{y}{h w}^{l}-\hat{y}{0 h w}^{l}\right)\right|_{2}^{2}
$$
d为 x0与x之间的距离。从L层提取特征堆(feature stack)并在通道维度中进行单位规格化(unit-normalize)。利用向量WL 来放缩激活通道数,最终计算L2距离。最后在空间上平均,在通道上求和。
代码
python实现:
import lpips |
IE
公式
$$
\operatorname{IE} = \left[ \frac{1}{N}\sum_{(x,y)}(I(x, y) - I_{GT}(x, y))^2 \right]^{\frac{1}{2}}
$$
N代表图片像素的个数
论文地址:A Database and Evaluation Methodology for Optical Flow
光流估计评估方法
以上介绍都是对于生成图像与ground truth的比较,一下介绍光流估计中的评价指标:
EPE/EE(Endpoint Error)
EPE(Endpoint Error),是光流估计中标准的误差度量,是预测光流向量与真实光流向量的欧氏距离在所有像素上的均值。(越低越好)
公式
$$
\operatorname{EPE}=\sqrt{\left(\left(\mathrm{u}{\mathrm{est}}-\mathrm{u}{\mathrm{gt}}\right)^{2}+\left(\mathrm{v}{\mathrm{est}}-\mathrm{v}{\mathrm{gt}}\right)^{2}\right)}
$$
AE(Angular Error)
光流是使用了类似平面直角坐标系中的坐标形式来表达,而该坐标同时可以表示为一个向量。由此可以引入另一个评价指标AE。
AE(Angular Error),是计算光流向量之间的角度误差(此处加了一个维度,从原来的(u, v) 变成 (u, v, 1))。
公式
$$
AE = \arccos(\frac{(u_{est},v_{est},1)^T *(u_{gt},v_{gt},1)}{\sqrt{1.0+u_{est}^2+v_{est}^2}\sqrt{1.0+u_{gt}^2+v_{gt}^2}})
$$
新的评价方法更新中…
参考
https://zhuanlan.zhihu.com/p/541385224?utm_id=0
https://blog.csdn.net/weixin_43135178/article/details/118497369
https://mapengsen.blog.csdn.net/article/details/127486035
https://blog.csdn.net/weixin_43466026/article/details/119898304
https://aistudio.baidu.com/aistudio/projectdetail/4597614
A Database and Evaluation Methodology for Optical Flow