This functions goal is to find a polygon which enclosures a user supplied mask. It's a kind of a complementary of Matlab poly2mask function. The difference is that all contour points are returned- without missing points for linearly related points. In order to get a 100% complementary of poly2mask all points inside straight lines should be omitted. In my case I actually need all those points, as index of ROI.
Combining mask2poly with poly2mask the user can produce a mask from a contour (line with X and Y coordinates), and vise-versa.
Thanks for the comment. Unfortunately, it seems to be precise. Too bad I did not knew about the bwboundaries function, before writing my own. bwboundaries seems to works nicely. Out of curiosity can you send me an example of an image where my function fails (I've used it extensively in object tracking without problems)?
This is a great idea for a function, but it unfortunately fails in some cases. Matlab has a more robust method built in: bwboundaries.
Thanks for that contribution. The function works fine, is minimalistic and fast! Applied with a region growing algorithm to come to a final polygon.
---------------2011-07-25----------- Ordering points according to rule of "nearest point" (accurate but slow) added.
Minor changes, according to Daniel's remarks.
An option to reorder the points so it will define a CW contour. Now you can plot the contours with line connecting the dots, without getting crazy lines all over the mask. Enable the "flagCW".
- "Inner" and "Outer" options replaced isIndex option