PSNR峰值信噪比(python代码实现+SSIM+MSIM)
一、原理
psnr是“Peak Signal to Noise Ratio”的缩写,即峰值信噪比,是一种评价图像的客观标准
用来表示信号最大可能功率和影响它的表示精度的破坏性噪声功率的比值,可以显示图像画质损失的程度。峰值信噪比越大,表示画质损失越小。PSNR的单位是dB,数值越大表示失真越小。
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)相关推荐
- 图像的评价指标之PSNR——峰值信噪比
图像的评价指标之PSNR--峰值信噪比 文章目录: 以及Python的实现 参考: https://blog.csdn.net/szfhy/article/details/49615833 https ...
- PSNR峰值信噪比matlab实现
PSNR,峰值信噪比,通常用来评价一幅图像压缩后和原图像相比质量的好坏,当然,压缩后图像一定会比原图像质量差的,所以就用这样一个评价指标来规定标准了.PSNR越高,压缩后失真越小.这里主要定义了两个值 ...
- 信噪比python代码实现
1 定义 原始信号:x 噪声信号:n 信噪比:SNR 单位是db 其中Psignal是原信号能量(或者是功率),Pnosie是噪声能量(或者是功率) import numpy as np import ...
- 【深度学习】图像去雾,去噪里常用的相似评价指标:PSNR(峰值信噪比) SSIM(结构相似度)MSE(均方误差)
文章目录 一.PSNR(峰值信噪比) 二.SSIM(结构相似度) 三.MSE(均方误差) 小插曲:plt.savefig()保存的图片为空白 一.PSNR(峰值信噪比) 公式直接抄我师哥论文上的,n通 ...
- matlab snr mse,MATLAB 均方根误差MSE、两图像的信噪比SNR、峰值信噪比PSNR、结构相似性SSIM...
今天的作业是求两幅图像的MSE.SNR.PSNR.SSIM.代码如下: clc; close all; X = imread('q1.tif');% 读取图像 Y=imread('q2.tif'); ...
- Python 不同分辨率图像峰值信噪比[PSNR]
PNNR:全称为"Peak Signal-to-Noise Ratio",中文直译为峰值信噪比 前言 一.定义 二.Python代码 1.自定义 2.Tensorflow 总结 前 ...
- python求不同分辨率图像的峰值信噪比,一文搞懂
可以使用 Python 的 NumPy 和 OpenCV 库来实现这个任务.提前准备一张图片作为素材. 文章目录 什么是峰值信噪比 PSNR 峰值信噪比补充说明 使用 OpenCV 库来实现这个任务 ...
- 【图像处理】——图像质量评价指标信噪比(PSNR)和结构相似性(SSIM)(含原理和Python代码)
目录 一.信噪比(PSNR) 1.信噪比的原理与计算公式 2.Python常规代码实现PSNR计算 3.TensorFlow实现PSNR计算 4.skimage实现PSNR计算 5.三种方法计算的结果 ...
- (python)计算图像峰值信噪比-PSNR、结构相似度-SSIM
计算峰值信噪比-PSNR和结构相似度-SSIM(python实现) 说明: PSNR(Peak Signal to Noise Ratio),取值范围为:[0,100],PSNR值越大两张图片越相似, ...
- 两种常用的全参考图像质量评价指标——峰值信噪比(PSNR)和结构相似性(SSIM)
原文:https://blog.csdn.net/zjyruobing/article/details/49908979 1.PSNR(Peak Signal to Noise Ratio)峰值信噪比 ...
最新文章
- js中Object类型和Array类型的变量被赋值(复制)给其他变量后,修改被赋值(复制)的新变量的值,会影响原始变量的值,这是为什么呢?
- Windows Server 2012 HyperV之SMB共享实时迁移
- Intent中的四个重要属性——Action、Data、Category、Extras
- 04需求工程软件建模与分析阅读笔记之四
- J2EE dynamic web工程搭建 struts2
- SAP 电商云 Spartacus UI 出现 breaking change 时,如何用文字来描述
- 【Java】浅析SimpleDateFormat类
- 随想录(嵌入式应用的三个领域)
- iphone开发工程师面试真题(又像c的)
- 战略参股奥迪威,德赛西威“躬身入局”超声波雷达
- 用matlab求解分支定界法,matlab分支定界法程序
- kaggle之员工离职分析
- 那些会阻碍程序员成长的细节
- 论文评审标准有哪些?
- J v a v 与 您
- 计算机算法在生物信息学中的应用,引力场算法及其在生物信息学中的应用
- 【Unity】如何优雅地实现任何线性效果?
- 高等数学阶段复习, 函数极限, 连续, 导数,微分
- 1017. Staircases
- unity动画转换插件 AnimationConverter, humanoid generic legacy