import numpy as np from skimage.metrics import peak_signal_noise_ratio, structural_similarity from typing import Optional def ssim( gt: np.ndarray, pred: np.ndarray, data_range: Optional[float] = None ) -> np.ndarray: """Compute Structural Similarity Index Metric (SSIM)""" if not gt.ndim == 3: raise ValueError("Unexpected number of dimensions in ground truth.") if not gt.ndim == pred.ndim: raise ValueError("Ground truth dimensions does not match pred.") data_range = gt.max() if data_range is None else data_range ssim = np.array([0]) for slice_num in range(gt.shape[0]): ssim = ssim + structural_similarity( gt[slice_num], pred[slice_num], data_range=data_range ) return ssim / gt.shape[0] def psnr( gt: np.ndarray, pred: np.ndarray, data_range: Optional[float] = None ) -> np.ndarray: """Compute Peak Signal to Noise Ratio metric (PSNR)""" data_range = gt.max() if data_range is None else data_range return peak_signal_noise_ratio(gt, pred, data_range=data_range)