Структура из движения: ошибка вычисления матрицы вращения и перевода из основной матрицы

Я пытаюсь смоделировать структуру от движения.

  1. рассмотрим случай, когда движение в направлении х. Я создал точки соответствия, как показано ниже, где есть движение на 50 пикселей только в направлении х.

Предыдущая координата изображения

 [0] {x=50.000 y=50.00 }   [1] {x=100.00 y=50.00 }
 [2] {x=150.00 y=50.00 }   [3] {x=200.00 y=50.00 }  
 [4] {x=250.00 y=50.00 }   [5] {x=300.00 y=50.00 }  
 [6] {x=50.000 y=100.0 }   [7] {x=100.00 y=100.0 }  
 [8] {x=150.00 y=100.0 }   [9] {x=200.00 y=100.0 }  
[10] {x=250.00 y=100.0 }  [11] {x=300.00 y=100.0 }  
[12] {x=50.000 y=150.0 }  [13] {x=100.00 y=150.0 }  
[14] {x=150.00 y=150.0 }  [15] {x=200.00 y=150.0 }  

Текущая координата изображения [0] {x = 100.0 y = 50.0} [1] {x = 150.0 y = 50.0}
[2] {x = 200,0 y = 50,0 } [3] {x=250,0 y = 50,0 } [4] {x=300,0 y = 50,0 } [5] {x=350,0 y = 50,0 } [6] {x=100,0 у =100. } [7] {x=150,0 y=100. } [8] {x=200,0 y=100. } [9] {x=250,0 y=100. } [10] {x=300,0 y=100. } [11] {x=350,0 y = 100. }
[12] {х = 100,0, у =150. } [13] {x=150,0 y=150. } [14] {x=200,0 y=150. } [15] {x=250,0 y = 150. }

Внутренняя матрица 6.2821272+002 0. 3.474665e+002 0. 6.2886809e+002 2.4486120e+002 0. 0. 1. с известной внутренней матрицей я вычислил фундаментальную матрицу, используя функцию opencv (cvFindFundamentalMatrix)

int fm_count = cvFindFundamentalMat( pMatPtsImgPrev, pMatPtsImgCurr, 
        pFundMat,CV_FM_RANSAC ,0.2,0.99, status);

средняя ошибка pixex очень близка к нулю.

затем найдите необходимую матрицу, используя приведенную ниже формулу

E = CameraMatrix^T * F * CameraMatrix.

Основная матрица со смещением X -6.227048e-030, 1.8018814e-014, 4.30140591e-015 3.1235024e-014, 2.7432764e-015, 7.02982759 9.885755751e-015, -7.0298275, 3.10862446e-015

Затем разложите матрицу вращения и перемещения, как указано в приведенной ниже ссылке, используя SVD - SVD decomp = SVD(E);

Извлечь перевод и вращение из фундаментальной матрицы

при разложении углы поворота Rx = 0 град, Ry = 0 град и Rz =0 град.

Это, кажется, хорошо, поскольку вращение или 0 или 180 градусов.

Когда координата изменяется с переводом в направлении y только как координаты, приведенные ниже

Предыдущая координата

 [0] {x=50.00 y=50.00 }  [1] {x=100.0 y=50.00 }
 [2] {x=150.0 y=50.00 }   [3] {x=200.0 y=50.00 }
 [4] {x=250.0 y=50.00 }  [5] {x=300.0 y=50.00 }
 [6] {x=50.00 y=100.0 }  [7] {x=100.0 y=100.0 }
 [8] {x=150.0 y=100.0 }  [9] {x=200.0 y=100.0 }   
[10] {x=250.0 y=100.0 } [11] {x=300.0 y=100.0 }
[12] {x=50.00 y=150.0 } [13] {x=100.0 y=150.0 }
[14] {x=150.0 y=150.0 } [15] {x=200.0 y=150.0 }

Текущая координата

 [0] {x=50.00 y=100.0 }  [1] {x=100.0 y=100.0 }
 [2] {x=150.0 y=100.0 }  [3] {x=200.0 y=100.0 }
 [4] {x=250.0 y=100.0 }  [5] {x=300.0 y=100.0 }
 [6] {x=50.00 y=150.0 }  [7] {x=100.0 y=150.0 }
 [8] {x=150.0 y=150.0 }  [9] {x=200.0 y=150.0 }
[10] {x=250.0 y=150.0 } [11] {x=300.0 y=150.0 }
[12] {x=50.00 y=200.0 } [13] {x=100.0 y=200.0 }
[14] {x=150.0 y=200.0 } [15] {x=200.0 y=200.0 } 

та же самая процедура и та же самая внутренняя матрица используются, чтобы построить фундаментальную матрицу и существенную матрицу.

Основная матрица со смещением Y -2,791314e-030, 2,5449611e-015, 5,095796479e-016
4.3544169e-015, -0.039722588, 0.99921074] 1.78226326e-015, -0.999210746, -0.03972258

но вращение разлагается Rx = -2,27653561 градусов Ry = 180, а Rz =0

Чего я не понимаю, так это того, почему Rx имеет какую-то ценность, так как перевод идет в направлении X и Y, и я считаю, что повороты должны быть либо 0, либо 180 градусов.

Кинди, дай мне подсказку, чтобы в моем коде возникли проблемы.

0 ответов

Другие вопросы по тегам