Compare commits

...

4 Commits

Author SHA1 Message Date
Benjamin Loison
f4d8c028b2
Remove unnecessary spaces
Thanks to:

```bash
sed -i 's/^ *$//g' extract_noise.py
```
2024-04-17 14:32:55 +02:00
Benjamin Loison
3760164622
Add and use colorRawImageVisible 2024-04-17 14:27:03 +02:00
Benjamin Loison
83a12f4e0a
Add and use SKY and WALL 2024-04-17 14:26:13 +02:00
Benjamin Loison
e080e841f5
Add and use raiseNotFlatFields 2024-04-17 14:10:11 +02:00

View File

@ -14,15 +14,16 @@ imagesFolderPathFileName = imagesFolderPath.replace('/', '_')
denoiser = 'wavelet'
npArrayFilePath = f'mean_{imagesFolderPathFileName}_{denoiser}.npy'
raiseNotFlatFields = False
denoise = getattr(skimage.restoration, f'denoise_{denoiser}')
mean = None
numberOfImagesInMean = 0
imagesFileNames = os.listdir(imagesFolderPath + '/png')
imagesFileNames = os.listdir(imagesFolderPath + ('/png' if raiseNotFlatFields else ''))
requiresRaiseFiltering = True
if requiresRaiseFiltering:
if raiseNotFlatFields:
files = {}
with open('RAISE_all.csv') as csvfile:
@ -32,31 +33,47 @@ if requiresRaiseFiltering:
files[file] = row
imagesFileNames = [imageFileName for imageFileName in tqdm(imagesFileNames, 'Filtering images') if files[imageFileName]['Device'] == 'Nikon D7000' and Image.open(f'{imagesFolderPath}/png/{imageFileName}').size == (4946, 3278)]
#imagesFileNames = [f'DSC0{imageIndex}.ARW' for imageIndex in range(2807, 2911)]
SKY = range(2_699, 2_807)
WALL = range(2_807, 2_912)
#imagesFileNames = [f'DSC0{imageIndex}.ARW' for imageIndex in SKY]
minColor = None
maxColor = None
def treatImage(imageFileName, computeExtremes = False):
global mean, numberOfImagesInMean, minColor, maxColor
imageFileName = imageFileName.replace('.png', '.NEF')
imageFilePath = f'{imagesFolderPath}/nef/{imageFileName}'
if raiseNotFlatFields:
imageFileName = imageFileName.replace('.png', '.NEF')
imageFilePath = f'{imagesFolderPath}/nef/{imageFileName}'
else:
imageFilePath = f'{imagesFolderPath}/{imageFileName}'
if imageFileName.endswith('.NEF') or imageFileName.endswith('.ARW'):
with rawpy.imread(imageFilePath) as raw:
colorDesc = raw.color_desc.decode('ascii')
assert colorDesc == 'RGBG'
assert np.array_equal(raw.raw_pattern, np.array([[0, 1], [3, 2]], dtype = np.uint8))
# RG
# GB
rawImageVisible = raw.raw_image_visible.copy()
greenRawImageVisible = rawImageVisible[1::2, ::2]
redRawImageVisible = rawImageVisible[::2, ::2]
greenRightRawImageVisible = rawImageVisible[::2, 1::2]
greenBottomRawImageVisible = rawImageVisible[1::2, ::2]
blueRawImageVisible = rawImageVisible[1::2, 1::2]
# Actual color to estimate the PRNU with.
colorRawImageVisible = greenBottomRawImageVisible
if computeExtremes:
greenRawImageVisibleMin = greenRawImageVisible.min()
greenRawImageVisibleMax = greenRawImageVisible.max()
if minColor is None or greenRawImageVisibleMin < minColor:
minColor = greenRawImageVisibleMin
if maxColor is None or greenRawImageVisibleMax > maxColor:
maxColor = greenRawImageVisibleMax
colorRawImageVisibleMin = colorRawImageVisible.min()
colorRawImageVisibleMax = colorRawImageVisible.max()
if minColor is None or colorRawImageVisibleMin < minColor:
minColor = colorRawImageVisibleMin
if maxColor is None or colorRawImageVisibleMax > maxColor:
maxColor = colorRawImageVisibleMax
return
imageNpArray = (greenRawImageVisible - minColor) / (maxColor - minColor)
imageNpArray = (colorRawImageVisible - minColor) / (maxColor - minColor)
# 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.
else: