目 录

  • 1 SSIM
    • 1.1 文字表达
    • 1.2 数学表达
    • 1.3 代码表达
  • 2 PSNR
    • 2.1 文字表达
    • 2.2 数学表达
    • 2.3 代码表达
  • 3 ZNCC,NCC
    • 3.1 文字表达
    • 3.2 数学表达
    • 3.3 代码表达
  • References

SSIM、PSNR、ZNCC是3个很常用的图像质量评估方法,地位基本相当,含义也基本上都是评估2张图片、或者2片区域之间的相似程度。不过,他们的单位、取值范围、计算公式、优缺点、应用场合都有所不同,我们在使用的时候需要理智辨析、审慎选择。

1 SSIM

1.1 文字表达

SSIM是“Structural Similarity”的缩写,中文译作结构相似性。
SSIM是2004年由德州大学奥斯丁分校的一篇论文最先提出来的一个指标,这篇论文的被引量现在已经有18000多,地位自不必说了(论文:Image quality assessment: from error visibility to structural similarity)。它一种衡量两幅图像相似度的指标,取值范围是[0, 1],SSIM越接近1,表示两张图片越相近,SSIM越接近0,表示两张图片越毫不相干。

1.2 数学表达

具体的数学公式如下,下面的公式均截图于上面提到的那篇原始大牛论文。
SSIM由三个部分构成,分别是
照明度

对比度

结构

有了这三个量,SSIM的一般表达式是

一般我们取

这样SSIM的公式就可以进一步写为
SSIM(x,y)=(2μxμy+C1)(2σxy+C2)(μx2+μy2+C1)(σx2+σy2+C2)SSIM(\mathbf{x}, \mathbf{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) } SSIM(x,y)=(μx2​+μy2​+C1​)(σx2​+σy2​+C2​)(2μx​μy​+C1​)(2σxy​+C2​)​
其中,μμμ(下面代码中的mu)代表平均值,σσσ(下面代码中的sigma)代表标准差。如果一定要写出来的话,就是

另外放一张原论文中的流程图。

1.3 代码表达

Python实现代码如下,给一个Pytorch版本的供参考。

import torch
import torch.nn as nnclass SSIM(nn.Module):def __init__(self):super(SSIM, self).__init__()self.mu_x_pool   = nn.AvgPool2d(3, 1)self.mu_y_pool   = nn.AvgPool2d(3, 1)self.sig_x_pool  = nn.AvgPool2d(3, 1)self.sig_y_pool  = nn.AvgPool2d(3, 1)self.sig_xy_pool = nn.AvgPool2d(3, 1)self.refl = nn.ReflectionPad2d(1)self.C1 = 0.01 ** 2self.C2 = 0.03 ** 2def forward(self, x, y):x = self.refl(x)y = self.refl(y)mu_x = self.mu_x_pool(x)mu_y = self.mu_y_pool(y)sigma_x  = self.sig_x_pool(x ** 2) - mu_x ** 2sigma_y  = self.sig_y_pool(y ** 2) - mu_y ** 2sigma_xy = self.sig_xy_pool(x * y) - mu_x * mu_ySSIM_n = (2 * mu_x * mu_y + self.C1) * (2 * sigma_xy + self.C2)SSIM_d = (mu_x ** 2 + mu_y ** 2 + self.C1) * (sigma_x + sigma_y + self.C2)return torch.clamp((1 - SSIM_n / SSIM_d) / 2, 0, 1)

2 PSNR

2.1 文字表达

PSNR是“Peak Signal to Noise Ratio”的首字母缩写,中文译作峰值信噪比。
PSNR是一种评价图像的客观标准,一般用于最大值信号和背景噪音之间的一个工程项目,在评估压缩图片相比于原图损失了多少信息上很常用。它的单位是分贝(dB\mathbf{dB}dB),值越大表示越好(即噪声越小),取之范围是[0,+∞)[0, +∞)[0,+∞)。

2.2 数学表达

