Problem:
Given: n points that are strongly correlated to a 3d k-sided non-convex polygon, where n >> k
Find: the best fit concave-hull that matches the original geometry of the points
Attempted solutions:
Warning: pseudocode
segments = []
for each point in image:
    #segment points into planes via comparing approximate normals
    #actual implementation is more complicated
    findSegment(image,point)
for each segment in image:
    #transform coordinate system to be a 
    #2D-plane perpendicular to the normal of segment
    transform(segment, segment.normal)
    edges = findEdges(segment)
    polygonHull = reconstructPolygon(edges)
    #transform back to original coordinate system
    transform(segment, segment.normal)
Example:
 ___
|   |               |
|    \__    ==>     |   ___
|       |           |__/  /_____
|_______|          /  /   \_
                  /  /_____/
                 /
Input would be simply a high density point cloud that is approximately uniformly distributed random points within the polygon plane, with a bit of noise.
Output would be the vertices of the polygon in 3d points.
My question is, is there a better way to approach this problem? The problem with the above solution is that the points can be noisy. Also, rasterization of the points into 2d and then preforming a edge find is pretty costly.
Any pointers would be great. Thanks in advance