在网上找了很多,感觉都有点小毛病,自己整合了一个
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_______________________________")
结果看来应该是没什么问题的