function box_count(canvas) {
let ctx = canvas.getContext("2d");
let im_data = ctx.getImageData(0, 0, canvas.width, canvas.height);
let cnts = [];
for (let s = 1; s <= d3.min([canvas.width, canvas.height]); s = 2 * s) {
let boxes = [];
let cnt = 0;
for (let i = 0; s * (i + 1) <= canvas.height; i++) {
for (let j = 0; s * (j + 1) <= canvas.width; j++) {
if (check_box(i, j, s)) {
cnt = cnt + 1;
boxes.push([i, j]);
}
}
}
cnts.push({ s: s, cnt: cnt, boxes: boxes });
}
function check_box(i, j, s) {
for (let i0 = i * s; i0 < (i + 1) * s; i0++) {
for (let j0 = j * s; j0 < (j + 1) * s; j0++) {
let ij0 = 4 * (j0 + i0 * canvas.width);
if (
im_data.data[ij0] == 0 &&
im_data.data[ij0 + 1] == 0 &&
im_data.data[ij0 + 2] == 0 &&
im_data.data[ij0 + 3] == 255
) {
return true;
}
}
}
return false;
}
return cnts;
}