Я использую MATLAB-CVST для выполнения калибровки стереокамеры. Из 28 изображений (6 X 7 углов) получаются stereoParams (stereoParams.MeanReprojectionError = 0,3168).
Затем я взял шахматную стереопару (CB_I1 и CB_I2).
К CB_I1 я применил следующие функции:
- неискажать изображение
- обнаружитьCheckerboardPoints
- генерироватьCheckerboardPoints
- extrinsics: это дает мне вектор перевода (T) и матрицу вращения (R)
Затем к CB_I1 и CB_I2 я применяю следующие функции:
- неискажать изображение
- обнаружитьCheckerboardPoints
- триангуляция: это дает мне worldPoints
- Обратный перенос и преобразование вращения
Это мой код:
CB_I1_undist = undistortImage(CB_I1, stereoParams.CameraParameters1);
CB_I2_undist = undistortImage(CB_I2, stereoParams.CameraParameters2);
[imagePoints1, ~] = detectCheckerboardPoints(CB_I1_undist);
[imagePoints, ~] = detectCheckerboardPoints(CB_I2_undist);
worldPoints = triangulate(imagePoints1,imagePoints,stereoParams);
Translated_pnts = zeros(size(worldPoints));
Translated_pnts(:,1) = worldPoints(:,1) - T(1);
Translated_pnts(:,2) = worldPoints(:,2) - T(2);
Translated_pnts(:,3) = worldPoints(:,3) - T(3);
Rotated_pnts = Translated_pnts * (R');
Transformed_points = Rotated_pnts;
В итоге Transformed_points выглядит так:
и так далее.... по 42 балла.
Как мне это интерпретировать? Я ожидаю, что Transformed_points будет:
так как размер каждого квадрата составляет 40 мм.
- Прежде всего, это ошибка?
- В чем причина? Это из-за высокой ошибки перепроецирования? (если да, то как его минимизировать?)
- Как я могу уменьшить это как можно больше?
- Я хочу, чтобы это было как можно ближе к идеальному значению. Какими способами я могу повысить точность своего алгоритма?
Дайте мне знать, если вам нужна какая-либо другая информация.