图像质量评估方法及代码
均方根误差(RMSE)
均方误差(Mean Square Error)反映的是变量间的差异程度,是一种基于像素误差的图像质量客观评价指标,用于衡量融合图像和理想参考图像之间的差异,MSE越小,表示融合图像质量越好。
给定一个大小为 $m\times n$ 的干净图像 $I$ 和噪声图像 $K$,均方误差(MSE, Mean Squared Error)定义为:
$$
\text{MSE}=\frac1{mn}\sum_{i=0}^{m-1}\sum_{j=0}^{n-1}[I(i,j)-K(i,j)]^2
$$
均方根误差(Root Mean Square Error)是一个翻译空间细节信息的评价指标
$$
RMSE(I,K)=\sqrt{MSE(I,K)}
$$
归一化均方根误差 NRMSE
归一化均方根误差(normalized root mean square error)就是将RMSE的值变成(0,1)之间。
峰值信噪比(PSNR)
PSNR(Peak Signal to Noise Ratio),峰值信噪比,即峰值信号的能量与噪声的平均能量之比,通常表示的时候取 $\log$ 变成分贝(dB),由于 MSE 为真实图像与含噪图像之差的能量均值,而两者的差即为噪声,因此 PSNR 即峰值信号能量与 MSE 之比。
PSNR的计算公式
PSNR(dB) 的定义为:
$$
\begin{align}
\text{PSNR}
&=10\cdot\log_{10}(\frac{(MAX_I)^2}{MSE})\
&=20\cdot\log_{10}(\frac{MAX_I}{\sqrt{MSE}})\
&=20\cdot\log_{10}(MAX_I)-10\cdot\log_{10}(MSE)
\end{align}
$$
其中,$MAX_I$ 为图片可能的最大像素值。如果每个像素都由8位二进制来表示,那么就为255。一般情况,如果像素值由$B$位二进制来表示,那么$MAX_I=2^B-1$。
通常情况下,面对 uint8
数据,最大像素值为255;面对浮点型数据,最大像素值为1。
上面是灰度图像的计算方法,下面是彩色图像的三种计算方法:
分别计算 RGB 三个通道的 PSNR,然后取平均值;
将图片转化为 YCbCr 格式,然后只计算 Y 分量(即亮度分量)的PSNR;
分别计算 RGB 三个通道的 MSE,然后再除以3:
$$
PSNR=10\cdot\log_{10}(\frac{(MAX_I)^2}
{\frac1{3mn}\sum_{R,G,B}\sum_{i=0}^{m-1}\sum_{j=1}^{n-1}[I_{color}(i,j)-K_{color}(i,j)]^2})
$$
PSNR的数值意义
图像与影像压缩中典型的峰值信噪比值在30dB~50dB,愈高愈好。
- PSNR接近50dB,代表压缩后的图像仅有些许非常小的误差;
- PSNR接近30dB,人眼很难察觉压缩后的和原始图像的差异;
- PSNR位于20dB~30dB,人眼可以察觉出图像的差异;
- PSNR位于10dB~20dB,人眼可以从压缩后的图像中看出原始结构,并且上会判断刺绣图像不存在很大的差异;
- PSNR低于10dB,人眼很难用肉眼去判断两个图像是否相同,一个图像是否为另一个图像的压缩结果。
PSNR的代码
1 | import numpy as np |
PSNR的补充
针对超光谱图像,我们需要针对不同波段分别计算 PSNR,然后取平均值,这个指标称为 MPSNR。
结构相似性(SSIM)
结构相似性(SSIM,Structural Similarity Index Measure),假设自然图像是高度结构化的,即在自然图像中相邻像素之间有很强的关联性,并且这样的关联性承载了场景中物体的结构信息。人类视觉系统在观看图像时已经习惯抽取这样的结构性信息。因此,结构性失真就成为图像评价的重要指标。
作为结构相似性理论的实现,结构相似度指数从图像组成的角度将结构信息定义为独立于亮度、对比度的,反映场景中物体结构的属性,并将失真建模为**亮度(luminance)、对比度(contrast)和结构(structure)**三个不同因素的组合。用均值作为亮度的估计,标准差作为对比度的估计,协方差作为结构相似程度的度量。
SSIM的计算公式
给定两个信号$\mathbf{x}$和$\mathbf{y}$,两者的结构相似性定义为:
$$
\begin{align}
SSIM(\mathbf{x,y})&=
[l(\mathbf{x,y})]^\alpha
[c(\mathbf{x,y})]^\beta]
[s(\mathbf{x,y})]^\gamma\
l(\mathbf{x,y})&=\frac{2\mu_x\mu_y+C_1}{\mu_x^2+\mu_y^2+C_1}\
c(\mathbf{x,y})&=\frac{2\sigma_x\sigma_y+C_2}{\sigma_x^2+\sigma_y^2+C_2}\
s(\mathbf{x,y})&=\frac{\sigma_{xy}+C_3}{\sigma_x\sigma_y+C_3}
\end{align}
$$
其中,
- $l(\mathbf{x,y})$比较$\mathbf{x}$和$\mathbf{y}$的亮度,
- $c(\mathbf{x,y})$比较$\mathbf{x}$和$\mathbf{y}$的对比度,
- $s(\mathbf{x,y})$比较$\mathbf{x}$和$\mathbf{y}$的结构,
- $\alpha>0,\beta>0,\gamma>0$,
- $\mu_x$为$\mathbf{x}$的均值,$\mu_y$为$\mathbf{y}$的均值,$\sigma_x^2$为$\mathbf{x}$的方差,$\sigma_y^2$为$\mathbf{y}$的方差,$\sigma_{xy}$为$\mathbf{x,y}$的协方差;
- $C_1,C_2,C_3$皆为常数用于维持$l(\mathbf{x,y})$、$c(\mathbf{x,y})$、$s(\mathbf{x,y})$的稳定,防止除零。
- $L$为像素值的范围$[0,2^B-1]$;
- $k_1=0.01,k_2=0.03$为默认值。
结构相似性指标的值越大,代表两个信号的相似性越高。
SSIM的使用
实际使用时,为了简化起见,一般将$\alpha=1,\beta=1,\gamma=1,C_1=(k_1,L)^2,C_2=(k_2,L),C_3=C_2/2$得
$$
SSIM(x,y)=\frac{(2\mu_x\mu_y+C_1)(2\sigma_{xy}+C_2)}
{(\mu_x^2+\mu_y^2+C_1)(\sigma_x^2+\sigma_y^2+C_2)}
$$
每次计算的时候都从图片中取一个$N\times N$的窗口,然后不断滑动窗口进行计算,最后取平均值作为全局的SSIM。
SSIM的代码
1 | import numpy as np |
SSIM的补充
针对超光谱图像,我们需要针对不同波段分别计算 SSIM,然后取平均值,这个指标称为 MSSIM。
信息熵(entropy)
信息熵主要是度量图像包含信息量多少的一个客观评价指标,$a$表示灰度值,$P(a)$表示灰度概率分布,信息熵为:
$$
H(A)=-\sum_a P_A(a)\log p_A(a)
$$
信息熵越高表示整合图像的信息量越丰富,质量越好
1 | import numpy as np |
参考文献
(10条消息) 【图像处理】——图像质量评价指标信噪比(PSNR)和结构相似性(SSIM)(含原理和Python代码)_python_AI_fans的博客-CSDN博客_tf.image.psnr
Structural similarity index — skimage v0.19.0.dev0 docs (scikit-image.org)