文章目录

前言

在涉及图像领域,不论时图像复原、图像去噪或者是图像增强等任务,除了人为主观因素上对其进行评价,还需要一些客观的评价指标辅助判断任务完成的好坏。因此本文主要介绍一些图像各类评价的指标,并给出具体的实现代码。

一、常见评价指标

1、均方误差(MSE)

  • 定义:对于标准图像I 和待评价图像KMSE 指的是IK 的所有像素值的差的平方和,再求平均值。
  • MSE越大,图像质量越好。
  • 数学公式

  • 实现代码
import numpy as np
def MSE(img1,img2):
    img1 = img1.astype(np.float64)
    img2 = img2.astype(np.float64)
    mse = np.mean((img1 - img2) ** 2 )
    return mse

2、峰值信噪比(PSNR)

  • 定义:通过比较原始信号(通常是未经压缩的图像)和失真信号(压缩或传输后的图像)之间的信噪比来评估图像的失真程度

  • PSNR越大,图像质量越好。

  • 数学公式


  • 其中,
    MAXI
    表示图像颜色的最大数值,8位采样点表示为255。

  • 实现代码

def PSNR(img1, img2):
   img1 = img1.astype(np.float64)
   img2 = img2.astype(np.float64)
   mse = np.mean((img1 - img2) ** 2 )
   if mse < 1.0e-10:
      return 100
   return 10 * math.log10(255.0**2/mse)

  • 也可用python自带函数实现 from skimage.metrics import peak_signal_noise_ratio as psnr

3、结构相似性(SSIM)

  • 定义:SSIM综合亮度、对比度和结构3个方面来评估图像的质量。
  • SSIM越大,图像质量越好。
  • 数学公式:计算xy两幅图像的SSIM为:


  • lcs
    分别为亮度对比度结构评价。计算公式如下:
  • μ表示图像的均值, σx表示图像的标准差, 表示两幅图像的协方差,c1c2c3均为常数αβγ为大于0的常数系数。
  • 实现代码
    实现步骤不难,方便一点采用自带函数实现 from skimage.metrics import structural_similarity

- 以上常见的评价指标应用范围很广,经常使用,属于评价方法中的全参考方法。
- 实际上,整个图像的质量评价方法可以分为以下3类:

1、全参考(FRIQA):使用参考图像与待评估图像之间的比较来进行评估。
2、半参考(RRIQA):使用部分参考信息进行评估。它们既考虑了待评估图像的质量特征,又考虑了部分参考图像的信息。
3、无参考(NRIQA):不依赖于任何参考图像,仅根据待评估图像自身的内容来进行评估。这些方法主要基于图像的统计性质、纹理特征、对比度等进行评估。

2、低照度图像评价

以下重点介绍一些用于低照度图像的评价指标

2.1 均值

  • 反映图像的明暗程度,其值越大,亮度越高
  • 代码
import cv2
def avg(img):
    mean_value = np.mean(cv2.normalize(img, None, 0, 255, cv2.NORM_MINMAX))
    return  round(mean_value,2)

2.2 标准差

  • 反映图像对比度,其值越大,对比度越高
  • 代码
import cv2
def std(img):
    img = cv2.normalize(img, None, 0, 255, cv2.NORM_MINMAX)
    std = np.std(img)
    return  round(std,2)

2.3 信息熵

  • 描述图像信息量,其值越大,信息越丰富
  • 代码
import numpy as np
import  cv2
def entropy(image):
    # 将图像转换为灰度图像
    image=  cv2.normalize(image, None, 0, 255, cv2.NORM_MINMAX)
    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    # 计算像素值的直方图
    histogram, _ = np.histogram(gray_image.flatten(), bins=256, range=[0, 256])

    # 计算每个像素值的概率
    probabilities = histogram / float(np.sum(histogram))

    # 计算信息熵
    entropy = -np.sum(probabilities * np.log2(probabilities + np.finfo(float).eps))

    return round(entropy,2)

2.4 自然图像质量评价指标(NIQE

  • 描述图像质量,其值越低,说明图像质量越高,越符合人眼的主观评价标准。
  • 代码部分有点长,具体内容见文中资源。

总结

本文会长期更新内容,目前将平时常用的一些图像评价指标的代码附在了这里,争取将其他一些比较重要的评价标准写在一起,方便随时使用。