Files
Robust_image_source_identif…/datasets/raise/find_consecutive_most_similar_images.py

48 lines
1.9 KiB
Python
Executable File

#!/usr/bin/python3
import os
from utils import getColorChannel, Color, mergeSingleColorChannelImagesAccordingToBayerFilter, isARawImage
from tqdm import tqdm
import numpy as np
folder = 'flat-field/NEF'
# Section I. of *Determining Image Origin and Integrity Using Sensor Noise*.
def dotProduct(X, Y):
return np.multiply(X, Y).sum()
# Section I. of *Determining Image Origin and Integrity Using Sensor Noise*.
def corr(X, Y):
XMinusItsMean = X - X.mean()
YMinusItsMean = Y - Y.mean()
return dotProduct(XMinusItsMean, YMinusItsMean) / (np.linalg.norm(XMinusItsMean) * np.linalg.norm(YMinusItsMean))
def crop(image, yRange, xRange):
interestingPosition = np.array(image.shape) // 2
return image[interestingPosition[0] - yRange: interestingPosition[0] + yRange, interestingPosition[1] - xRange: interestingPosition[1] + xRange]
lastMergedSingleColorChannelImage = None
lastCorrelation = None
# Supports both highest and lowest.
extremeCorrelation = None
extremeCorrelationFile = None
files = [file for file in sorted(os.listdir(folder)) if isARawImage(file)]
for file in tqdm(files, 'File'):
colorChannels = {}
for color in Color:
colorChannel = getColorChannel(f'{folder}/{file}', color)
colorChannel = crop(colorChannel, 200, 200)
colorChannels[color] = colorChannel
mergedSingleColorChannelImage = mergeSingleColorChannelImagesAccordingToBayerFilter(colorChannels)
if lastMergedSingleColorChannelImage is not None:
correlation = corr(mergedSingleColorChannelImage, lastMergedSingleColorChannelImage)
if extremeCorrelation is None or correlation < extremeCorrelation:
extremeCorrelation = correlation
extremeCorrelationFile = file
lastMergedSingleColorChannelImage = mergedSingleColorChannelImage
print(f'{extremeCorrelationFile} (and previous file) have the lowest correlation with a correlation of {extremeCorrelation}')