3D-триангуляция, похожая на Hawkeye

Простите меня, если этот вопрос задавали раньше, но я хотел бы знать, с чего начать, чтобы добиться стереозрения для преобразования 2D-координат в 3D-координаты. Я пытаюсь отслеживать мячи, как Соколиный глаз в 3D. У меня есть две высокоскоростные камеры, и я могу обнаружить мяч каждой камерой. Я понимаю, что мне нужно откалибровать камеры, синхронизировать их и запустить какой-то алгоритм для устранения искажений объектива и т. д. Однако я не знаю, что делать дальше, чтобы преобразовать 2D-координаты в мировые 3D-координаты.

Кто-нибудь знает, как выполнить триангуляцию, кто может мне в этом помочь? Также камеры будут не параллельны друг другу, а под разными углами, поэтому мне каким-то образом нужно знать местоположение каждой камеры с точки зрения их 3D-координат.

Любая помощь в этом будет принята с благодарностью.

Большое спасибо


person Adam    schedule 06.03.2014    source источник
comment
взгляните на небольшое введение здесь: multimedia.ceti.gr/ index.php/3d-laser-scanning-explained в первую очередь относится к лазерному сканированию, но концепция триангуляции такая же... вам также может понадобиться проверить ресурсы стереозрения, поскольку вы используете две камеры   -  person sepdek    schedule 06.03.2014
comment
Ваш вопрос совершенно не ясен. Вы ищете теорию процесса триангуляции или хотите применить ее в OpenCV?   -  person JonasVautherin    schedule 06.03.2014
comment
Я хочу знать на практике (с использованием OpenCV или любого другого кода или библиотеки), а не только в теории, как я могу триангулировать, чтобы найти трехмерное местоположение мяча, используя простую настройку двух камер.   -  person Adam    schedule 06.03.2014


Ответы (2)


Чтобы преобразовать 2D в 3D для двух калиброванных камер, вы должны использовать следующие формулы: z = фокусное*базовая линия/расхождение x = z*u/фокусное y = z*v/фокусное

где фокусное - фокусное расстояние вашей камеры в пикселях u = столбец-Cx, Cx~ширина_изображения/2, но калибровка даст вам более точное значение v = -row+Cy, Cy~высота_изображения/2 Базовая линия - расстояние между камерами по горизонтали, несоответствие - разница в горизонтальном положении мяча на двух изображениях

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

person Vlad    schedule 07.03.2014
comment
Это здорово, спасибо. Небольшой контекст: я пытаюсь создать систему, которая может обнаруживать футбольный мяч, проходящий через линию. Если я возьму две камеры и сфокусирую их на цели, они должны быть параллельны или они могут находиться под любым углом/расстоянием друг от друга? Кроме того, как мне точно узнать положение камер, необходимых для процесса триангуляции? - person Adam; 07.03.2014
comment
вам не нужно иметь параллельные камеры, но тогда вы можете решать более сложную систему уравнений. Расстояние между камерами должно быть достаточно большим по сравнению с расстоянием, поэтому, например, если камеры параллельны и d=f*B/z, вы должны убедиться, что у вас есть несоответствие в несколько пикселей на расстоянии, на котором находится ваша цель. Что касается калибровки камеры - вам понадобятся внутренние и внешние параметры ваших камер, чтобы решить проблему триангуляции. Это означает решение уравнений камеры-обскуры для трехмерной точки (3 неизвестных), в то время как у вас есть 4 уравнения (2 камеры x 2d-координаты на вашем изображении). - person Vlad; 07.03.2014
comment
как сказано выше, вы можете комбинировать внутренние и внешние параметры в матрице проекций и использовать triangulatePoints() для получения решения. - person Vlad; 07.03.2014