53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
from PIL import Image
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
from tqdm import tqdm
|
|
from skimage.restoration import denoise_tv_chambolle
|
|
from skimage import img_as_float
|
|
import sys
|
|
|
|
sys.path.insert(0, '../../algorithms/image_utils/')
|
|
|
|
from image_utils import showImageWithMatplotlib, toPilImage
|
|
|
|
sys.path.insert(0, '../../algorithms/distance/')
|
|
|
|
from rms_diff import rmsDiffNumpy
|
|
|
|
NUMBER_OF_SUBGROUPS = 1
|
|
|
|
IMAGES_FOLDER = 'flat-field/TIF'
|
|
imagesFileNames = os.listdir(IMAGES_FOLDER)
|
|
numberOfImagesPerSubgroup = len(imagesFileNames) // NUMBER_OF_SUBGROUPS
|
|
|
|
# 1
|
|
numberOfImagesThresholds = range(numberOfImagesPerSubgroup, numberOfImagesPerSubgroup + 1)
|
|
|
|
# Assume random image order to not introduce a bias.
|
|
subgroupsPrnuEstimatesNpArray = []
|
|
for subgroupIndex in range(NUMBER_OF_SUBGROUPS):
|
|
imagesPrnuEstimateNpArray = []
|
|
for imageFileName in tqdm(imagesFileNames[numberOfImagesPerSubgroup * subgroupIndex : numberOfImagesPerSubgroup * (subgroupIndex + 1)]):
|
|
imagePath = f'{IMAGES_FOLDER}/{imageFileName}'
|
|
imagePil = Image.open(imagePath)
|
|
imageNpArray = img_as_float(np.array(imagePil))
|
|
imagePrnuEstimateNpArray = imageNpArray - denoise_tv_chambolle(imageNpArray, weight=0.2, channel_axis=-1)
|
|
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, numberOfImages in enumerate(numberOfImagesThresholds):
|
|
rms = rmsDiffNumpy(subgroupsPrnuEstimatesNpArray[0][numberOfImagesIndex], subgroupsPrnuEstimatesNpArray[1][numberOfImagesIndex])
|
|
rmss += [rms]
|
|
|
|
plt.title('RMS between both subgroups estimated PRNUs 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() |