55 lines
2.2 KiB
Python
Executable File
55 lines
2.2 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
from PIL import Image
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
from tqdm import tqdm
|
|
from utils import denoise, iterativeMean
|
|
from skimage import img_as_float
|
|
import sys
|
|
import os
|
|
from random import shuffle
|
|
|
|
sys.path.insert(0, '../../algorithms/distance/')
|
|
|
|
from rms_diff import rmsDiffNumpy
|
|
|
|
NUMBER_OF_SUBGROUPS = 2
|
|
DENOISER = 'wavelet'
|
|
IMAGES_FOLDER = 'flat-field/TIF'
|
|
|
|
imagesFileNames = os.listdir(IMAGES_FOLDER)
|
|
# To not have a bias (chronological for instance) when split to make subgroups.
|
|
shuffle(imagesFileNames)
|
|
|
|
numberOfImagesPerSubgroup = len(imagesFileNames) // NUMBER_OF_SUBGROUPS
|
|
|
|
subgroupsIterativeMean = [iterativeMean() for _ in range(NUMBER_OF_SUBGROUPS)]
|
|
rmss = []
|
|
for subgroupImageIndex in tqdm(range(numberOfImagesPerSubgroup), 'Subgroup image index'):
|
|
for subgroupIndex in tqdm(range(NUMBER_OF_SUBGROUPS), 'Subgroup'):
|
|
imageIndex = (subgroupIndex * NUMBER_OF_SUBGROUPS) + subgroupImageIndex
|
|
imageFileName = imagesFileNames[imageIndex]
|
|
imageFilePath = f'{IMAGES_FOLDER}/{imageFileName}'
|
|
imagePil = Image.open(imageFilePath)
|
|
imageNpArray = img_as_float(np.array(imagePil))
|
|
imagePrnuEstimateNpArray = imageNpArray - denoise(imageNpArray, DENOISER)
|
|
subgroupIterativeMean = subgroupsIterativeMean[subgroupIndex]
|
|
subgroupIterativeMean.add(imagePrnuEstimateNpArray)
|
|
if subgroupIndex == NUMBER_OF_SUBGROUPS - 1:
|
|
assert NUMBER_OF_SUBGROUPS == 2
|
|
rms = rmsDiffNumpy(subgroupIterativeMean.mean, subgroupsIterativeMean[1 - subgroupIndex].mean)
|
|
rmss += [rms]
|
|
|
|
mostImagesSubgroupPrnuEstimatesNpArray = [subgroupIterativeMean.mean for subgroupIterativeMean in subgroupsIterativeMean]
|
|
minimum = np.min(mostImagesSubgroupPrnuEstimatesNpArray)
|
|
maximum = np.max(mostImagesSubgroupPrnuEstimatesNpArray)
|
|
|
|
for subgroupIndex in range(NUMBER_OF_SUBGROUPS):
|
|
plt.imsave(f'prnu_subgroup_{subgroupIndex}.png', (subgroupsIterativeMean[subgroupIndex].mean - minimum) / (maximum - minimum))
|
|
|
|
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() |