算法"/>
PSNR算法
23.07.30 psnr算法公式介绍及python代码实现。
一、PSNR计算方案
PSNR计算通过两步完成:
1. 首先计算均方误差,即mse。以灰度图像举例,均方误差即为两图像对应像素灰度之差的平方之和,在根据图像的像素数量进行均值计算,公式如下:
2. 后通过mse计算得出两图像之间psnr值。以灰度图像举例,PSNR为像素中最大值的平方除以均方误差后求其以10为底的对数,最后乘以十,化简后公式如下:
其中,m,n 为图像尺寸,灰度图像时,可去掉c的部分。MAXpixel为图像中像素的最大值,如每个像素为8位二进制时,则为255。
二、python代码
以下为对于灰度图像进行PSNR计算代码,若为彩色图像,通常采取以下三种方案:
-
对RGB三个通道进行PSNR计算后进行平均。
-
对RGB三通道计算均方误差后除以3。
-
将图片转为YCbCr格式后只计算Y分量的PSNR。
import cv2 as cv
import numpy as np
import mathdef psnr(img1, img2):mse = np.mean((img1 / 1.0 - img2 / 1.0) ** 2)psnr = 20 * math.log10(255 / math.sqrt(mse))return psnrdef 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,否则结果有误。
更多推荐
PSNR算法
发布评论