У меня есть стерео камера BumbleBee 2 и два упомянутых SDK.
Мне удалось снять видео с него в моей программе, исправить стереоизображения и получить карту несоответствия. Следующая вещь, которую я хотел бы иметь, — карта глубины, подобная той, которую дает Kinect.
Документация Triclops довольно короткая, она только ссылается на функции, без типичного описания рабочего процесса. Рабочий процесс описан в примерах.
До сих пор я нашел 2 соответствующих функции: семейство triclopsRCDxxToXYZ()
функции и triclopsExtractImage3d()
функция.
Функции из первого семейства вычисляют координаты x, y и z для одного пикселя. Координата Z прекрасно соответствует глубине в метрах. Однако, чтобы использовать эту функцию, я должен создать два вложенных цикла, как показано в stereo3dpoints
пример. Это дает слишком много накладных расходов, потому что каждый вызов возвращает еще две координаты.
Вторая функция, triclopsExtractImage3d()
всегда возвращает ошибку TriclopsErrorInvalidParameter
, Документация говорит только о том, что «существует несоответствие геометрии между контекстом и TriclopsImage3d», что мне не ясно.
Примеры Triclops 3.3.1 SDK не показывают, как его использовать. Google приносит пример из Triclops SDK 3.2, который отсутствует в 3.3.1.
Я попытался добавить строки 253-273 из ссылки выше в текущий стерео3dpoints — получил эту ошибку.
У кого-нибудь есть опыт с этим?
Это действительно для использования triclopsExtractImage3d()
или это устарело?
Я также попытался построить значения disparity
против z
, получен из triclopsRCDxxToXYZ()
,
График показывает почти точную обратную пропорциональность: .
То есть z = k / disparity
, Но k
не является постоянной величиной по всему изображению, оно колеблется от приблизительно 2,5e-5 до 1,4e-3, то есть на два порядка. Поэтому неверно рассчитывать это значение один раз и использовать вечно.
Может быть, немного поздно, и вы сами это поняли, но:
Использовать triclopsExtractImage3d
Вы должны сначала создать 3dImage.
TriclopsImage3d *depthImage;
triclopsCreateImage3d(triclopsContext, &depthImage);
triclopsExtractImage3d(triclopsContext, depthImage);
triclopsDestroyImage3d(&depthImage);
Других решений пока нет …