I am trying to automatically detect the rotation axis in 3d pointcloud.
In other words, if I took a small 3d pointcloud, selected one rotation axis and made several copies of points with different rotation angles, then I get a larger pointcloud.
Input to my algorithm is a larger pointcloud, and the desired result is the only axis of symmetry. And in the end, I'm going to calculate the correspondence between the points, which are rotations of each other.
The size of the larger pointcloud is about 100 thousand points, and the number of rotational copies created is unknown.
The rotation angles in my case have constant deltas, but do not necessarily cover 360 degrees. For example, I may have 0, 20, 40, 60. Or I may have 0, 90, 180, 270. But I will not have 0, 13, 78, 212 (or, if so, I do not care for him detection).
This seems like a computer vision problem, but it's hard for me to figure out how to accurately find the axis. The entrance will usually be very clean, close to the accuracy of the float.
I don't have the original smaller pointcloud that was rotated / copied to make a larger pointcloud. I know that the data is synthetic with very little noise (usually this is the output of another program).
We cannot easily calculate the possible number of points in a smaller cloud, because, rightly, the points along the axis are not duplicated, unfortunately. If we knew which points were along the axis, then we could find possible factors, but then we would already solve the problem.
-
Thank you all for your suggestions. It looks like my last algorithm will try to find clicks of matching points using the k-nn metric. Each click will give an axis. Then I can use RANSAC to match the axis with the results of all clicks.