30 lines
1.0 KiB
JavaScript
30 lines
1.0 KiB
JavaScript
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));
|