Нахождение внешних связей между камерами

Я нахожусь в ситуации, когда мне нужно найти относительные позы камеры между двумя / или более камерами на основе соответствия изображений (чтобы камеры не находились в одной и той же точке). Чтобы решить эту проблему, я попробовал тот же подход, как описано Вот (код ниже).

cv::Mat calibration_1 = ...;
cv::Mat calibration_2 = ...;
cv::Mat calibration_target = calibration_1;
calibration_target.at<float>(0, 2) = 0.5f * frame_width;  // principal point
calibration_target.at<float>(1, 2) = 0.5f * frame_height; // principal point

auto fundamental_matrix = cv::findFundamentalMat(left_matches, right_matches, CV_RANSAC);
fundamental_matrix.convertTo(fundamental_matrix, CV_32F);
cv::Mat essential_matrix = calibration_2.t() * fundamental_matrix * calibration_1;
cv::SVD svd(essential_matrix);
cv::Matx33f w(0,-1,0,
1,0,0,
0,0,1);
cv::Matx33f w_inv(0,1,0,
-1,0,0,
0,0,1);
cv::Mat rotation_between_cameras = svd.u * cv::Mat(w) * svd.vt; //HZ 9.19

Но в большинстве случаев я получаю очень странные результаты. Поэтому моей следующей мыслью было использование полноценного регулятора пучка (который должен делать то, что я ищу ?!). В настоящее время моя единственная большая зависимость — это OpenCV, и у них есть только недокументированная реализация настройки пакета.

Итак, вопрос:

  • Существует ли средство настройки комплекта, которое не имеет зависимостей и использует лицензию, которая позволяет коммерческое использование?
  • Есть ли другой простой способ найти внешность?
  • Являются ли объекты с очень разным расстоянием до камер проблемой? (тяжелый параллакс)

заранее спасибо

4

Решение

Я также работаю над той же проблемой и сталкиваюсь с более тонкими проблемами.
Вот некоторые предложения —

  1. Изменить основную матрицу перед разложением:
    Модифицируйте Essential matrix перед разложением [U W Vt] = SVD (E), а новый E ‘= diag (s, s, 0), где s = W (0,0) + W (1,1) / 2.

  2. Двухэтапная оценка фундаментальной матрицы:
    Пересчитать фундаментальную матрицу с помощью RANSAC

Эти шаги должны сделать оценку вращения более восприимчивой к шуму.

1

Другие решения

Вы должны получить 4 различных решения и выбрать одно с наибольшим количеством # точек, имеющих положительные координаты Z. Решение генерируется путем инвертирования знака фундаментальной матрицы и замены w на w_inv, чего вы не делали, хотя вычисляли w_inv. Вы используете другой код?

0

По вопросам рекламы [email protected]