图像处理计算两个文件夹中对应图片的PSNR/SSIM,计算

用matlbe实现
**

计算多张图片,两个文件夹中对应图片的PSNR/SSIM

**

计算两个文件夹中对应图片的PSNR/SSIM

import os
import numpy as np
import math
from PIL import Image

import time

当中是你的程序

def psnr(img1, img2):
mse = np.mean((img1 / 1. - img2 / 1.) ** 2)
if mse < 1.0e-10:
return 100 * 1.0
return 10 * math.log10(255.0 * 255.0 / mse)

def mse(img1, img2):
mse = np.mean((img1 / 1. - img2 / 1.) ** 2)
return mse

def ssim(y_true, y_pred):
u_true = np.mean(y_true)
u_pred = np.mean(y_pred)
var_true = np.var(y_true)
var_pred = np.var(y_pred)
std_true = np.sqrt(var_true)
std_pred = np.sqrt(var_pred)
c1 = np.square(0.01 * 7)
c2 = np.square(0.03 * 7)
ssim = (2 * u_true * u_pred + c1) * (2 * std_pred * std_true + c2)
denom = (u_true ** 2 + u_pred ** 2 + c1) * (var_pred + var_true + c2)
return ssim / denom

path1 = ‘/’ # 指定输出结果文件夹 #文件夹中的图片应该是0.jpg 1.jpg排列的
path2 = ‘//’ # 指定原图文件夹 #文件夹中的图片应该是0.jpg 1.jpg排列的
f_nums = len(os.listdir(path1))
list_psnr = []
list_ssim = []
list_mse = []
for i in range(0, 4):

img_a = Image.open(path1 + str(i) + '.jpg')
img_b = Image.open(path2 + str(i) + '.jpg')
img_a = np.array(img_a)
img_b = np.array(img_b)

psnr_num = psnr(img_a, img_b)
ssim_num = ssim(img_a, img_b)
mse_num = mse(img_a, img_b)
list_ssim.append(ssim_num)
list_psnr.append(psnr_num)
list_mse.append(mse_num)

print(“平均PSNR:”, np.mean(list_psnr)) # ,list_psnr)
print(“平均SSIM:”, np.mean(list_ssim)) # ,list_ssim)
print(“平均MSE:”, np.mean(list_mse)) # ,list_mse)

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要批量计算两个文件夹PSNRSSIM,需要编写一个脚本来自动化这个过程。这里给出一个Python的示例脚本,假设你已经安装了Python和OpenCV库。 ``` import cv2 import os def calculate_psnr_ssim(img1_path, img2_path): img1 = cv2.imread(img1_path) img2 = cv2.imread(img2_path) psnr = cv2.PSNR(img1, img2) ssim = cv2.SSIM(img1, img2) return psnr, ssim def batch_calculate_psnr_ssim(folder1, folder2): img1_paths = sorted([os.path.join(folder1, filename) for filename in os.listdir(folder1)]) img2_paths = sorted([os.path.join(folder2, filename) for filename in os.listdir(folder2)]) assert len(img1_paths) == len(img2_paths), "Number of images in two folders must be the same" psnr_sum = 0 ssim_sum = 0 for img1_path, img2_path in zip(img1_paths, img2_paths): psnr, ssim = calculate_psnr_ssim(img1_path, img2_path) psnr_sum += psnr ssim_sum += ssim psnr_avg = psnr_sum / len(img1_paths) ssim_avg = ssim_sum / len(img1_paths) return psnr_avg, ssim_avg if __name__ == '__main__': folder1 = 'path/to/folder1' folder2 = 'path/to/folder2' psnr_avg, ssim_avg = batch_calculate_psnr_ssim(folder1, folder2) print("Average PSNR: {:.2f}".format(psnr_avg)) print("Average SSIM: {:.2f}".format(ssim_avg)) ``` 你需要将`path/to/folder1`和`path/to/folder2`分别替换为两个包含图像文件的文件夹的实际路径。然后运行脚本,它将自动计算两个文件夹所有相同文件名的图像的平均PSNRSSIM,并将结果输出到控制台。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值