from pathlib import Path
from PIL import Image, ImageChops
import argparse, json
import numpy as np

p = argparse.ArgumentParser()
p.add_argument('--before', type=Path, required=True)
p.add_argument('--after', type=Path, required=True)
p.add_argument('--output', type=Path, required=True)
a = p.parse_args()
a.output.mkdir(exist_ok=True)
before = Image.open(a.before).convert('RGB')
after = Image.open(a.after).convert('RGB')
assert before.size == after.size
d = np.abs(np.asarray(before, dtype=np.int16) - np.asarray(after, dtype=np.int16)).astype(np.uint8)
mx = d.max(axis=2)
d0 = a.output / 'R2-picker-Composer-2.5-diff0-x16.png'
dt = a.output / 'R2-picker-Composer-2.5-diffT12.png'
Image.fromarray(np.minimum(d.astype(np.uint16) * 16, 255).astype(np.uint8)).save(d0)
t = np.zeros_like(d)
t[mx > 12] = [255, 60, 170]
Image.fromarray(t).save(dt)
row = dict(label='R2-picker-Composer-2.5', before=str(a.before), after=str(a.after), diff0=str(d0), diffT=str(dt), pixelsDifferent=int((mx > 0).sum()), maxDelta=int(mx.max()), pixelsAbove12=int((mx > 12).sum()), bbox=ImageChops.difference(before, after).getbbox(), imageSize=before.size)
(a.output / 'diff-metrics.json').write_text(json.dumps(row, indent=2) + '\n')
print(json.dumps(row, indent=2))