PSNR的定义式如下。
PSNR=10log10(2n−1)2MSE,usuallyn=8PSNR=10 \mathbf{log}_{10}\frac{{(2^n-1)}^2}{MSE}, \quad usually \ n=8 PSNR=10log10​MSE(2n−1)2​,usually n=8
MSE即均方误差“Mean Square Error“。
MSE=1wh∑i=0w−1∑j=0h−1[I(i,j)−K(i,j)]2MSE=\frac{1}{wh} \sum_{i=0}^{w-1} \sum_{j=0}^{h-1} {[I(i,j)-K(i,j)]}^2 MSE=wh1​i=0∑w−1​j=0∑h−1​[I(i,j)−K(i,j)]2
III是原图,KKK是待评价图像,一般是压缩后的,或者受到某种噪声干扰后的图像。www代表图像的宽度(width),hhh代表图像的长度(height)。nnn是指每个像素用nnn位二进制来表示。通常我们用8位二进制表示图像的一个像素,即uint8,那么n=8,2n−1=255n=8,2^n - 1 = 255n=8,2n−1=255,也是最大像素值。

2.3 代码表达

Python实现代码:

import numpy as np
import mathdef psnr(img1, img2):mse = np.mean( (img1 - img2) ** 2 )if mse == 0:return 100PIXEL_MAX = 255.0return 20 * math.log10(PIXEL_MAX / math.sqrt(mse))

实际使用的时候要注意mse可能为0,就会出现分母为0的现象,导致程序报错或者给后面的代码埋下隐患。所以用PSNR时常会clip或clamp一下,也就是“夹紧”,免得弄出nan、inf出来给后面的代码添乱。

3 ZNCC,NCC

3.1 文字表达

ZNCC是“Zero-normalized cross-correlation”的首字母缩写,中文译作0均值归一化互相关。可以猜到,NCC则是归一化互相关。
ZNCC是在对参考子区域和目标子区域的相关性进行评估,可以理解为花式算相关系数,在图像匹配、拼接上用的比较多。ZNCC值越大表示两张图片越像,取之范围是[-1, 1]。

  • P.S. 稍微说一句为什么ZNCC可以用于图像匹配、拼接吧。例如,视频中连续的哪一对子区域ZNCC得分越高,就匹配上这一对子区域,认为是两帧间的重叠区域,从而可以拼接图片,最日常的例子就是我们手机里的拍照的全景模式,不就是一圈图片拼起来的嘛。同时,图像匹配在立体视觉中也很关键,所以SLAM、深度估计也常用ZNCC。

3.2 数学表达

数学公式:

ZNCC其实就是数理统计中的相关系数,分子是协方差,分母是TTT和III的标准差的乘积。

3.3 代码表达

Python实现代码:

Github Gasyori100knock answer_57.py (用ZNCC做图像匹配的例程)

References

SSIM论文:Image quality assessment: from error visibility to structural similarity
参考代码库1:https://github.com/aizvorski/video-quality
参考代码库2:https://github.com/slhck/ffmpeg-quality-metrics
参考教程:Github上一个挺不错的OpenCV100问教程

