Калибровка камеры OpenCV и результаты перевода SolvePNP - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь изначально откалибровать датчик с помощью шахматной доски. Я делаю около 50 пробежек, и после калибровки камеры я использую решающий процесс для обучения системе координат, и так как я использую четко определенную шахматную доску, чтобы фактически узнать координаты реального мира.

В качестве входных данных для SolvePnP я использую все значения углов с соответствующими им расстояниями реального мира.

Моя самая большая проблема в том, что матрица перевода, которую я вычисляю из SolvePvP, немного странная. Насколько я понимаю, матрица перевода - это фактическое смещение между камерой и системой координат, которое я определяю как верхнюю часть шахматной доски. Но я получаю совершенно случайные значения, так как Tz дает мне значение около 6000, хотя расстояние между камерой и шахматной доской составляет около 1600 мм, и я все равно даже не использую значения глубины в качестве параметров для метода solvePnP.

Есть какие-нибудь данные о том, что может быть выключено?

Пример кода:

50 x DrawChessboardCorners
Corner result: {X = 1170.45984 Y = 793.002}
               {X = 1127.80371 Y = 792.54425}

3d Points:     {X = 175 Y = 70, Z = 0}
               {X = 140 Y = 70, Z = 0}

всего 18 (6x3) результатов за цикл, всего 50 прогонов.

После этого я калибрую камеру:

CalibrateCamera(_objectsList, _pointsList,
                new Size(_sensorWrapper.Width, _sensorWrapper.Height),
                cameraMatrix, distCoeffs,
                CalibType.Default,
                new MCvTermCriteria(30, 0.1), out _, out _);

Впоследствии, используя cameraMatrix и distCoeffs, я использую SolverPnP, используя верхний левый, верхний правый, нижний левый нижний правый углы с их координатами реального мира.

Результаты, полученные при калибровке:

    {
  "CameraMatrix": [
    [
      5969.947,
      0.0,
      959.687256
    ],
    [
      0.0,
      6809.737,
      540.3694
    ],
    [
      0.0,
      0.0,
      1.0
    ]
  ],
  "DistortionCoefficientsMatrix": [
    [
      0.141516522,
      285.377747,
      0.008248664,
      0.0280253552,
      1.5376302
    ]
  ],
  "RotationMatrix": [
    [
      0.9992069,
      -0.0270648878,
      0.0292078461
    ],
    [
      -0.0003847139,
      0.726907134,
      0.68673563
    ],
    [
      -0.0398178138,
      -0.6862022,
      0.7263202
    ]
  ],
  "TranslationMatrix": [
    [
      22.5370159
    ],
    [
      -362.535675
    ],
    [
      5448.58057
    ]
  ],
  "SensorName": "BRIO 4K Stream Edition",
  "SensorIndex": 0,
  "Error": 0.18790249992423425
}
...