【发布时间】:2014-03-13 13:28:41
【问题描述】:
我有 BumbleBee 2 立体摄像头和两个提到的 SDK。
我已经设法在我的程序中捕获了一段视频,校正了立体图像并获得了视差图。接下来我想要一张类似于 Kinect 提供的深度图。
Triclops 的文档很短,它只引用了函数,没有典型的工作流程描述。工作流程在示例中进行了描述。
到目前为止,我已经找到了 2 个相关函数:triclopsRCDxxToXYZ() 函数家族和 triclopsExtractImage3d() 函数。
第一个系列的函数计算单个像素的 x、y 和 z 坐标。 Z 坐标完全对应以米为单位的深度。然而,要使用这个函数,我应该创建两个嵌套循环,如stereo3dpoints 示例所示。这会带来太多开销,因为每次调用都会返回两个以上的坐标。
第二个函数triclopsExtractImage3d() 总是返回错误TriclopsErrorInvalidParameter。文档只说“上下文和 TriclopsImage3d 之间存在几何不匹配”,这对我来说并不清楚。
Triclops 3.3.1 SDK 的示例没有展示如何使用它。 Google 带来了example from Triclops SDK 3.2,在 3.3.1 中是没有的。
我尝试将上面链接中的第 253-273 行添加到当前的 stereo3dpoints - 得到了那个错误。
有人有经验吗?
使用triclopsExtractImage3d() 是否有效还是已过时?
我还尝试绘制从triclopsRCDxxToXYZ() 获得的disparity 与z 的值。
该图显示了几乎精确的反比例:。
那是z = k / disparity。但是k 在整个图像中并不是恒定的,它从大约 2.5e-5 到 1.4e-3 变化,即两个数量级。因此,这个值只计算一次就永远使用是不正确的。
【问题讨论】:
标签: c++ depth-buffer stereo-3d