54 lines
2.3 KiB
Python
54 lines
2.3 KiB
Python
import struct, sys
|
|
|
|
# compare demo3 live capture vs official capture on the same static scene
|
|
b = open(r"C:\Project\MAG160C\build-artifacts\demo3_frame_capture.bin", "rb").read()
|
|
off = 0
|
|
live = struct.unpack_from("<19200H", b, off); off += 38400
|
|
ref = struct.unpack_from("<19200H", b, off); off += 38400
|
|
nuc = struct.unpack_from("<19200H", b, off); off += 38400
|
|
gray = b[off:off+19200]; off += 19200
|
|
lut = b[off:off+1024]; off += 1024
|
|
meta = struct.unpack_from("<8i", b, off)
|
|
print("demo3: win=[%d,%d] stats=(%d..%d m%d s%d) shutter=%d sel=%d" % meta)
|
|
print("demo3: live_mean=%.0f ref_mean=%.0f nuc_mean=%.0f" % (sum(live)/19200, sum(ref)/19200, sum(nuc)/19200))
|
|
|
|
d = r"C:\Project\MAG160C\analysis\pairs_final_20260813"
|
|
def load(path, fmt, n):
|
|
b = open(path, "rb").read()
|
|
return struct.unpack_from("<%d%s" % (n, fmt), b, 0)
|
|
|
|
win = open(d + r"\pair_000.win", "rb").read()
|
|
hi, lo, fmax, fmin, mean, std, axmax, axmin = struct.unpack_from("<8I", win, 0)
|
|
gray_o = load(d + r"\pair_000.gray", "B", 320*240)
|
|
raw_o = load(d + r"\pair_000.raw", "H", 19200)
|
|
lut_o = open(d + r"\pair_000.lut", "rb").read()
|
|
print("official: win=[%d,%d] stats=(%d..%d m%d s%d)" % (lo, hi, fmin, fmax, mean, std))
|
|
print("official: raw_mean=%.0f" % (sum(raw_o)/19200))
|
|
|
|
# gray comparison: demo3 gray160 vs official gray320 downsampled (2x parity)
|
|
g_o160 = [gray_o[y*320 + x] for y in range(0, 240, 2) for x in range(0, 320, 2)]
|
|
import collections
|
|
hd = collections.Counter(gray)
|
|
ho = collections.Counter(g_o160)
|
|
# histogram correlation
|
|
allk = set(hd) | set(ho)
|
|
n = sum(hd.values())
|
|
# compare histograms as distributions
|
|
import math
|
|
def corr(a, b):
|
|
ka = set(a); kb = set(b)
|
|
ks = ka | kb
|
|
ma = sum(a[k] for k in ks)/n
|
|
mb = sum(b[k] for k in ks)/n
|
|
num = sum((a.get(k,0)-ma)*(b.get(k,0)-mb) for k in ks)
|
|
da = math.sqrt(sum((a.get(k,0)-ma)**2 for k in ks))
|
|
db = math.sqrt(sum((b.get(k,0)-mb)**2 for k in ks))
|
|
return num/(da*db) if da and db else 0
|
|
print("gray histogram correlation: %.4f" % corr(hd, ho))
|
|
print("demo3 gray range: %d..%d, official: %d..%d" % (min(gray), max(gray), min(g_o160), max(g_o160)))
|
|
# LUT comparison
|
|
dl = sum(1 for i in range(1024) if lut[i] != lut_o[i])
|
|
print("demo3 lut vs official lut diff: %d/1024" % dl)
|
|
print("demo3 lut[0:8]:", list(lut[:8]), " official:", list(lut_o[:8]))
|
|
print("demo3 lut[1000:]:", list(lut[1000:]), " official:", list(lut_o[1000:]))
|