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