栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python计算两张图的PSNR值

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/674826.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号