Estimating T and R from the core matrix

I created a simple test application to evaluate translation (T) and rotation (R) from the main matrix.

  • Create 50 random Points .
  • Compute the projection pointSet1 .
  • Transform Points through the matrix (R | T).
  • Calculate the new pointSet2 projection.
  • Then we calculate the fundamental matrix F.
  • Extract the essential matrix, for example, E = K2^TF K1 ( K1, K2 are the internal matrixes of the camera).
  • Use SVD to get UDV^T

And calculate restoredR1 = UWV^T , restoredR2 = UW^T And look that one of them is equal to the initial R.

But when I compute the translation vector, restoredT = UZU^T , I get a normalized T.

restoredT*max(Tx, Ty, Tz) = T

How to restore the correct translation vector?

+6
opencv computer-vision linear-algebra
source share
1 answer

I understand! At this point, I do not need an estimate of the real length. When I get the first image, I have to install the metric conversion (scale factor) or evaluate it from calibration from a known object. After I get the second frame, I calculate the normalized T and using the known 3d coordinates from the first frame to solve the equation (sx2, sy2, 1) = K (R | lambdaT) (X, Y, Z); and find lambda - than lambdaT will be the correct metric translation ...

I check this, and it's true / So ... maybe someone knows a simpler solution?

+1
source share

All Articles