Я пытаюсь изначально откалибровать датчик с помощью шахматной доски.
Я делаю около 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
}