一、原理

psnr是“Peak Signal to Noise Ratio”的缩写,即峰值信噪比,是一种评价图像的客观标准

用来表示信号最大可能功率和影响它的表示精度的破坏性噪声功率的比值,可以显示图像画质损失的程度。峰值信噪比越大,表示画质损失越小。PSNR的单位是dB,数值越大表示失真越小。

补充:参考
结构相似度索引(SSIM)全攻略:理论+代码(PyTorch)_蒋思的博客-CSDN博客_ssim
基于pytorch计算ssim和ms-ssim_是依韵阿的博客-CSDN博客_pytorch ssim
1、PSNR 是基于对应像素点间的误差, 即基于误差敏感的图像质量评价, 但是由于 PSNR 并未考虑到人眼的视觉特性, 可能出现评价结果与人的主观感觉不一致的情况;
2、SSIM取值范围[0,1],值越大,表示图像失真越小。SSIM 则是从亮度、对比度和结构 3 方面度量图像相似性, 比 PSNR 更符合人类视觉感官。
结构相似性指标(英文: structural similarity index measure,简称SSIM) 是-种用以衡量两张数位影像相似程度的指标。当两张影像其中一张为无失真影像,另一张为失真后的影像,二者的结构相似性可以看成是失真影像的影像品质衡量指标。相较于传统所使用的影像品质衡量指标,像是峰值信噪比(英语: PSNR),结构相似性在 影像品质的衡量上更能符合人眼对影像品质的判断。
3、MSSIM(Mean Structural Similarity )平均结构相似性      
用滑动窗将图像分为N块,加权计算每一窗口的均值、方差以及协方差,权值wij满足∑i∑jwij=1,通常采用高斯核,然后算对应块的结构相似度SSIM,最后将平均值作为两图像的结构相似性度量。

1.首先计算mse(均方误差)。是反映估计量与被估计量之间差异程度的一种度量。

对于三通道的RGB图像 计算mse的数学表达式是:

转化成代码:

2.得到mse后计算PSNR。

其中,MAXI是表示图像点颜色的最大数值,如果每个采样点用 8 位表示,那么就是 255。所以MSE越小,则PSNR越大;所以PSNR越大,代表着图像质量越好。

一般来说,

1、PSNR高于40dB说明图像质量极好(即非常接近原始图像),

2、在30—40dB通常表示图像质量是好的(即失真可以察觉但可以接受),

3、在20—30dB说明图像质量差;

4、最后,PSNR低于20dB图像不可接受

转化成代码:

或者将像素归一化:

理论上(数学意义上讲两个式子是相等的),但实际结果是:

原因是如果img1-img2的结果为负,那么得到的结果将是ASCII的补码,也就是,如果img1-img2是-2,那么输出将是256-2=254所以导致mse增大,如果img1某个点的像素比img2小,而两者差别又比较大,这个绝对值比较大的负值就会变成一个比较小的正值,mse的结果也会偏小,那么PSNR的值就会偏大。把上面的式子用下面的式子代替即可解决问题。

二、代码(两种方法)

import cv2 as cv
import math
import numpy as npdef psnr1(img1, img2):# compute mse# mse = np.mean((img1-img2)**2)mse = np.mean((img1 / 1.0 - img2 / 1.0) ** 2)# compute psnrif mse < 1e-10:return 100psnr1 = 20 * math.log10(255 / math.sqrt(mse))return psnr1def psnr2(img1, img2):#第二种法:归一化mse = np.mean((img1 / 255.0 - img2 / 255.0) ** 2)if mse < 1e-10:return 100PIXEL_MAX = 1psnr2 = 20 * math.log10(PIXEL_MAX / math.sqrt(mse))return psnr2imag1 = cv.imread("./img/222.jpg")
print(imag1.shape)
imag2 = cv.imread("./img/22.jpg")
print(imag2.shape)
#如果大小不同可以强制改变
# imag2 = imag2.reshape(352,352,3)
#print(imag2.shape)
res1 = psnr1(imag1, imag2)
print("res1:", res1)
res2 = psnr2(imag1, imag2)
print("res2:", res2)
#tensorflow框架里有直接关于psnr计算的函数,直接调用就行了:(更推荐)以下代码
'''
#注意:计算PSNR的时候必须满足两张图像的size要完全一样!
#compute PSNR with tensorflowimport tensorflow as tfdef read_img(path):return tf.image.decode_image(tf.read_file(path))def psnr(tf_img1, tf_img2):return tf.image.psnr(tf_img1, tf_img2, max_val=255)def _main():t1 = read_img('t1.jpg')t2 = read_img('t2.jpg')with tf.Session() as sess:sess.run(tf.global_variables_initializer())y = sess.run(psnr(t1, t2))print(y)if __name__ == '__main__':_main()
'''

