opencv: reprojectImageTo3d, какова метрическая единица точки (X,Y,Z)?
Во -первых, я хотел узнать метрическую единицу 3d-точки, которую мы получили из функции opencv reprojectImageTo3D().
во-вторых, я откалибровал каждую камеру по отдельности на шахматной доске с метрической единицей "мм", а затем использовал функции opencv для калибровки стереосистемы, выпрямления стереопары и вычисления карты диспаратности.
В основном я хочу расстояние от центра ограничительной рамки. поэтому я вычисляю карту диспаратности и перепроектирую ее в 3D с помощью функции reprojectImageTo3D (), а затем беру из этих трехмерных точек ту, которая соответствует центру bbox (x, y). Но какое изображение я должен использовать, чтобы получить центр bbox? выпрямленный или оригинал?
Во-вторых, лучше ли использовать ту же модель камеры для стереосистемы?
Спасибо
0 ответов
В процессе калибровки (calibrateCamera
) вы должны указать сетку точек вашей цели калибровки. Единица, которую вы даете там, будет определять единицу для остальной части процесса. При звонке reprojectImageTo3D
вы, вероятно, использовали выход матрицы Q stereoRectify
, который принимает в отдельных калибровках (cameraMatrix1
, cameraMatrix2
). Вот откуда пришло устройство. Так что в вашем случае вы получите мм я думаю.
reprojectImageTo3D
должен использовать выпрямленное изображение, так как несоответствие рассчитывается с использованием выпрямленного изображения (в противном случае оно не будет правильно выровнено). Кроме того, при расчете диспаратности он рассчитывается относительно первого заданного изображения (левого в документе). Поэтому вы должны использовать левое выпрямленное изображение, если вы вычислили расхождение следующим образом: cv::StereoMatcher::compute(left, right)
У меня никогда не было двух разных камер, но имеет смысл использовать одни и те же. Я думаю, что если у вас очень разные цветовые изображения, края или другие различия, это может повлиять на качество несоответствия. Что на самом деле очень важно (если вы не работаете только с неподвижными изображениями), это использовать камеры, которые можно синхронизировать аппаратно (например, сигнал GENLOCK: https://en.wikipedia.org/wiki/Genlock). Если у вас есть небольшая задержка между левым и правым и движущимся объектом, несоответствие может быть неправильным. Это также верно для калибровки.
Надеюсь это поможет!