Skeletonization of a polygon with a dense distribution of vertices.

   [V, ADJ] = polygonSkeleton(POLY)
   POLY is given as a N-by-2 array of polygon vertex coordinates. The
   result is given a Nv-by-2 array of skeleton vertex coordinates, and an
   adjacency list, as a NV-by-1 cell array. Each cell contains indices of
   vertices adjacent to the vertex indexed by the cell.

   [V, ADJ, RAD] = polygonSkeleton(POLY)
   Also returns the radius of each vertex, corresponding to the distance
   between the vertex and the closest point of the original contour
   polygon.

   SKEL = polygonSkeleton(POLY)
   Concatenates the results in a struct SKEL with following fields:
   * vertices  the Nv-by-2 array of skeleton vertex coordinates
   * adjList   the adjacency list of each vertex, as a Nv-by-1 cell array.
   * radius    the Nv-by-1 array of radius for each vertex

   Example
     % start from a binary shape
     img = imread('circles.png');
     img = imFillHoles(img);
     figure; imshow(img); hold on;
     % compute a smooth contour
     cntList = imContours(img);
     cnts = smoothPolygon(cntList{1}, 5);
     drawPolygon(cnts, 'g');
     % compute skeleton
     [vertices, adjList] = polygonSkeleton(poly);
     % convert adjacency list to an edge array
     edges = adjacencyListToEdges(adjList);
     % draw the skeleton graph
     drawGraphEdges(vertices, edges);

   See also
     graphs, adjacencyListToEdges

Package: matgeom