/// The signature of one circular neighbourhood: where it is, how the combined colour
/// centre of mass is oriented, and the quantized 6-D key the matcher searches on.
///
/// One of these exists per *pixel* of each working image, and both images' grids are
/// live at once, so its size is a hard constraint rather than a detail: at a working
/// width of 1600 the two grids hold about 2.9 million descriptors. The struct used to
/// carry the intermediate values `finish_descriptor` computes on the way to the key —
/// the per-channel sums, radii and unquantized aligned coordinates — at 96 bytes, or
/// ~276 MB for the pair. Nothing outside `circular_feature_grid` ever read them, and
/// keeping only what the matcher uses brings that to 20 bytes and ~58 MB, which is the
/// difference between fitting and not fitting in a wasm32 heap.