Во время процесса калибровки (calibrateCamera
) вы должны указать сетку точек вашей цели калибровки.Единица, которую вы даете там, будет определять единицу для остальной части процесса.При вызове reprojectImageTo3D
вы, вероятно, использовали вывод матрицы Q на stereoRectify
, который учитывает отдельные калибровки (cameraMatrix1
, cameraMatrix2
).Вот откуда пришло устройство.Так что в вашем случае вы получите мм, я думаю.
reprojectImageTo3D
должен использовать выпрямленное изображение, так как несоответствие рассчитывается с использованием выпрямленного изображения (иначе оно не будет правильно выровнено).Кроме того, при расчете диспаратности он рассчитывается относительно первого заданного изображения (левого в документе).Поэтому вы должны использовать левое выпрямленное изображение, если вы вычислили расхождение следующим образом: cv::StereoMatcher::compute(left, right)
У меня никогда не было двух разных камер, но имеет смысл использовать одни и те же.Я думаю, что если у вас очень разные цветовые изображения, края или другие различия, это может повлиять на качество несоответствия.Что на самом деле очень важно (если только вы не работаете с неподвижными изображениями), это использовать камеры, которые можно синхронизировать аппаратно (например, сигнал GENLOCK: https://en.wikipedia.org/wiki/Genlock). Если у вас есть небольшая задержка между левым и правым идвижущийся объект, несоответствие может быть неправильным. Это также верно для калибровки.
Надеюсь, это поможет!