Finish Matplotlib figure showing PRNU estimation by averaging

This commit is contained in:
Benjamin Loison 2024-03-25 20:45:51 +01:00
parent 2baf9c3000
commit 03f52a5bd1
Signed by: Benjamin_Loison
SSH Key Fingerprint: SHA256:BtnEgYTlHdOg1u+RmYcDE0mnfz1rhv5dSbQ2gyxW8B8

View File

@ -14,7 +14,7 @@ from tqdm import tqdm
IMAGE_SIZE = 64
NUMBER_OF_PHONES = 1#0
NUMBER_OF_IMAGES_PER_PHONE = 100
NUMBER_OF_IMAGES_PER_PHONE = 10_000
# Compared to images being 1.
PRNU_FACTOR = 0.1
@ -43,26 +43,38 @@ def showImageWithMatplotlib(npArray):
plt.imshow(npArray)
plt.show()
fig, axs = plt.subplots(1, 4)
NUMBER_OF_ROWS = 5
NUMBER_OF_COLUMNS = 3
fig, axes = plt.subplots(NUMBER_OF_ROWS, NUMBER_OF_COLUMNS)
fig.suptitle('Single PRNU estimation with images being Gaussian noise')
prnusPil = [toPilImage(prnu) for prnu in prnus]
#showImageWithMatplotlib(prnus[0])
axs[0].set_title('Actual PRNU')
axs[0].imshow(prnus[0])
MAIN_AXIS_ROW_INDEX = 1
mainAxis = axes[MAIN_AXIS_ROW_INDEX]
mainAxis[0].set_title('Actual PRNU')
mainAxis[0].imshow(prnus[0])
axs[1].set_title('Image without PRNU')
axs[1].imshow(imagesWithPrnu[0][0])
mainAxis[1].set_title('Image without PRNU')
mainAxis[1].imshow(imagesWithPrnu[0][0])
'''
imagesWithPrnuPil = [[toPilImage(imageWithPrnu) for imageWithPrnu in imagesWithPrnu[phoneIndex]] for phoneIndex in range(NUMBER_OF_PHONES)]
#showImageWithMatplotlib(imagesWithPrnu[0][0])
axs[2].set_title(f'First image with PRNU\nRMS with image without PRNU: {round(rmsDiffNumpy(imagesWithPrnu[0][0], imagesWithoutPrnu[0][0]), 4)}')
axs[2].imshow(imagesWithPrnu[0][0])
mainAxis[2].set_title(f'First image with PRNU\nRMS with image without PRNU: {round(rmsDiffNumpy(imagesWithPrnu[0][0], imagesWithoutPrnu[0][0]), 4)}')
mainAxis[2].imshow(imagesWithPrnu[0][0])
'''
imagesWithPrnuPil0Mean = np.array(imagesWithPrnuPil[0]).mean(axis = 0)
#showImageWithMatplotlib(imagesWithPrnuPil0Mean)
axs[3].set_title(f'Mean of images with PRNU\ni.e. estimated PRNU\nRMS with actual PRNU: {round(rmsDiffNumpy(imagesWithPrnuPil0Mean, prnus[0]), 4)}')
axs[3].imshow(imagesWithPrnuPil0Mean)
assert NUMBER_OF_IMAGES_PER_PHONE >= 10 ** (NUMBER_OF_ROWS - 1), 'Try to use more images than generated!'
for rowIndex, numberOfImages in enumerate([10 ** power for power in range(NUMBER_OF_ROWS)]):
imagesWithPrnuPil0Mean = np.array(imagesWithPrnu[0][:numberOfImages]).mean(axis = 0)
title = (f'Mean of first $N$ images with PRNU\ni.e. estimated PRNU\nRMS with actual PRNU\n\n' if rowIndex == 0 else '') + f'$N$ = {numberOfImages:,}, $RMS$ = {round(rmsDiffNumpy(imagesWithPrnuPil0Mean, prnus[0]), 4)}'
axes[rowIndex][2].set_title(title)
axes[rowIndex][2].imshow(imagesWithPrnuPil0Mean)
for columnIndex in range(NUMBER_OF_COLUMNS):
for axisIndex in range(NUMBER_OF_ROWS):
if axisIndex != MAIN_AXIS_ROW_INDEX:
axes[axisIndex][columnIndex].axis('off')
plt.tight_layout()
plt.show()