const data = new Uint8ClampedArray(4 * 4); data[0]=139; data[1]=90; data[2]=43; data[3]=255; data[4]=34; data[5]=139; data[6]=34; data[7]=255; data[8]=34; data[9]=139; data[10]=34; data[11]=255; data[12]=34; data[13]=139; data[14]=34; data[15]=255; const SHEET_GREEN = { r: 0, g: 255, b: 0 }; function greenDistance(r, g, b) { const dr = r - SHEET_GREEN.r; const dg = g - SHEET_GREEN.g; const db = b - SHEET_GREEN.b; return Math.sqrt(dr * dr + dg * dg + db * db); } function greenThreshold(s) { return 150 - s; } function blackCutoff(s) { return 40 + (s / 100) * 100; } const BLACK_SAT_CAP = 120; const sensitivity = 50; const n = data.length / 4; const mask = new Uint8Array(n); for (let i = 0; i < n; i++) { const j = i * 4; const r = data[j], g = data[j + 1], b = data[j + 2]; const d = greenDistance(r, g, b); const t = greenThreshold(sensitivity); mask[i] = d > t ? 1 : 0; console.log(`px ${i}: r=${r} g=${g} b=${b} dist=${d.toFixed(1)} thresh=${t} kept=${mask[i]}`); } console.log('mask:', Array.from(mask));