PSNR 和 SSIM 是两种常见的图像质量评价指标,通常用于衡量两张图像的相似度。
参考材料:
- https://zh.wikipedia.org/wiki/%E5%B3%B0%E5%80%BC%E4%BF%A1%E5%99%AA%E6%AF%94
- https://zhuanlan.zhihu.com/p/50757421
PSNR
PSNR:峰值信噪比(Peak signal-to-noise ratio),常用对数分贝单位来表示。
先定义均方误差 $MSE$。
灰度 MSE
两张大小均为 $m\times n$ 的灰度图像,原图为 $I$,有损图为 $K$,则定义
$$ MSE=\frac{1}{mn}\sum_{i=1}^{m-1}\sum_{j=0}^{n-1}\left[I(i, j)-K(i, j)\right]^2 $$
RGB MSE
分别计算 RGB 三个通道的 MSE,然后取平均值。
$$ MSE=\frac{1}{3mn}\sum_{R,G,B}\sum_{i=1}^{m-1}\sum_{j=0}^{n-1}\left[I_{color}(i, j)-K_{color}(i, j)\right]^2 $$
PSNR
先定义 ${MAX}_I$ 为 $I$ 中每个像素的可能颜色数量。对于 8 位图像,每个像素可能有255种颜色,于是 ${MAX}_I$=255。当然也有 ${MAX}_K$=255。
那么,
$$ \begin{align*} PSNR&=10\cdot \log_{10}\left(\frac{{MAX}I^2}{MSE}\right) \ &= 20\cdot \log{10}\left(\frac{{MAX}_I}{\sqrt{MSE}}\right) \end{align*} $$
PSNR 的取值
PSNR 没有理论上限值,值越大,表明 $I$ 和 $K$ 越相似。容易看出,$I$ 和 $K$ 完全相同时,PSNR $\to \infin$。
- PSNR 接近 50dB,代表压缩后的图像仅有些许非常小的误差。
- PSNR 大于 30dB,人眼很难察觉压缩后和原始影像的差异。
- PSNR 介于 20dB 到 30dB 之间,人眼就可以察觉出图像的差异。
- PSNR 介于 10dB 到 20dB 之间,人眼还是可以用肉眼看出这个图像原始的结构,且直观上会判断两张图像不存在很大的差异。
- PSNR 低于 10dB,人类很难用肉眼去判断两个图像是否为相同,一个图像是否为另一个图像的压缩结果。
一组来自 wiki 的对比图1:
| 原图 | PSNR 47.61dB | PSNR 34.02dB | PSNR 24.46dB |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
SSIM
SSIM:结构相似性指标(structural similarity index)
SSIM 的基本思想为自然图像是高度结构化的,即在自然图像中相邻像素之间有很强的关系性,而这样的关系性承载了场景中物体的结构信息。人类视觉系统在观看图像时已经很习惯抽取这样的结构性信息。
SSIM 的定义
设两张图分别为 $x$ 和 $y$。
SSIM 从三个维度来衡量图像的相似性:
-
亮度 luminance
$$ l(x,y)=\frac{2\mu_x+\mu_y+c_1}{\mu_x^2+\mu_y^2+c_1} $$
其中 $\mu$ 表示图像的均值,$c_1$ 和 $c_2$ 是为了避免除以 0 而添加的常数:
$$ c_1=(k_1 L)^2,\quad c_2=(k_2 L)^2 $$
$k_1$ 默认取 0.01,$k_2$ 默认取 0.03。$L$ 和 PSNR 中的 ${MAX}_I$ 是同一个东西。
-
对比度 contrast
$$ c(x,y)=\frac{2\sigma_x\sigma_y+c_2}{\sigma_x^2+\sigma_y^2+c_2} $$
其中 $\sigma^2$ 表示图像的方差。
-
结构 structure
$$ s(x,y)=\frac{\sigma_{xy}+c_3}{\sigma_x\sigma_y+c_3} $$
其中 $\sigma_{xy}$ 是 $x$ 和 $y$ 的协方差,$c_3$ 一般取 $c_2$ 的一半。
于是,得到
$$ SSIM(x,y)=l(x,y)^\alpha \cdot c(x,y)^\beta \cdot s(x,y)^\gamma $$
$\alpha$、$\beta$、$\gamma$ 是控制三者相对重要性的参数,一般都取1即可。
在实际计算时,一般从图片上取一个固定大小的窗口,在窗口内进行 $SSIM$ 计算,然后不断滑动窗口,最后取平均值作为全局的 $SSIM$。
SSIM 的取值
如果 $x=y$,则有 $\mu_x=\mu_y$,$\sigma_x=\sigma_y$,可以推算得出此时 $SSIM=1$。
SSIM 是可以取负值的。
SSIM 越大,表明两张图的相似性越高。
局限性
有时,PNSR 和 SSIM 可能无法正确地反映图像的视觉质量。见 https://videoprocessing.ai/metrics/ways-of-cheating-on-popular-objective-metrics.html
SSIM 不适用于位移、旋转、缩放这些非结构性失真。这些种类的极轻微失真就会导致 SSIM 剧烈变化。
Footnotes
-
来自 Miiishele - 自己的作品,CC BY-SA 4.0,https://commons.wikimedia.org/w/index.php?curid=91759828 ↩



