File size: 1,308 Bytes
28e6f98 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
import numpy as np
from skimage.metrics import peak_signal_noise_ratio, structural_similarity
def nmse(gt, pred):
"""Compute Normalized Mean Squared Error (NMSE)"""
return np.linalg.norm(gt - pred) ** 2 / np.linalg.norm(gt) ** 2
def psnr(gt, pred):
"""Compute Peak Signal to Noise Ratio metric (PSNR)"""
return peak_signal_noise_ratio(gt, pred, data_range=gt.max())
def ssim(gt, pred, maxval=None):
"""Compute Structural Similarity Index Metric (SSIM)"""
maxval = gt.max() if maxval is None else maxval
ssim = 0
for slice_num in range(gt.shape[0]):
ssim = ssim + structural_similarity(
gt[slice_num], pred[slice_num], data_range=maxval
)
ssim = ssim / gt.shape[0]
return ssim
class AverageMeter(object):
"""Computes and stores the average and current value.
Code imported from https://github.com/pytorch/examples/blob/master/imagenet/main.py#L247-L262
"""
def __init__(self):
self.reset()
def reset(self):
self.val = 0
self.avg = 0
self.sum = 0
self.count = 0
self.score = []
def update(self, val, n=1):
self.val = val
self.sum += val * n
self.count += n
self.avg = self.sum / self.count
self.score.append(val) |