PSNR 计算公式
对于一张RGB三通道图像,其计算公式如下:
先计算图像与Ground Truth的均方误差MSE:
再计算PSNR:
python 实现
网上的实现有下面两种:
import imageio
import numpy as np
import math
def psnr1(img1, img2):
mse = np.mean((img1/1.0 - img2/1.0) ** 2 )
if mse < 1.0e-10:
return 100
return 10 * math.log10(255.0**2/mse)
def psnr2(img1, img2):
mse = np.mean( (img1/255. - img2/255.) ** 2 )
if mse < 1.0e-10:
return 100
PIXEL_MAX = 1
return 20 * math.log10(PIXEL_MAX / math.sqrt(mse))
gt = imageio.imread('1.jpg')
img= imageio.imread('2.jpg')
print(psnr1(gt,img))
print(psnr2(gt,img))
注意点:
-
使用imageio的原因是在使用scipy.misc.imread()的时候,被提示这个写法将被丢弃,所以大家也可以选择导入这个新的模块来进行图像的读写等操作。
-
其中psnr1函数中在两个数组相减前除以1.0,是为了将数组的类型从uint类型转化为float类型。
转载:https://blog.csdn.net/u010886794/article/details/84784453