计算两个文件夹图片的PSNR和SSIM,真实有效

在网上找了很多,感觉都有点小毛病,自己整合了一个


import numpy as np
import os
import cv2
import math

from skimage.metrics import structural_similarity as compare_ssim
from skimage.metrics import peak_signal_noise_ratio as compare_psnr

from functools import partial

IMG_EXTENSIONS = [
    '.jpg', '.JPG', '.jpeg', '.JPEG',
    '.png', '.PNG', '.ppm', '.PPM', '.bmp', '.BMP',
]
def isImagefile(input):
    return any(input.endswith(ext) for ext in IMG_EXTENSIONS)

def cal_ssim(im1,im2):
      assert len(im1.shape) == 2 and len(im2.shape) == 2
      assert im1.shape == im2.shape
      mu1 = im1.mean()
      mu2 = im2.mean()
      sigma1 = np.sqrt(((im1 - mu1) ** 2).mean())
      sigma2 = np.sqrt(((im2 - mu2) ** 2).mean())
      sigma12 = ((im1 - mu1) * (im2 - mu2)).mean()
      k1, k2, L = 0.01, 0.03, 255
      C1 = (k1*L) ** 2
      C2 = (k2*L) ** 2
      C3 = C2/2
      l12 = (2*mu1*mu2 + C1)/(mu1 ** 2 + mu2 ** 2 + C1)
      c12 = (2*sigma1*sigma2 + C2)/(sigma1 ** 2 + sigma2 ** 2 + C2)
      s12 = (sigma12 + C3)/(sigma1*sigma2 + C3)
      ssim = l12 * c12 * s12
      return ssim
def quality_assess_SM3(inputdir, gtdir,resultdir):
    inputdir_list = os.listdir(inputdir)
    gtdir_list = os.listdir(gtdir)
    inputdir_list.sort()
    gtdir_list.sort()

    fc = open(os.path.join(resultdir,'result.txt'), 'w')

    ssim_list = []
    psnr_list = []
    n_images = 0
    avg_p = 0
    avg_s = 0
    for name in gtdir_list:
        if name.endswith('.jpg'):
            n_images += 1
    print('number of images :',n_images)
    for name in gtdir_list:

        path1 = os.path.join(inputdir,name)
        path2 = os.path.join(gtdir,name)
        img1 = cv2.imread(path1)
        img2 = cv2.imread(path2)

        inputImg_gry = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
        GT_gry = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)

        print(name+':')
        p = compare_psnr(img1, img2)
        avg_p += p/n_images
        print('     	p', p)
        psnr_list.append(p)

        # s = compare_ssim(inputImg_gry,GT_gry)
        s=cal_ssim(inputImg_gry,GT_gry)
        avg_s += s/n_images
        print('     	s', s)
        ssim_list.append(s)

        fc.write('%s : %.4f %.4f \n' %(name, p, s))
    print('Avg. psnr: %f ssim: %f\n' %(avg_p, avg_s))
    fc.write('Avg. psnr: %f ssim: %f\n' %(avg_p, avg_s))
    fc.close()

def dropext(fn): return os.path.splitext(fn)[0]

gtdir ='E:\\Experience\\2323\\hazydata\\test\\GT'
inputdir = 'E:\\Experience\\2323\\hazydata\\test\\hazy'
resultdir = 'D:/fog/results/'
quality_assess_SM3(inputdir, gtdir,resultdir)

print("____________________take notes:network_epoch_datasets_______________________________")

结果看来应该是没什么问题的

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值