Given a contiguous drawing of arbitrary pixels (e.g. on an HTML5 Canvas) is there any algorithm for finding the axis-aligned bounding box that is more efficient than simply looking at every pixel and recording the min/max x/y values?
Given a contiguous drawing of arbitrary pixels (e.g. on an HTML5 Canvas) is there
Share
Just scanline from top left to right and down to get y top,and similar algorithm with different directions for the rest.
Edit by Phrogz:
Here’s a pseudo-code implementation. An included optimization ensures that each scan line does not look at pixels covered by an earlier pass:
The result (in practice) performs about the same as the brute-force algorithm for a single pixel, and significantly better as the object gets larger.
Demo: http://phrogz.net/tmp/canvas_bounding_box2.html
For fun, here’s a visual representation of how this algorithm works:
It doesn’t matter in what order you choose to do the sides, you just have to make sure that you take the previous results into account so that you are not double-scanning the corners.