3D реконструкция с двух калиброванных камер - где ошибка в этом трубопроводе?

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

0. Откалибруйте свои камеры:

  • Это означает получение матриц калибровки камеры K 1 и K 2 для камеры 1 и камеры 2. Это матрицы 3x3, инкапсулирующие внутренние параметры каждой камеры: фокусное расстояние, смещение главной точки / центр изображения. Они не меняются, вам нужно сделать это только один раз, ну, для каждой камеры, если вы не изменяете масштаб или не изменяете разрешение, которое записываете.
  • Сделайте это в автономном режиме. Не спорь.
  • Я использую OpenCV CalibrateCamera() и процедуры шахматной доски, но эта функциональность также включена в набор инструментов калибровки камеры Matlab. Кажется, что подпрограммы OpenCV работают хорошо.

1. Фундаментальная матрица F:

  • Теперь ваши камеры настроены как стереосистема. Определите основную матрицу (3x3) этой конфигурации, используя точечные соответствия между двумя изображениями / видами.
  • Как вы получите соответствия, зависит от вас и будет зависеть от самой сцены.
  • Я использую OpenCV findFundamentalMat() получить F, который предоставляет ряд опций по методу (8-точечный алгоритм, RANSAC, LMEDS).
  • Вы можете проверить полученную матрицу, вставив ее в определяющее уравнение фундаментальной матрицы: x'Fx = 0 где x'и x - точечные соответствия необработанного изображения (x, y) в однородных координатах (x, y, 1) и один из трех векторов транспонируется так, чтобы умножение имело смысл. Чем ближе к нулю для каждого соответствия, тем лучше F подчиняется своему отношению. Это эквивалентно проверке того, насколько хорошо производное F фактически отображается из одной плоскости изображения в другую. Я получаю среднее отклонение ~2px, используя 8-точечный алгоритм.

2. Основная матрица E:

  • Вычислите Основную матрицу непосредственно из F и калибровочных матриц.
  • E = K 2 T FK 1

3. Внутреннее ограничение на E:

  • E должен соблюдать определенные ограничения. В частности, если разложить SVD на USV.t тогда это единственные значения должны быть = a, a, 0, Первые два диагональных элемента S должны быть равны, а третий равен нулю.
  • Я был удивлен, прочитав здесь, что, если это не так, когда вы проверяете это, вы можете выбрать создание новой матрицы Essential из предыдущего разложения следующим образом: E_new = U * diag(1,1,0) * V.t что, конечно, гарантированно подчиняется ограничению. По сути, вы установили S = ​​(100,010,000) искусственно.

4. Матрицы проекции полной камеры:

  • Существует две матрицы проекции камеры P 1 и P 2. Это 3х4 и подчиняются x = PX связь. Также, P = K[R|t] и поэтому K_inv.P = [R|t] (где калибровка камеры была удалена).
  • Первая матрица P 1 (исключая калибровочную матрицу K) может быть установлена ​​на [I|0] тогда P 2 (исключая K) R|t
  • Вычислить вращение и перевод между двумя камерами R, t из разложения E. Есть два возможных способа вычисления R (U*W*V.t а также U*W.t*V.t) и два способа вычисления t (± третий столбец U), что означает, что существует четыре комбинации Rt только один из которых действителен.
  • Вычислите все четыре комбинации и выберите ту, которая геометрически соответствует ситуации, когда восстанавливаемая точка находится перед обеими камерами. На самом деле я делаю это, проводя и вычисляя результирующий P 2 = [R | t] и триангулируя положение 3d нескольких соответствий в нормализованных координатах, чтобы гарантировать, что они имеют положительную глубину (z-координата)

5. Триангуляция в 3D

  • Наконец, объедините восстановленные матрицы проекций 3x4 с соответствующими калибровочными матрицами: P ' 1 = K 1 P 1 и P' 2 = K 2 P 2
  • И триангулируйте 3-пространственные координаты каждого 2-точечного соответствия соответственно, для чего я использую метод LinearLS.

ВОПРОСЫ:

  • Есть ли какие-нибудь упущения и / или ошибки в этом методе?
  • Моя F-матрица, по-видимому, точна (отклонение 0,22% в отображении по сравнению с типичными значениями координат), но при тестировании E против x'Ex = 0 при использовании нормализованных соответствий изображений типичная ошибка в том, что отображение составляет>100% от самих нормализованных координат. Тестирует E против xEx = 0 допустимо, и если да, то откуда этот скачок в ошибке?
  • Ошибка в моей оценке фундаментальной матрицы значительно хуже при использовании RANSAC, чем в алгоритме 8pt, ±50px при отображении между x и x'. Это глубоко касается меня.
  • "Усиление внутреннего ограничения" все еще очень странно для меня - как может быть допустимо просто изготовить новую Основную матрицу из части разложения оригинала?
  • Есть ли более эффективный способ определения, какую комбинацию из R и t использовать, чем вычисление P и триангуляцию некоторых нормализованных координат?
  • Моя последняя ошибка повторного проецирования составляет сотни пикселей в изображениях 720p. Я, вероятно, смотрю на проблемы в калибровке, определении P-матриц или триангуляции?

1 ответ

Решение

Ошибка в моей фундаментальной оценке matr1ix значительно хуже при использовании RANSAC, чем алгоритм 8pt, ±50px при отображении между x и x'. Это глубоко касается меня.

Использование алгоритма 8pt не исключает использования принципа RANSAC. При прямом использовании алгоритма 8pt какие точки вы используете? Вы должны выбрать 8 (хорошие) баллы самостоятельно.

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

Вы пытались использовать результат RANSAC? Могу поспорить, это представляет собой одно из правильных решений для F.

Моя F-матрица, по-видимому, точна (отклонение 0,22% в отображении по сравнению с типичными значениями координат), но при тестировании E против x'Ex = 0 с использованием нормализованного изображения соответствует типичная ошибка в том, что отображение составляет>100% самих нормализованных координат. Является ли тестирование E по xEx = 0 допустимым, и если да, то откуда этот скачок в ошибке?

Опять же, если F вырожден, x 'F x = 0 может быть для любого точечного соответствия.

Еще одной причиной неправильной настройки E может быть переключение камер (K1T * E * K2 вместо K2T * E * K1). Не забудьте проверить: x'Ex = 0

"Усиление внутреннего ограничения" все еще очень странно для меня - как может быть допустимо просто изготовить новую Эссенциальную матрицу из части разложения оригинала?

Это объясняется в "Геометрии множественного обзора в компьютерном зрении" Хартли и Циссермана. Насколько я знаю, это связано с минимизацией фробениусовой нормы F.

Вы можете Google это и есть ресурсы PDF.

Есть ли более эффективный способ определения, какую комбинацию из R и t использовать, чем вычисление P и триангуляцию некоторых нормализованных координат?

Нет, насколько я знаю.

Моя последняя ошибка повторного проецирования составляет сотни пикселей в изображениях 720p. Я, вероятно, смотрю на проблемы в калибровке, определении P-матриц или триангуляции?

Ваше преобразование твердого тела P2 неверно, потому что E неверно.

Другие вопросы по тегам