Наверное, есть ответы, но я просто не понял, что нашел. Может быть, это языковой барьер. Поэтому я решил наконец спросить. Что мне нужно, это найти 3D-координаты из двух видео, записанных двумя камерами. Установка выглядит так:
Я не могу понять, как это сделать. Что у меня есть
Что теперь? Документы OpenCV содержат следующую формулу:
Я не знаю, что такое s, ни матрица [R | T], внешние параметры. Я не знаю, где находится главный вопрос и как его найти (cx, cy), и я могу только предположить, что установка его в 0 не будет катастрофической. Кроме того, похоже, что он использует только одно из 2D-изображений, а не оба.
я знаю calibrateCamera
, solvePnP
, а также stereoCalibrate
функции, но я не знаю, как их использовать.
Я знаю, насколько это сложно, когда у вас есть камеры как два «глаза», я надеялся, что будет проще в ситуации, когда камеры снимают перпендикулярные изображения. Теперь у меня есть формула для расчета трехмерных координат, но она не совсем точна. Ошибка составляет менее 1 дюйма, но 1 дюйм слишком много.
xa, ya, xb, yb - pixel coordinates from pictures
focalAB - focal length
W = -(Ax*xb*pixelSize - focalB*By)/(xa*pixelSize*xb*pixelSize - focalA*focalB)
X = Ax + W*xa*pixelSize
Y = W*focalA
Z = W*xa*pixelSize
Ошибки:
Они предназначены для фокусных расстояний и размера пикселей, предоставленных производителем. 5400um и 1,75um. Тем не менее, ошибки наименьшие для значений 4620um и 1,69um, где самые большие ошибки для оси 3 # X, 2,3 см, ошибки высоты почти исчезают (максимум 0,2 см), а остальные либо 0,1 см или 1-1,5см.
Помимо того, что я хочу рассказать вам о стереозрении, как предложил @YangKui, я могу ответить на некоторые ваши подвопросы.
Уравнение, которое вы цитируете, представляет собой уравнение трехмерной проекции (для одной камеры). Это проективное уравнение геометрии (отсюда 1 в качестве последних координат), и все до некоторого масштаба s
,
s
это масштабный фактор.R
Поворот камеры 3х3 относительно выбранной системы координат мира.t
перевод координат камеры из мира / выбранной системы координат.cx
а также cy
являются принципиальными точками на изображении — точкой плоскости изображения в пиксельных единицах, которую пересекает ось Z. Он часто считается центром изображения.Один из подходов, который, как я считаю, обеспечивает интуицию, если не высокую производительность, заключается в построении матрицы камер для обеих камер и последующем использовании нелинейной оптимизации для M
сведение к минимуму «ошибки перепроецирования».
Итак, придумайте матрицы камеры: матрица камеры А отобразит центр камеры А в мировых координатах на (0, 0, 0) в координатах камеры А. Часть вращения матрицы камеры А будет отображать (0, 1, 0) в мировых координатах в (0, 0, 1) в координатах камеры.
Теперь вы можете отобразить мировые координаты на координаты изображения A и B, поэтому для любого (x, y, z) у вас есть соответствующий 4-вектор: (x_A, y_A, x_B, y_B). Если вы добавите точку (A_x, B_y, 0), вы получите 4-вектор. Разница между этим 4-вектором и измеренным положением — ваша ошибка перепроецирования. Бросьте это в решатель, и он должен быстро прийти к ответу.
Вы можете попробовать » Множество видов геометрии в компьютерном зрении » Хартли и Циссермана.