1. PSNR (Peak Signal-to-Noise Ratio) 峰值信噪比

给定一个大小为图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图1的干净图像图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图2和噪声图像图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图3,均方误差图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图4定义为:

图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图5

然后图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图6就定义为:

图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图7

其中图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图8为图片可能的最大像素值。如果每个像素都由 8 位二进制来表示,那么就为 255。通常,如果像素值由图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图9位二进制来表示,那么图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图10

一般地,针对 uint8 数据,最大像素值为 255,;针对浮点型数据,最大像素值为 1。

上面是针对灰度图像的计算方法,如果是彩色图像,通常有三种方法来计算。

  • 分别计算 RGB 三个通道的 PSNR,然后取平均值。
  • 计算 RGB 三通道的 MSE ,然后再除以 3 。
  • 将图片转化为 YCbCr 格式,然后只计算 Y 分量也就是亮度分量的 PSNR。

其中,第二和第三种方法比较常见。

  1. # im1 和 im2 都为灰度图像,uint8 类型
  2. # method 1
  3. diff = im1 - im2
  4. mse = np.mean(np.square(diff))
  5. psnr = 10 * np.log10(255 * 255 / mse)
  6. # method 2
  7. psnr = skimage.measure.compare_psnr(im1, im2, 255)

compare_psnr(im_true, im_test, data_range=None) 函数原型可见此处

针对超光谱图像,我们需要针对不同波段分别计算 PSNR,然后取平均值,这个指标称为 MPSNR。

2. SSIM (Structural SIMilarity) 结构相似性

图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图11公式基于样本图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图12图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图13之间的三个比较衡量:亮度 (luminance)、对比度 (contrast) 和结构 (structure)。

图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图14
图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图15
图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图16

一般取图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图17

那么

图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图18

图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图19设为 1,可以得到

图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图20

每次计算的时候都从图片上取一个图像质量评价指标之 PSNR 和 SSIM - 知乎 - 图21
的窗口,然后不断滑动窗口进行计算,最后取平均值作为全局的 SSIM。

  1. # im1 和 im2 都为灰度图像,uint8 类型
  2. ssim = skimage.measure.compare_ssim(im1, im2, data_range=255)

compare_ssim(X, Y, win_size=None, gradient=False, data_range=None, multichannel=False, gaussian_weights=False, full=False, **kwargs) 函数原型可见此处

针对超光谱图像,我们需要针对不同波段分别计算 SSIM,然后取平均值,这个指标称为 MSSIM。
https://zhuanlan.zhihu.com/p/50757421