import cv2 import numpy as np import math # from skimage.metrics import structural_similarity as ssim from skimage.measure import compare_ssim from scipy.misc import imread from glob import glob import argparse parser = argparse.ArgumentParser(description="evaluation codes") parser.add_argument("--path", type=str, help="Path to evaluate images.") args = parser.parse_args() def psnr(img1, img2): mse = np.mean((img1 / 255.0 - img2 / 255.0) ** 2) if mse < 1.0e-10: return 100 PIXEL_MAX = 1 return 20 * math.log10(PIXEL_MAX / math.sqrt(mse)) def psnr_raw(img1, img2): mse = np.mean((img1 - img2) ** 2) if mse < 1.0e-10: return 100 PIXEL_MAX = 1 return 20 * math.log10(PIXEL_MAX / math.sqrt(mse)) def my_ssim(img1, img2): return compare_ssim( img1, img2, data_range=img1.max() - img1.min(), multichannel=True ) def quan_eval(path, suffix="jpg"): # path: /disk2/yazhou/projects/IISP/exps/test_final_unet_globalEDV2/ # ours gt_imgs = sorted(glob(path + "tar*.%s" % suffix)) pred_imgs = sorted(glob(path + "pred*.%s" % suffix)) # with open(split_path + "test_gt.txt", 'r') as f_gt, open(split_path+"test_rgb.txt","r") as f_rgb: # gt_imgs = [line.rstrip() for line in f_gt.readlines()] # pred_imgs = [line.rstrip() for line in f_rgb.readlines()] assert len(gt_imgs) == len(pred_imgs) psnr_avg = 0.0 ssim_avg = 0.0 for i in range(len(gt_imgs)): gt = imread(gt_imgs[i]) pred = imread(pred_imgs[i]) psnr_temp = psnr(gt, pred) psnr_avg += psnr_temp ssim_temp = my_ssim(gt, pred) ssim_avg += ssim_temp print("psnr: ", psnr_temp) print("ssim: ", ssim_temp) psnr_avg /= float(len(gt_imgs)) ssim_avg /= float(len(gt_imgs)) print("psnr_avg: ", psnr_avg) print("ssim_avg: ", ssim_avg) return psnr_avg, ssim_avg def mse(gt, pred): return np.mean((gt - pred) ** 2) def mse_raw(path, suffix="npy"): gt_imgs = sorted(glob(path + "raw_tar*.%s" % suffix)) pred_imgs = sorted(glob(path + "raw_pred*.%s" % suffix)) # with open(split_path + "test_gt.txt", 'r') as f_gt, open(split_path+"test_rgb.txt","r") as f_rgb: # gt_imgs = [line.rstrip() for line in f_gt.readlines()] # pred_imgs = [line.rstrip() for line in f_rgb.readlines()] assert len(gt_imgs) == len(pred_imgs) mse_avg = 0.0 psnr_avg = 0.0 for i in range(len(gt_imgs)): gt = np.load(gt_imgs[i]) pred = np.load(pred_imgs[i]) mse_temp = mse(gt, pred) mse_avg += mse_temp psnr_temp = psnr_raw(gt, pred) psnr_avg += psnr_temp print("mse: ", mse_temp) print("psnr: ", psnr_temp) mse_avg /= float(len(gt_imgs)) psnr_avg /= float(len(gt_imgs)) print("mse_avg: ", mse_avg) print("psnr_avg: ", psnr_avg) return mse_avg, psnr_avg test_full = False # if test_full: # psnr_avg, ssim_avg = quan_eval(ROOT_PATH+"%s/vis_%s_full/"%(args.task, args.ckpt), "jpeg") # mse_avg, psnr_avg_raw = mse_raw(ROOT_PATH+"%s/vis_%s_full/"%(args.task, args.ckpt)) # else: psnr_avg, ssim_avg = quan_eval(args.path, "jpg") mse_avg, psnr_avg_raw = mse_raw(args.path) print( "pnsr: {}, ssim: {}, mse: {}, psnr raw: {}".format( psnr_avg, ssim_avg, mse_avg, psnr_avg_raw ) )