PSNR和SSIM计算的代码实现

PSNR和SSIM计算的代码实现

注意:
1.以下参数img的数据类型为:numpy.ndarray
2.img的维度为:[H,W,C]
3.像素值范围在【0-255】

  • PSNR
def calculate_psnr(img1, img2):
    # img1 and img2 have range [0, 255]
    img1 = img1.astype(np.float64)
    img2 = img2.astype(np.float64)
    # print(img1)
    # print('img1-2')
    # print(img2)
    mse = np.mean((img1 - img2)**2)
    # print(mse)
    if mse == 0:
        return float('inf')
    return 20 * math.log10(255.0 / math.sqrt(mse))

  • SSIM
def ssim(img1, img2):
    C1 = 
以下是Python计算PSNRSSIM的代码: ```python import cv2 import numpy as np def psnr(img1, img2): mse = np.mean((img1 - img2) ** 2) if mse == 0: return 100 PIXEL_MAX = 255.0 return 20 * np.log10(PIXEL_MAX / np.sqrt(mse)) def ssim(img1, img2): C1 = (0.01 * 255) ** 2 C2 = (0.03 * 255) ** 2 img1 = img1.astype(np.float64) img2 = img2.astype(np.float64) kernel = cv2.getGaussianKernel(11, 1.5) window = np.outer(kernel, kernel.transpose()) mu1 = cv2.filter2D(img1, -1, window)[5:-5, 5:-5] mu2 = cv2.filter2D(img2, -1, window)[5:-5, 5:-5] mu1_sq = mu1 ** 2 mu2_sq = mu2 ** 2 mu1_mu2 = mu1 * mu2 sigma1_sq = cv2.filter2D(img1 ** 2, -1, window)[5:-5, 5:-5] - mu1_sq sigma2_sq = cv2.filter2D(img2 ** 2, -1, window)[5:-5, 5:-5] - mu2_sq sigma12 = cv2.filter2D(img1 * img2, -1, window)[5:-5, 5:-5] - mu1_mu2 ssim_map = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) * (sigma1_sq + sigma2_sq + C2)) return ssim_map.mean() # 读取图像 img1 = cv2.imread('img1.png') img2 = cv2.imread('img2.png') # 计算PSNRSSIM psnr_value = psnr(img1, img2) ssim_value = ssim(img1, img2) # 输出结果 print("PSNR value is:", psnr_value) print("SSIM value is:", ssim_value) ``` 其中,`psnr()`函数用于计算PSNR值,`ssim()`函数用于计算SSIM值。在代码中,我们使用OpenCV库读取图像,并使用numpy库进行计算。需要注意的是,计算SSIM值需要使用高斯滤波器,这里我们使用OpenCV库中的`getGaussianKernel()`函数生成高斯滤波器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下酒番陪绅士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值