PSNR算法_及python代码

23.07.30 psnr算法公式介绍及python代码实现。

一、PSNR计算方案

PSNR计算通过两步完成:

        1. 首先计算均方误差,即mse。以灰度图像举例,均方误差即为两图像对应像素灰度之差平方,在根据图像的像素数量进行均值计算,公式如下:

MSE = \left \| I(m, n, c) - GT(m, n, c) \right \|^{2}

        2. 后通过mse计算得出两图像之间psnr值。以灰度图像举例,PSNR为像素中最大值的平方除以均方误差后求其以10为底的对数,最后乘以十,化简后公式如下:

PSNR = 20 * \log_{10}(\frac{MAX_{pixel}}{\sqrt mse})

        其中,m,n 为图像尺寸,灰度图像时,可去掉c的部分。MAXpixel为图像中像素的最大值,如每个像素为8位二进制时,则为255。

二、python代码

以下为对于灰度图像进行PSNR计算代码,若为彩色图像,通常采取以下三种方案:

  1. 对RGB三个通道进行PSNR计算后进行平均。

  2. 对RGB三通道计算均方误差后除以3。

  3. 将图片转为YCbCr格式后只计算Y分量的PSNR。

import cv2 as cv
import numpy as np
import math


def psnr(img1, img2):
    mse = np.mean((img1 / 1.0 - img2 / 1.0) ** 2)
    psnr = 20 * math.log10(255 / math.sqrt(mse))
    return psnr

def main():
    imag1 = cv.imread("./image/01_Lena.bmp")
    imag2 = cv.imread("./image/02_BABOO.bmp")
    res = psnr(imag1, imag2)
    print("res:", res)


if __name__ == '__main__':
    main()

注:其中mse计算时需要将两图片数据除以1.0,否则结果有误。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值