I have some images that I’d like to draw a polyon around the outer edges. The images themselves are on transparent backgrounds and I’ve created an array of the pixels in the images which contain a point and are not transparent (or white).
Now, my question is: how do I draw an accurate polygon around the outer edge points? I’ve used a Graham Scan algorithm that I read about to create a convex hull around the edges but this doesn’t seem to work for objects with concavities. For example:
http://i48.tinypic.com/4s0lna.png
The image on the left gets filled in using this method with the one on the right. As you can see, it’s ‘filling in’ a little too much.
I assume there must be some other algorithm or approach that can be used to solve this, but I’m not sure of where to look or what it might be called. Could anyone point me in the right direction? I’m using C#/.net and hopefully there might be something that already exists which could work along these lines.
I think the 2D “Alpha shapes” algorithm would the right choice for you.
http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Alpha_shapes_2/Chapter_main.html
Alpha shapes can be considered as a generalization for the “convex Hull” algorithm that allows for generation of more general shapes.
By using alpha shapes you will be having control over the level of details to be captured by the resultant shape by changing the alpha parameter value.
You can try the java applet here : http://cgm.cs.mcgill.ca/~godfried/teaching/projects97/belair/alpha.html
to have better understanding about does this algorithm do.