Let's suppose I have two identical data sets from the surface of a sphere, e.g. like in the image below, where one of them is rotated by arbitrary Euler angles. I want to find out the Euler angles by which the data were rotated with respect to each other.
- What is the best (most efficient) way to do that?
- Does it make sense to use pattern matching algorithms like this one?
- Can this task be done without projecting the sphere surface onto a 2D plane? Such projections unavoidably introduce heavy distortions.
BTW, I'm not asking for code or a working solution. I'm more interested in the general ideas or possible toolboxes to use.
The easiest way to do this is to extract features from one sphere, as x1, x2, ..., xN and from the other as y1, y2, ..., yN and to estimate the rotation matrix using the Procrustes trick by concatenating these 3D direction vectors into the A and B matrices.
In fact, I believe this is possible with as few as two feature points, (so in the example above, use the two local maxima denoted in red). If the first solution gives an orthogonal matrix with negative determinant, try switching the labels on the pair so that this scheme returns a proper rotation matrix.
From the rotation matrix, it's straightforward to extract the Euler angles (but consider using the Rodrigues parameterization).
Alternatively, go down the rabbit hole on spherical harmonics and convolution.