PSNR峰值信噪比(python代码实现+SSIM+MSIM)相关推荐

  1. 图像的评价指标之PSNR——峰值信噪比

    图像的评价指标之PSNR--峰值信噪比 文章目录: 以及Python的实现 参考: https://blog.csdn.net/szfhy/article/details/49615833 https ...

  2. PSNR峰值信噪比matlab实现

    PSNR,峰值信噪比,通常用来评价一幅图像压缩后和原图像相比质量的好坏,当然,压缩后图像一定会比原图像质量差的,所以就用这样一个评价指标来规定标准了.PSNR越高,压缩后失真越小.这里主要定义了两个值 ...

  3. 信噪比python代码实现

    1 定义 原始信号:x 噪声信号:n 信噪比:SNR 单位是db 其中Psignal是原信号能量(或者是功率),Pnosie是噪声能量(或者是功率) import numpy as np import ...

  4. 【深度学习】图像去雾,去噪里常用的相似评价指标:PSNR(峰值信噪比) SSIM(结构相似度)MSE(均方误差)

    文章目录 一.PSNR(峰值信噪比) 二.SSIM(结构相似度) 三.MSE(均方误差) 小插曲:plt.savefig()保存的图片为空白 一.PSNR(峰值信噪比) 公式直接抄我师哥论文上的,n通 ...

  5. matlab snr mse,MATLAB 均方根误差MSE、两图像的信噪比SNR、峰值信噪比PSNR、结构相似性SSIM...

    今天的作业是求两幅图像的MSE.SNR.PSNR.SSIM.代码如下: clc; close all; X = imread('q1.tif');% 读取图像 Y=imread('q2.tif'); ...

  6. Python 不同分辨率图像峰值信噪比[PSNR]

    PNNR:全称为"Peak Signal-to-Noise Ratio",中文直译为峰值信噪比 前言 一.定义 二.Python代码 1.自定义 2.Tensorflow 总结 前 ...

  7. python求不同分辨率图像的峰值信噪比,一文搞懂

    可以使用 Python 的 NumPy 和 OpenCV 库来实现这个任务.提前准备一张图片作为素材. 文章目录 什么是峰值信噪比 PSNR 峰值信噪比补充说明 使用 OpenCV 库来实现这个任务 ...

  8. 【图像处理】——图像质量评价指标信噪比(PSNR)和结构相似性(SSIM)(含原理和Python代码)

    目录 一.信噪比(PSNR) 1.信噪比的原理与计算公式 2.Python常规代码实现PSNR计算 3.TensorFlow实现PSNR计算 4.skimage实现PSNR计算 5.三种方法计算的结果 ...

  9. (python)计算图像峰值信噪比-PSNR、结构相似度-SSIM

    计算峰值信噪比-PSNR和结构相似度-SSIM(python实现) 说明: PSNR(Peak Signal to Noise Ratio),取值范围为:[0,100],PSNR值越大两张图片越相似, ...

  10. 两种常用的全参考图像质量评价指标——峰值信噪比(PSNR)和结构相似性(SSIM)

    原文:https://blog.csdn.net/zjyruobing/article/details/49908979 1.PSNR(Peak Signal to Noise Ratio)峰值信噪比 ...

最新文章

  1. js中Object类型和Array类型的变量被赋值(复制)给其他变量后,修改被赋值(复制)的新变量的值,会影响原始变量的值,这是为什么呢?
  2. Windows Server 2012 HyperV之SMB共享实时迁移
  3. Intent中的四个重要属性——Action、Data、Category、Extras
  4. 04需求工程软件建模与分析阅读笔记之四
  5. J2EE dynamic web工程搭建 struts2
  6. SAP 电商云 Spartacus UI 出现 breaking change 时,如何用文字来描述
  7. 【Java】浅析SimpleDateFormat类
  8. 随想录(嵌入式应用的三个领域)
  9. iphone开发工程师面试真题(又像c的)
  10. 战略参股奥迪威,德赛西威“躬身入局”超声波雷达
  11. 用matlab求解分支定界法,matlab分支定界法程序
  12. kaggle之员工离职分析
  13. 那些会阻碍程序员成长的细节
  14. 论文评审标准有哪些?
  15. J v a v 与 您
  16. 计算机算法在生物信息学中的应用,引力场算法及其在生物信息学中的应用
  17. 【Unity】如何优雅地实现任何线性效果?
  18. 高等数学阶段复习, 函数极限, 连续, 导数,微分
  19. 1017. Staircases
  20. unity动画转换插件 AnimationConverter, humanoid generic legacy

热门文章

  1. 聪哥哥教你学Python之如何爬取美女图片
  2. Excel插件:方方格子
  3. Redis集群原理详解
  4. Centos7 更换阿里yum源
  5. 有关大学计算机基础考试的试题,大学计算机基础考试试题
  6. 【深度学习】空洞卷积(Atrous Convolution)
  7. Stata 16(统计学软件) v16.0中文版安装教程
  8. Win10如何ping端口是否开放
  9. Typora(就是个浏览器)自定义设置。附带:Typora免费版链接
  10. Spring Cloud 集成 euraka-server 和 euraka-client