File size: 2,061 Bytes
021d920
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
"""R-grid: trainless learnability ratio over size x contrast, both bgs.
Same R as compute_R.py (pooled object-toggle signal / temporal+spatial clutter),
just vectorized over a grid and dumped to JSON. Purpose: test whether R measured
AT THE TARGET CONTRAST already flags double-deficit (small AND low-contrast)
cells that compiler v1's single-axis router mis-handled.
"""
import json, numpy as np, cv2, sys
B = np.load("simreal/frames64.npy").astype(np.float32) / 255.0
rng = np.random.default_rng(0)
def pool(img): return cv2.resize(img, (8, 8), interpolation=cv2.INTER_AREA).ravel()
def draw(img, pos, c, size, ct):
    img = img.copy(); x, y = pos
    img[y:y+size, x:x+size] = c*ct + img[y:y+size, x:x+size].mean(axis=(0, 1))*(1-ct)
    return img
def R(mode, size, ct, n=80):
    sig, den = [], []
    for _ in range(n):
        if mode == "static": frames = [B[rng.integers(len(B))]]*9
        else: frames = [B[rng.integers(len(B))] for _ in range(9)]
        pos = (int(rng.integers(2, 60-size)), int(rng.integers(2, 60-size)))
        c = rng.uniform(0.15, 0.95, 3).astype(np.float32)
        sig.append(np.sum((pool(draw(frames[0], pos, c, size, ct))
                           - pool(draw(frames[0], pos, 1-c, size, ct)))**2)/4)
        P = np.array([pool(f) for f in frames])
        probes = [pool(np.roll(np.roll(frames[0], int(rng.integers(64)), 0),
                               int(rng.integers(64)), 1)) for _ in range(6)]
        den.append(P.var(axis=0).sum() + np.array(probes).var(axis=0).sum())
    return float(np.mean(sig)/(np.mean(den)+1e-9))
SIZES = [5, 6, 8, 10, 12, 14, 16]
CTS = [1.0, 0.4]
TH = 0.02
grid = {}
for mode in ["static", "moving"]:
    for ct in CTS:
        for s in SIZES:
            r = R(mode, s, ct)
            grid[f"{mode}_o{s}_ct{ct:g}"] = round(r, 4)
            flag = "DIRECT" if r >= TH else "floor"
            print(f"{mode:6s} {s:2d}px ct{ct:<3g}  R={r:.4f}  {flag}", flush=True)
json.dump(grid, open("results_compiler_v2/R_grid.json", "w"), indent=2)
print("\nwrote results_compiler_v2/R_grid.json")