常用的图像质量评估方法相关推荐

  1. 逻辑回归及常用模型分类评估方法

    1.分类评估方法 [准确率:预测正确的数占样本总数的比例.  (TP+TN)/(TP+TN+FP+FN)] 1.1 精确率与召回率 1.1.1 混淆矩阵 在分类任务下,预测结果(Predicted C ...

  2. [机器学习]机器学习常用的模型评估方法

    目录 混淆矩阵 正确率 精确率 召回率 灵敏度 伪阳性率 特异度 P-R曲线: F1-值 ROC曲线 AUC面积 均方误差 均方根误差 平均绝对误差 混淆矩阵 实际值\预测值 预测值 Positive ...

  3. 有参考图像的图像质量评估方法及代码(PSNR,SSIM,RMSE,NRMSE,ENTROPY)

    1.峰值信噪比PSNR PSNR(Peak Signal to Noise Ratio),峰值信噪比,即峰值信号的能量与噪声的平均能量之比,通常表示的时候取 log 变成分贝(dB),由于 MSE 为 ...

  4. IQA图像质量评价常用评价指标

    如今深度学习广泛应用在各个领域,在IQA领域深度学习也得到了广泛运用,做任何一种视觉任务都需要相应的评价指标来评判算法效果的好坏,以下就是我总结的图像质量评价领域的评价指标. 一.SROCC      ...

  5. 一文综述常用图像评估方法

    介绍 作为视觉生物,人类对视觉信号损耗(例如块状,模糊,嘈杂和传输损耗)敏感.因此,我将研究重点放在发现图像质量如何影响Web应用程序中的用户行为上.最近,一些研究测试了低质量图像在网站上的影响.康奈 ...

  6. 【总结】有三AI秋季划图像质量组3月直播讲了哪些内容,为什么解决好底层图像处理问题那么重要...

    文/编辑 | 言有三 大家知道,有三AI有计算机视觉的人才培养体系,分为三个等级,分别是春季划,夏季划,秋季划,如果不熟悉可以查看下面介绍. [杂谈]2020年有三AI计算机视觉培养计划详解,该不该学 ...

  7. 图像质量评价(Image Quality Assessment,IQA)

    图像质量 图像质量的含义主要包含两个方面,一个是图像的逼真度(fidelity),另一个是图像的可懂度(intelligibility). (1)图像的逼真度(fidelity) 描述被评价图像与标准 ...

  8. 【论文review+总结】屏幕内容图像质量评估SC-IQA(Screen Content Image Quality Assessment)

    目录 论文review 2017年论文 2018年论文 2019年论文 总结 主要思路 主要方法总结 全参考FR-IQA 弱参考RR-IQA 无参考NR-IQA 多内容(不只局限于SCIs--基于cr ...

  9. 超声图像质量评估论文综述

    已经开发出许多专用于医学图像后处理的算法,从而提出了有关此类图像评估的根本问题.主观评估是评估医学领域质量的最可靠方法.但是,由于人类观察者必须具有医学背景,因此在医学应用中既费时又困难.客观指标是一 ...

最新文章

  1. axt测试软件,【测试工具】这些APP实用测试工具,不知道你就out了!
  2. web前端【第九篇】JS的DOM对象三
  3. 【yolo】ubuntu18.04 yolo打开摄像头实时检测框目标 转化pth文件为onnx
  4. 如何提高QnA maker机器人训练中文语义理解的能力
  5. win8配置_《FIFA 20》PC配置公布 最低仅需i3+GTX660
  6. 云计算实战系列八(存储管理I)
  7. HTML 父窗口打开子窗口,并从子窗口返回值
  8. 消费者生产者代码之---一步一步带你写
  9. linux下检查是否安装过某软件包
  10. 基于javaweb的医院门诊收费管理系统(java+html+jdbc+mysql)
  11. Ds18b20的使用
  12. 微型计算机原理与接口技术 试卷,微机原理与接口技术试卷和答案4套.doc
  13. explain mysql_mysql explain详解
  14. Win11如何设置系统还原点?
  15. Excel怎么批量插入对应产品图片?
  16. 郁闷的时候看下,心情也许会好一些(转自CSDN)
  17. elasticsearch es sum求和统计用法
  18. pg_bulkload
  19. 表示表元的背景的html,表示表元的背景色彩的HTML 是()
  20. 元气森林,只能小而美

热门文章

  1. 字节跳动,正在动摇互联网的根基!(转)
  2. python画魄罗代码_LOL:灵魂画师在这里!玩家手绘冰雪节魄罗
  3. Ubuntu 安装企业版微信
  4. 使用ubuntu遇到的问题-An error occurred,please run Package Manager...
  5. 惠普笔记本U盘重装系统教程(转载)
  6. 世嘉VR虚拟乐园即将开业,位于二次元天堂秋叶原
  7. javase_20(Awt初步认识)
  8. android 如何从 3.55mm耳机接口 读取数据,USB Type-C接口详细定义,自制Type-C转3.5mm耳机转接线...
  9. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】
  10. jQuery中index的用法