Как создать карту глубины из стереокамеры PointGrey BumbleBee2, используя Triclops и FlyCapture SDK?

У меня есть стерео камера 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, то есть на два порядка. Поэтому неверно рассчитывать это значение один раз и использовать вечно.

2

Решение

Может быть, немного поздно, и вы сами это поняли, но:

Использовать triclopsExtractImage3d Вы должны сначала создать 3dImage.

TriclopsImage3d *depthImage;
triclopsCreateImage3d(triclopsContext, &depthImage);
triclopsExtractImage3d(triclopsContext, depthImage);
triclopsDestroyImage3d(&depthImage);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]