diff --git a/algorithms/distance/rms_diff.py b/algorithms/distance/rms_diff.py index 4c0eba3..7c0a944 100644 --- a/algorithms/distance/rms_diff.py +++ b/algorithms/distance/rms_diff.py @@ -2,6 +2,7 @@ from PIL import ImageChops import math import operator import functools +import numpy as np def rmsDiffPil(im1, im2): "Calculate the root-mean-square difference between two images" @@ -13,3 +14,5 @@ def rmsDiffPil(im1, im2): map(lambda h, i: h*(i**2), h, range(256)) ) / (float(im1.size[0]) * im1.size[1])) +def rmsDiffNumpy(image0, image1): + return np.sqrt(np.mean(np.square(image0 - image1))) \ No newline at end of file diff --git a/datasets/fake/generate_dataset.py b/datasets/fake/generate_dataset.py index 15b9a28..1758410 100644 --- a/datasets/fake/generate_dataset.py +++ b/datasets/fake/generate_dataset.py @@ -5,7 +5,7 @@ import sys sys.path.insert(0, '../../algorithms/distance/') -from rms_diff import rmsDiffPil +from rms_diff import rmsDiffPil, rmsDiffNumpy sys.path.insert(0, '../../algorithms/context_adaptive_interpolator/') @@ -56,14 +56,15 @@ axs[1].imshow(imagesWithPrnu[0][0]) imagesWithPrnuPil = [[toPilImage(imageWithPrnu) for imageWithPrnu in imagesWithPrnu[phoneIndex]] for phoneIndex in range(NUMBER_OF_PHONES)] #showImageWithMatplotlib(imagesWithPrnu[0][0]) -axs[2].set_title(f'First image with PRNU (RMS with image without PRNU: {rmsDiffPil(toPilImage(imagesWithPrnu[0][0]), toPilImage(imagesWithoutPrnu[0][0]))})') +axs[2].set_title(f'First image with PRNU\nRMS with image without PRNU: {round(rmsDiffNumpy(imagesWithPrnu[0][0], imagesWithoutPrnu[0][0]), 4)}') axs[2].imshow(imagesWithPrnu[0][0]) imagesWithPrnuPil0Mean = np.array(imagesWithPrnuPil[0]).mean(axis = 0) #showImageWithMatplotlib(imagesWithPrnuPil0Mean) -axs[3].set_title('Mean of images with PRNU') +axs[3].set_title(f'Mean of images with PRNU\ni.e. estimated PRNU\nRMS with actual PRNU: {round(rmsDiffNumpy(imagesWithPrnuPil0Mean, prnus[0]), 4)}') axs[3].imshow(imagesWithPrnuPil0Mean) +plt.tight_layout() plt.show() ##