4

我正在尝试使用 OpenCV 3.1 在 C++ 中计算视差图。我使用 StereoSGBM 算法,我需要能够识别远距离和非常近的物体。因此我将 MinDisparity 设置为 -16 和 MaxDisparity 160。

相机现在已正确校准,但生成的视差图是从左侧切割的。切割量取决于 MaxDisparity 设置。

我会理解为什么近距离物体会发生这种情况。仅仅是因为一个图像上的像素在第二个图像上不可用。但这不会发生在更远的物体上。在这种情况下,对象在两个相机图像中都是完全可见的,但在结果视差图中不可见。

看这张图片。为什么结果上看不到我的手? 在此处输入图像描述

这个问题有什么解决办法吗?在高 MaxDisparity 设置的情况下计算所有可见区域的视差图?

4

1 回答 1

2

您面临的问题是结果图片中的差异数量。SGBM 搜索整个视差空间并尝试在另一张图片中找到最佳匹配。

获取右侧图像的一个像素,并将其与左侧图像视差范围内的每个像素进行比较。如果左图太小,则视差无效。因此,左侧图像中最左侧的 176 个像素被丢弃。

尝试减少最大差异和/或增加最小差异!

于 2016-10-14T10:58:14.303 回答