|
|
| 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) |