本文主要记录如何用python实现求解两张图的PSNR值。
- Python计算两张图的PSNR值
- 1.PSNR求解公式
- 2.完整的PSNR求解代码
- 3.运算结果展示
- 4.参考文献
(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 = 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 = 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。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)