Python计算两张图的PSNR值

Python计算两张图的PSNR值,第1张

Python计算两张图的PSNR值 Python计算两张图的PSNR值

    本文主要记录如何用python实现求解两张图的PSNR值。

目录
  • Python计算两张图的PSNR值
  • 1.PSNR求解公式
  • 2.完整的PSNR求解代码
  • 3.运算结果展示
  • 4.参考文献

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 = 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。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5680034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存