3D-реконструкция с двух калиброванных камер-где ошибка в этом трубопроводе?
есть много сообщений о 3D-реконструкции из стерео видов известной внутренней калибровки, некоторые из которых отлично. Я прочитал много из них, и на основе того, что я прочитал, я пытаюсь вычислить свою собственную реконструкцию 3D-сцены с помощью приведенного ниже конвейера / алгоритма. Я изложу метод, а затем задам конкретные вопросы внизу.
0. Калибровка камер:
- это означает получить камеру калибровка матрицы K1 и K2 для камеры 1 и камеры 2. Это матрицы 3x3, инкапсулирующие внутренние параметры каждой камеры: фокусное расстояние, смещение главной точки / центр изображения. Они не меняются, вам нужно сделать это только один раз, ну, для каждой камеры, пока вы не увеличиваете или не изменяете разрешение, в котором вы записываете.
- сделать это в автономном режиме. Не спорить.
- я использую OpenCV ' s
CalibrateCamera()
и шахматные процедуры, но эта функциональность также включена в MATLAB калибровка камеры toolbox. Процедуры OpenCV, похоже, работают хорошо.
1. Фундаментальная Матрица Ф:
- С вашими камерами теперь настроенными как стерео установка. Определите фундаментальную матрицу (3x3) этой конфигурации, используя точечные соответствия между двумя изображениями/представлениями.
- как вы получение соответствий зависит от вас и будет во многом зависеть от самой сцены.
- я использую OpenCV
findFundamentalMat()
получить F, который предоставляет ряд вариантов метода wise (8-точечный алгоритм, RANSAC, LMEDS). - вы можете проверить полученную матрицу, подключив ее к определяющему уравнению фундаментальной матрицы:
x'Fx = 0
где x' и x-соответствия точек необработанного изображения(x, y)
в однородных координатах(x, y, 1)
и один из трех векторов транспонированной так что умножение имеет смысл. Чем ближе к нулю для каждого соответствия, тем лучше F подчиняется его отношению. Это эквивалентно проверке того, насколько хорошо производное F фактически отображает с одной плоскости изображения на другую. Я получаю среднее отклонение ~2px, используя 8-точечный алгоритм.
2. Существенная Матрица E:
- вычислить необходимую матрицу непосредственно из F и калибровочных матриц.
- E = K2T FK1
3. Внутреннее ограничение на E:
- E должен подчиняться определенным ограничениям. В частности, если разложить SVD на
USV.t
тогда это сингулярные значения должны быть =a, a, 0
. Первые две диагональные элементы должны быть равны, а третий равен нулю. - я был удивлен, прочитав здесь если это не так, когда вы тестируете его, вы можете выберите, чтобы изготовить новую существенную матрицу из предыдущего разложения следующим образом:
E_new = U * diag(1,1,0) * V.t
который, конечно, гарантированно подчиняется ограничению. Вы по существу установили s = (100,010,000) искусственно.
4. Полные Матрицы Проекции Камеры:
- есть две матрицы проекции камеры P1 и P2. Это 3x4 и подчиняются
x = PX
отношения. Кроме того,P = K[R|t]
и поэтомуK_inv.P = [R|t]
(где калибровка камеры удалена). - первая Матрица P1 (исключая калибровочную матрицу K) можно установить в
[I|0]
тогда P2 (исключая K) isR|t
- вычислить вращение и перемещение между двумя камерами R, t из разложения E. Существует два возможных способа вычисления R (
U*W*V.t
иU*W.t*V.t
) и два способа вычисления t (±третий столбец U), что означает, что существует четыре комбинацииRt
, только один из которых является действующим. - вычислите все четыре комбинации и выберите ту, которая геометрически соответствует ситуации, когда реконструированная точка перед обеими камерами. Я действительно делаю это, выполняя и вычисляя результирующий P2 = [R / t] и триангуляция 3d-положения нескольких соответствий в нормализованных координатах для обеспечения положительной глубины (z-coord)
5. Триангуляции в 3D
- наконец, объедините восстановленные матрицы проекции 3x4 с их соответствующими матрицами калибровки: P'1 = K1P1 и P'2 = K2P2
- и триангулировать 3-пространственные координаты каждой 2d-точки соответствия соответственно, для которых я использую метод 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'Fx = 0 может быть для каждой точки соответствия.
еще одной причиной неправильного E может быть переключатель камер (K1T * E * K2 вместо K2T * E * K1). Не забудьте проверить: х'Ex = 0
"принуждение внутреннего ограничения" все еще сидит очень странно со мной - как может быть допустимо просто изготовить новую существенную матрицу из часть разложения оригинала?
Это объясняется в "геометрии множественного вида в компьютерном зрении" от Хартли и Зиссермана. Насколько я знаю, это связано с минимизацией нормы Фробениуса F.
вы можете Google это и есть ресурсы pdf.
есть ли более эффективный способ определить, какая комбинация R и t для используйте, чем вычисление P и триангуляция некоторых нормализованных координаты?
нет, насколько я знаю.
моя последняя ошибка повторной проекции-сотни пикселей в изображениях 720p. Утра Вероятно, я смотрю на проблемы в калибровке, определении P-матрицы или триангуляция?
ваш жесткий преобразование тела P2 неверно, потому что e неверно.