histogram = (image, x = 0, y = 0, w = image.width, h = image.height) => {
if (x < 1) x *= image.width;
if (x < 0) x += image.width;
if (y < 1) y *= image.height;
if (y < 0) y += image.height;
if (w <= 1) w *= image.width;
if (h <= 1) h *= image.height;
const canvas = DOM.canvas(image.width, image.height);
const ctx = canvas.getContext("2d");
ctx.drawImage(image, 0, 0);
const { data } = ctx.getImageData(x, y, w, h);
const histograms = Array.from({ length: 3 }, () => new Array(256).fill(0));
for (let i = 0; i < data.length; i += 4)
for (const c of [0, 1, 2]) histograms[c][data[i + c]]++;
return histograms;
}