A sample application and a function for solving the maximum inscribed circle problem.
Unlike my other submission "Maximum Inscribed Circle using Distance Transform" (at http://www.mathworks.com/matlabcentral/fileexchange/30805-maximum-inscribed-circle-using-distance-transform), this algorithm is subpixel accurate. It operates only on the polygon and not the image points. Therefore, if the polygon is given in sub-pixels, the result will be accurate.
I use an O(n log(n)) algorithm as follows:
- Construct the Voronoi Diagram of the polygon.
- For Voronoi nodes which are inside the polygon:
- Find the node with the maximum distance to edges in P. This node is the centre of the maximum inscribed circle.
For more details on the problem itself please checkout my previous submission as mentioned above.
To speed things up, replace "inpolygon" function by Bruno Lunog's faster implementation "2D polygon interior detection" :
Copyright (c) 2011, Tolga Birdal <http://www.tbirdal.me>
Hello, thanks for the code
It worked well with an image I'm working .
But when I use other Image it's giving me an error.
Error using delaunay
At least three input points must be provided to define a triangular mesh.
Error in voronoi (line 84)
tri = delaunay(x,y);
Error in max_circle>find_inner_circle (line 55)
Error in max_circle (line 42)
What do I do?
This work very well for many shapes. But for a simple triangle or square it finds circles that are not entirely inside the shape