Files
Robust_image_source_identif…/datasets/raise/split_and_compare_prnus_of_subgroups.py

50 lines
2.1 KiB
Python

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from tqdm import tqdm
from utils import denoise
from skimage import img_as_float
import sys
import os
sys.path.insert(0, '../../algorithms/distance/')
from rms_diff import rmsDiffNumpy
NUMBER_OF_SUBGROUPS = 1
DENOISER = 'wavelet'
IMAGES_FOLDER = 'flat-field/TIF'
imagesFileNames = os.listdir(IMAGES_FOLDER)
numberOfImagesPerSubgroup = len(imagesFileNames) // NUMBER_OF_SUBGROUPS
numberOfImagesThresholds = range(numberOfImagesPerSubgroup, numberOfImagesPerSubgroup + 1)
# Assume random image order to not introduce a bias.
subgroupsPrnuEstimatesNpArray = []
for subgroupIndex in tqdm(range(NUMBER_OF_SUBGROUPS), 'Subgroup'):
imagesPrnuEstimateNpArray = []
subgroupImagesFileNames = imagesFileNames[numberOfImagesPerSubgroup * subgroupIndex : numberOfImagesPerSubgroup * (subgroupIndex + 1)]
for imageFileName in tqdm(subgroupImagesFileNames, f'Image of subgroup {subgroupIndex}'):
imagePath = f'{IMAGES_FOLDER}/{imageFileName}'
imagePil = Image.open(imagePath)
imageNpArray = img_as_float(np.array(imagePil))
imagePrnuEstimateNpArray = imageNpArray - denoise(imageNpArray, DENOISER)
imagesPrnuEstimateNpArray += [imagePrnuEstimateNpArray]
subgroupPrnuEstimateNpArray = []
# Not efficient mean computation.
for numberOfImagesIndex, numberOfImages in enumerate(numberOfImagesThresholds):
subgroupPrnuEstimateNpArray += [np.array(imagesPrnuEstimateNpArray[:numberOfImages]).mean(axis = 0)]
plt.imsave('prnu.png', subgroupPrnuEstimateNpArray[-1])
subgroupsPrnuEstimatesNpArray += [subgroupPrnuEstimateNpArray]
rmss = []
for numberOfImagesIndex in range(len(numberOfImagesThresholds)):
rms = rmsDiffNumpy(subgroupsPrnuEstimatesNpArray[0][numberOfImagesIndex], subgroupsPrnuEstimatesNpArray[1][numberOfImagesIndex])
rmss += [rms]
plt.title(f'RMS between both subgroups estimated PRNUs with {DENOISER} denoiser for a given number of images among them')
plt.xlabel('Number of images of each subgroup')
plt.ylabel('RMS between both subgroups estimated PRNUs')
plt.plot(rmss)
plt.show()