我尝试使用OpenCV 3.1在C ++中计算视差图。我使用StereoSGBM算法,我需要能够识别远和非常近的对象。因此,我将MinDisparity设置为-16和MaxDisparity 160。
现在可以正确校准相机,但会从左侧剪切生成的视差图。剪切量取决于MaxDisparity设置。
我理解为什么关闭对象会发生这种情况。仅仅因为第二张图像上的一个图像上的像素不可用。但是对于更远的物体,这不会发生。在这种情况下,对象在两个相机图像中都是完全可见的,但在结果视差图中不可见。
这个问题有解决办法吗?在高MaxDisparity设置的情况下计算所有可见区域的视差图?
答案 0 :(得分:1)
您遇到的问题是结果图片中的差异数量。 SGBM搜索整个视差空间并尝试在另一张图片中找到最佳匹配。
拍摄右图像的像素,并将其与来自左图像的视差范围内的每个像素进行比较。如果左图像太小,则视差无效。因此,左图像中最左边的176个像素被丢弃。
尝试减少最大差异和/或增加最小差异!