Единицы реального мира, похоже, масштабируются в OpenCV

#android #c #opencv #camera #camera-calibration

#Android #c #opencv #камера #калибровка камеры

Вопрос:

Я пытаюсь настроить стереоректификацию. Я использую только одну камеру, которая вращается небольшими шагами вокруг объекта. Но я в замешательстве. Объект, который я пытаюсь привязать, имеет размеры около 3-4 см. Радиус поворотов составляет около 6 см. Но когда я исправляю, я получаю конечные значения xyz-матрицы, каждое из которых имеет длину от камеры около 300-2000 единиц. Почему? Как получить положение / поворот второй камеры (второе положение камеры) в первом опорном кадре?

 org.opencv.calib3d.Calib3d.stereoRectify(mCameraMatrix, mDistortionCoefficients, 
mCameraMatrix, mDistortionCoefficients, dispFloat.size(), R, T, R1, R2, P1, P2, Q);
org.opencv.calib3d.Calib3d.reprojectImageTo3D(dispFloat,xyz,Q);
  

Значения матриц (псевдокод):

 Input:
mCameraMatrix:
|1076.080810546875f,0.0f,639.5f|
        |0.0f,1076.080810546875f, 359.5f|
        |0.0f,0.0f,1.0f,|
mDistortionCoefficients:
| 0.11665083467960358f,-0.15972141921520233f,0.0f,0.0f,-0.29710251092910767f|

R:
|[0.965926,0,0.258819]|
|[0,1,0]|
|[-0.258819,0,0.965926]|

 T:
|[1.55291,0,0.204445]|

output:
R1:
|0.9965080795455151,        -0.0733390286815368,        0.039912833431844846|
|0.08349638947769386,       0.8751762387100398,     -0.47654475565421633|
|1.8566063818213976E-5,     0.4782132767598534,     0.8782437370035183|
R2:
| 1.0,      0,      0|
|0,     0.8784559480840216,     0.4778233431675381|
|0,     -0.47782334316753805,       0.8784559480840215|
P1:
|538.0404052734375,     0.0,        756.766210841568,       0.0|
|0.0,       538.0404052734375,      428.56917572021484,     0.0|
|0.0,       0.0,        1.0,        0.0|
P2:
|538.0404052734375,     0.0,        756.766210841568,       |-281.3598668991448
|0.0,       538.0404052734375,      428.56917572021484,     0.0|
|0.0,       0.0,        1.0,        0.0|
Q:
|1.0,       0.0,        0.0,        -756.766210841568|
| 0.0,      1.0,        0.0,        -428.56917572021484|
|0.0,       0.0,        0.0,        538.0404052734375|
|0.0,       0.0,        1.9122855409449757,     -0.0|
  

Как я понял, значения, столь огромные из-за mCameraMatrix [0] [0] и mCameraMatrix [1] [1], имеют значения около ~ 1000. Как пересчитать до реального размера? Как получить вторую позицию камеры в системе отсчета первой позиции?

Комментарии:

1. как вы вычислили матрицу камеры? автоматические методы afaik имеют некоторую двусмысленность в отношении масштаба.

2. Я использую пример проекта OpenCV и это изображение: github.com/Itseez/opencv/blob/2.4/doc/acircles_pattern.png

3. @Micka Я использую непосредственно этот проект: github.com/Itseez/opencv/tree/master/samples/android /…