import argparse import skimage.io import numpy as np from matplotlib import cm import math from skimage.metrics import structural_similarity as ssim def normalize(x, min_, max_): return (x - min_) / (max_ - min_) def main(args): img1 = skimage.img_as_float(skimage.io.imread(args.img1)).astype(np.float32) img2 = skimage.img_as_float(skimage.io.imread(args.img2)).astype(np.float32) ref = skimage.img_as_float(skimage.io.imread(args.ref)).astype(np.float32) img1 = img1[:, :, :3] img2 = img2[:, :, :3] ref = ref[:, :, :3] diff1 = np.sum(np.abs(img1 - ref), axis = 2) diff2 = np.sum(np.abs(img2 - ref), axis = 2) min_ = min(np.min(diff1), np.min(diff2)) max_ = max(np.max(diff1), np.max(diff2)) * 0.5 diff1 = cm.viridis(normalize(diff1, min_, max_)) diff2 = cm.viridis(normalize(diff2, min_, max_)) # MSE print('MSE img1:', np.mean(np.power(img1 - ref, 2.0))) print('MSE img2:', np.mean(np.power(img2 - ref, 2.0))) # PSNR print('PSNR img1:', 20 * math.log10(1.0 / math.sqrt(np.mean(np.power(img1 - ref, 2.0))))) print('PSNR img2:', 20 * math.log10(1.0 / math.sqrt(np.mean(np.power(img2 - ref, 2.0))))) # SSIM print('SSIM img1:', ssim(img1, ref, multichannel=True)) print('SSIM img2:', ssim(img2, ref, multichannel=True)) skimage.io.imsave('diff1.png', (diff1 * 255).astype(np.uint8)) skimage.io.imsave('diff2.png', (diff2 * 255).astype(np.uint8)) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("img1", help="img1") parser.add_argument("img2", help="img2") parser.add_argument("ref", help="ref") args = parser.parse_args() main(args)