#49: Get PRNU by using RAW images

This commit is contained in:
Benjamin Loison 2024-04-16 03:02:58 +02:00
parent 6251c487e2
commit a8fa053687
No known key found for this signature in database

View File

@ -33,10 +33,10 @@ if requiresRaiseFiltering:
imagesFileNames = [imageFileName for imageFileName in tqdm(imagesFileNames, 'Filtering images') if files[imageFileName]['Device'] == 'Nikon D7000' and Image.open(f'{imagesFolderPath}/{imageFileName}').size == (4946, 3278)]
maxGreen = None
minGreen = 308#None
def treatImage(imageFileName):
global mean, numberOfImagesInMean, maxGreen
global mean, numberOfImagesInMean, minGreen
imageFilePath = f'{imagesFolderPath}/{imageFileName}'
if imageFileName.endswith('.NEF'):
with rawpy.imread(imageFilePath) as raw:
@ -45,18 +45,22 @@ def treatImage(imageFileName):
assert np.array_equal(raw.raw_pattern, np.array([[0, 1], [3, 2]], dtype = np.uint8))
rawImageVisible = raw.raw_image_visible.copy()
greenRawImageVisible = rawImageVisible[1::2, ::2]
greenRawImageVisibleMax = greenRawImageVisible.max()
if maxGreen is None or greenRawImageVisibleMax > maxGreen:
maxGreen = greenRawImageVisibleMax
print(f'{maxGreen=}')
imageNpArray = greenRawImageVisible
'''
greenRawImageVisibleMin = greenRawImageVisible.min()
if minGreen is None or greenRawImageVisibleMin < minGreen:
minGreen = greenRawImageVisibleMin
print(minGreen)
'''
imageNpArray = (greenRawImageVisible - minGreen) / (4908 - minGreen)
# Pay attention to range of values expected by the denoiser.
# Indeed if provide the thousands valued raw image, then the denoiser only returns values between 0 and 1 and making the difference between both look pointless.
#exit(1)
else:
imagePil = Image.open(imageFilePath)
imageNpArray = img_as_float(np.array(imagePil))
# As the arguments differ from a denoiser to the other should use a match instead.
imageDenoisedNpArray = denoise(imageNpArray, rescale_sigma=True)
#print(imageNpArray, imageDenoisedNpArray)
imageNoiseNpArray = imageNpArray - imageDenoisedNpArray
if mean is None:
mean = imageNoiseNpArray