user3696412
user3696412

Reputation: 1419

Python get transformation matrix from two sets of points

I have to images, one simulation, one real data, with bright spots.

Simulation: Simulation

Reality: reality

I can detect the spots just fine and get the coordinates. Now I need to compute transformation matrix (scale, rotation, translation, maybe shear) between the two coordinate systems. If needed, I can pick some (5-10) corresponding points by hand to give to the algorithm

I tried a lot of approaches already, including: 2 implementations of ICP: https://engineering.purdue.edu/kak/distICP/ICP-2.0.html#ICP

https://github.com/KojiKobayashi/iterative_closest_point_2d

Implementing affine transformations: https://math.stackexchange.com/questions/222113/given-3-points-of-a-rigid-body-in-space-how-do-i-find-the-corresponding-orienta/222170#222170

Implementations of affine transformations: Determining a homogeneous affine transformation matrix from six points in 3D using Python

how to perform coordinates affine transformation using python? part 2

Most of them simply fail somehow like this: enter image description here The red points are the spots from the simulation transformed into the reality - coordinate system.

The best approach so far is this one how to perform coordinates affine transformation using python? part 2 yielding this: enter image description here

As you see, the scaling and translating mostly works, but the image still needs to be rotated / mirrored.

Any ideas on how to get a working algorithm? If neccessary, I can provide my current non-working implementations, but they are basically as linked.

Upvotes: 3

Views: 8162

Answers (1)

user3696412
user3696412

Reputation: 1419

I found the error.

I used plt.imshow to display both the simulated and real image and from there, pick the reference points from which to calculate the transformation.

Turns out, due to the usual array-to-image-index-flipping-voodoo (or a bad missunderstanding of the transformation on my side), I need to switch the x and y indices of the reference points from the simulated image.

With this, everything works fine using this how to perform coordinates affine transformation using python? part 2

Upvotes: 2

Related Questions