Вывод после триангуляции (MATLAB) не точен

Я использую MATLAB-CVST для выполнения калибровки стереокамеры. Из 28 изображений (6 X 7 углов) получаются stereoParams (stereoParams.MeanReprojectionError = 0,3168).

Затем я взял шахматную стереопару (CB_I1 и CB_I2).

К CB_I1 я применил следующие функции:

  1. неискажать изображение
  2. обнаружитьCheckerboardPoints
  3. генерироватьCheckerboardPoints
  4. extrinsics: это дает мне вектор перевода (T) и матрицу вращения (R)

Затем к CB_I1 и CB_I2 я применяю следующие функции:

  1. неискажать изображение
  2. обнаружитьCheckerboardPoints
  3. триангуляция: это дает мне worldPoints
  4. Обратный перенос и преобразование вращения

Это мой код:

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 мм.

  • Прежде всего, это ошибка?
  • В чем причина? Это из-за высокой ошибки перепроецирования? (если да, то как его минимизировать?)
  • Как я могу уменьшить это как можно больше?
  • Я хочу, чтобы это было как можно ближе к идеальному значению. Какими способами я могу повысить точность своего алгоритма?

Дайте мне знать, если вам нужна какая-либо другая информация.


person Saania    schedule 16.10.2015    source источник


Ответы (2)


Вы говорите, что у вас средняя ошибка повторного проецирования 0,3~.

Если я вычислю расстояние между вашей первой и второй точкой:

sqrt((-0.2006+0.1993)^2+(-1.2843-39.1922)^2+(3.0466-2.0656)^2)
ans >>
      40.4884

Ну, это то, что вы ожидаете, верно? Конечно, это не 100% точность.

Кроме того, посмотрите еще раз на ваши точки. Они именно там, где вы ожидаете их увидеть. Вместо 120 у вас 120.06. Вместо 160 у вас 159,94.

вы пропускаете точки примерно на 0,3 миллиметра. 0,3 МИЛИМЕТРА. Возьмите линейку и попробуйте отмерить 0,3 миллиметра!!

  • Это в 4 раза больше человеческого волоса!
  • Это более или менее минимальное расстояние, которое может различить человеческий глаз!
  • 3 раза больше с бумагой!
  • В 0,6 раза больше БАКТЕРИИ! (амеба протей)

ВАУ, я думаю, что это довольно хорошая ошибка, не так ли?

В любом случае, вы можете уменьшить эту ошибку, используя больше калибровочных изображений, но да, я бы сказал, что вы уже делаете хорошую работу.

Хороший способ измерения ошибки, чтобы он имел больше смысла, — вычислить ошибку пикселя, а не реальную физическую ошибку. Если вы разделите ошибку на длину пикселя, вы можете узнать, сколько у вас пикселей ошибки. Вы увидите, что, скорее всего, в вашем случае у вас субпиксельная точность (ошибка пикселя ‹ 1). Это очень хорошо, потому что это означает, что ваша ошибка меньше, чем то, что вы можете измерить, поэтому в некотором смысле (не совсем, но да) вы нарушаете принцип Шеннона! Отличная работа


Источник случайных данных: http://www.wolframalpha.com/input/?i=300+micrometres

person Ander Biguri    schedule 16.10.2015
comment
:D Это верно! Ну да, я действительно работаю с очень высокой точностью. В конечном счете, я рассчитываю углы, которые должны иметь точность +/- 1 угловую минуту на расстоянии около 1 м от базовой линии. Я хочу максимально уменьшить среднюю ошибку перепроецирования. - person Saania; 16.10.2015
comment
@Мегана Красиво! Рассмотрите возможность преобразования ваших ошибок в пиксели (чтобы вы могли лучше видеть точность субпикселей) и также рассмотрите возможность принятия ответа;) - person Ander Biguri; 16.10.2015
comment
MATLAB по умолчанию использует субпиксельную точность во время калибровки, верно? Так что мне не нужно делать дополнительную обработку. Я обязательно приму ответ. Я действительно хочу получить больше мнений по этому моему вопросу, это сдерживает мой проект. - person Saania; 16.10.2015
comment
субпиксельная точность относится к качеству вывода, а не к тому, что использует MATLAB. Если ошибка в мм, деленная на длину пикселей в мм, меньше единицы, то это означает, что ошибка меньше пикселя, таким образом, можно получить субпиксельную точность. @Мегана. Я работал в приложении, где требовалась гораздо большая точность, чем вы описываете. Единственными вариантами повышения точности калибровки являются: - person Ander Biguri; 16.10.2015
comment
1.- Получите лучшие камеры (большее разрешение). 2.- Используйте большее количество фотографий при калибровке и распечатайте контрольную доску на бумаге высокого качества. 3.- использовать передовые методы калибровки, используя шаблоны круговой калибровки и некоторые довольно продвинутые методы оптимизации. Если вы не делаете ничего из этого, вы настолько хороши, насколько можете - person Ander Biguri; 16.10.2015
comment
Это классно! @AnderBiguri 1. В настоящее время я использую датчики 10MP. Изменение этого — мой последний вариант, так как аппаратное обеспечение уже разработано. 2. Да, это лучшее качество, которое я мог получить, но я еще раз посмотрю на это. Спасибо. 3. Я использую MATLAB, который поддерживает шаблоны шахматной доски. Не могли бы вы сказать мне, какое программное обеспечение вы использовали? Вы тоже использовали круговые калибровочные шаблоны? Пожалуйста, расскажите о довольно продвинутых методах оптимизации - person Saania; 16.10.2015
comment
@Meghana К сожалению, я этого не делал :(. Был аспирант, который делал это для своей диссертации. Вы можете погуглить, и вы найдете разные модели камер/алгоритмы/шаблоны минимизации. Это целая область исследований, на которую нельзя ответить в единственный ТАК вопрос, к сожалению! - person Ander Biguri; 16.10.2015

К ответу Андера я просто хотел бы добавить, что вы должны обязательно очень точно измерить размер квадрата, используя штангенциркуль. Если вы сможете добиться субмиллиметровой точности, это повлияет на точность вашей реконструкции. Кроме того, не используйте сжатие с потерями для ваших изображений, т.е. е. нет джпег. Артефакты Jpeg также снижают точность.

person Dima    schedule 16.10.2015
comment
Спасибо, я тоже хотел узнать ваше мнение. И да, мои изображения в формате .png. Должен ли я перейти на .bmp? Это тот, который с минимальной/без сжатия? - person Saania; 17.10.2015
comment
Пнг в порядке. Просто убедитесь, что изображения с камер не сжаты. - person Dima; 17.10.2015