Python计算两张图的PSNR值
Python计算两张图的PSNR值 本文主要记录如何用python实现求解两张图的PSNR值。目录Python计算两张图的PSNR值1.PSNR求解公式2.完整的PSNR求解代码3.运算结果展示4.参考文献1.PSNR求解公式 (1)对于三通道的RGB图像 计算MSE的数学表达式是: 具体的代码为:# compute MSEmse = np.mean((img1/1.0-img2
·
Python计算两张图的PSNR值
本文主要记录如何用python实现求解两张图的PSNR值。
1.PSNR求解公式
(1)对于三通道的RGB图像 计算MSE的数学表达式是:
具体的代码为:
# compute MSE
mse = np.mean((img1/1.0-img2/1.0)**2)
(2)得到MSE后计算PSNR,具体数学表达式为:
具体的代码为:
psnr1=20*math.log10(255/math.sqrt(mse))
另外一种方式就是将像素值进行归一化处理,然后再进行PSNR值的求解:
mse = np.mean((img1/255.0-img2/255.0)**2)
psnr2=20*math.log10(1/math.sqrt(mse))
2.完整的PSNR求解代码
完整的代码如下所示:
import cv2
import math
import numpy
def psnr1(img1, img2):
# compute mse
# mse = np.mean((img1-img2)**2)
mse = numpy.mean((img1 / 1.0 - img2 / 1.0) ** 2)
# compute psnr
if mse < 1e-10:
return 100
psnr1 = 20 * math.log10(255 / math.sqrt(mse))
return psnr1
def psnr2(img1, img2):
mse = numpy.mean((img1 / 255.0 - img2 / 255.0) ** 2)
if mse < 1e-10:
return 100
psnr2 = 20 * math.log10(1 / math.sqrt(mse))
return psnr2
imag1 = cv2.imread("./image/original_image/Lena.bmp")
print("imag1.shap: {}".format(imag1.shape))
imag2 = cv2.imread("./image/embedded_image/Lena.bmp_embed_image.bmp")
print("imag1.shap: {}".format(imag2.shape))
image_size = [512, 512] #将图像转化为512*512大小的尺寸
imag1 = cv2.resize(imag1, image_size, interpolation=cv2.INTER_CUBIC)
imag1 = cv2.cvtColor(imag1, cv2.COLOR_BGR2GRAY)#将图像转化为灰度图像,不是必须转,也可以使用原始的彩色图像
imag2 = cv2.resize(imag2, image_size, interpolation=cv2.INTER_CUBIC)
imag2 = cv2.cvtColor(imag2, cv2.COLOR_BGR2GRAY)#将图像转化为灰度图像,不是必须转,也可以使用原始的彩色图像
res1 = psnr1(imag1, imag2)
print("res1:", res1)
res2 = psnr2(imag1, imag2)
print("res2:", res2)
3.运算结果展示
4.参考文献
参考链接:用Python计算两图像的峰值信噪比PSNR。
更多推荐
已为社区贡献7条内容
所有评论(0)