50 lines
2.1 KiB
Python
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() |