图像质量指标:PSNR、SSIM、MSE

直方图方法

       方法描述:有两幅图像patch(当然也可是整幅图像),分别计算两幅图像的直方图,并将直方图进行归一化,然后按照某种距离度量的标准进行相似度的测量。

方法的思想:基于简单的向量相似度来对图像相似度进行度量。

优点:直方图能够很好的归一化,比如256个bin条,那么即使是不同分辨率的图像都可以直接通过其直方图来计算相似度,计算量适中。比较适合描述难以自动分割的图像。

缺点:直方图反应的是图像灰度值得概率分布,并没有图像的空间位置信息在里面,因此,常常出现误判;从信息论来讲,通过直方图转换,信息丢失量较大,因此单一的通过直方图进行匹配显得有点力不从心。


图像模板匹配

        一般而言,源图像与模板图像patch尺寸一样的话,可以直接使用上面介绍的图像相似度测量的方法;如果源图像与模板图像尺寸不一样,通常需要进行滑动匹配窗口,扫面个整幅图像获得最好的匹配patch。

PSNR

PSNR 在图像处理上主要用于量化受有损压缩影响的图像和视频的重建质量。

(Mean Squared Error)均方误差
一种全参考的图像质量评价指标。

处理图像与原始图像越接近,MSE越小,则PSNR越大。一般来说:

  • P S N R > 40 d 时,说明图像质量极好(非常接近原始图像)
  • 30 d B < P S N R < 40 d B 时,说明图像质量好(存在可以接受的失真)
  • 20 d B < P S N R < 30 d B 时,说明图像质量差(存在不可接受的失真)
  • P S N R < 20 时,说明图像质量极差

对于彩色图像,以RGB图像为例,有以下3种方式计算PSNR:

  1. 计算RGB三通道每个通道的PSNR值,再求平均
  2. 计算RGB三通道每个通道的MSE值,取平均,再计算PSNR
  3. 将RGB转换成YUV颜色空间,仅仅计算Y(亮度)分量的PSNR

其中方法2和方法3较常用。

      PSNR是最普遍,最广泛使用的评鉴画质的客观量测法,不过许多实验结果都显示,PSNR的分数无法和人眼看到的视觉品质完全一致,有可能PSNR较高者看起来反而比PSNR较低者差。这是因为人眼的视觉对于误差的敏感度并不是绝对的,其感知结果会受到许多因素的影响而产生变化(例如:人眼对空间频率较低的对比差异敏感度较高,人眼对亮度对比差异的敏感度较色度高,人眼对一个区域的感知结果会受到其周围邻近区域的影响)。

如果两个输入图像的相似,PSNR 返回一个浮点数在30和50之间,(数值越高,相符程度越高).

SSIM

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

SSIM(Structural Similarity),结构相似性,是一种衡量两幅图像相似度的指标。SSIM 主要考量图片的三个关键特征:亮度(Luminance),对比度(Contrast),结构 (Structure)
SSIM使用的两张图像中,一张为未经压缩的无失真图像x,另一张为失真后的图像y。

也是一种全参考的图像质量评价指标,它分别从亮度、对比度、结构三方面度量图像相似性。

SSIM取值范围[0,1],值越大,表示图像失真越小.

 MSSIM(Mean SSIM 平均结构相似性)

       在实际应用当中,当需要衡量一整张图片的质量时,可以利用滑动窗将图像分块(blocks)。计算每个block的平均值、标准差、协方差,然后得到每个block的SSIM,再对每个block的SSIM求平均,缺点是会造成块效应(block artifacts)。考虑到滑动窗的分块影响,可以采用高斯加权(圆对称高斯加权)计算每个block的平均值、标准差、协方差,然后得到每个block的SSIM,再对每个block的SSIM求平均即得到MSSIM。

SSIM 返回图像的结构相似度指标。这是一个在0-1之间的浮点数(越接近1,相符程度越高), 这个算法对每个通道有一个值,所以最终会产生一个OpenCV的 Scalar 数据结构。

代码

gpu代码

MSE

(structural similarity)结构相似性

感知哈希算法(perceptual hash algorithm)

感知哈希算法(perceptual hash algorithm),它的作用是对每张图像生成一个“指纹”(fingerprint)字符串,然后比较不同图像的指纹。结果越接近,就说明图像越相似。
 

0.18.0版本计算
pip install opencv-python

python -m pip install -U scikit-image==0.18
from skimage.metrics import mean_squared_error as compare_mse
from skimage.metrics import peak_signal_noise_ratio as compare_psnr
from skimage.metrics import structural_similarity as compare_ssim

import cv2

img1 = cv2.imread('0.jpg')
img2 = cv2.imread('1.jpg')
psnr = compare_psnr(img1, img2)
ssim = compare_ssim(img1, img2, multichannel=True)  # 对于多通道图像(RGB、HSV等)关键词multichannel要设置为True
mse = compare_mse(img1, img2)

print('PSNR:{},SSIM:{},MSE:{}'.format(psnr, ssim, mse))

猜你喜欢

转载自blog.csdn.net/qq_30460949/article/details/126118738