【发布时间】:2020-12-19 20:40:27
【问题描述】:
在校准和校正后,我能够提取立体相机的相机馈送的非常准确的视差图。该地图包含正确的视差值,因为当我将它们转换为公制距离时,它们非常准确。 现在我的视差图看起来像这样:
左边是校正后的图像,右边是视差图,低于我额头的正确估计(~0.5米,视差图上的白点)
SGBM 值设置为:
minDisparities -> 0;
numDisparities -> 32;
P1 -> 0;
P2 -> 0;
block Size -> 0;
Speckle window range -> 0;
Speckle window Size -> 0;
disp12MaxDiff -> 0;
preFilterCap -> 44;
uniquenessRatio -> 0;
mode ->2 (MODE_SGBM_3WAY);
但我可以通过一组轨迹栏轻松更改所有这些。
如您所见,视差图看起来有颗粒感,许多非纹理区域具有无法检测视差值的黑色像素。此外,细节和边缘并不好,这对于我的最终应用程序是不可接受的。 我尝试寻找过滤器,发现一个非常常见的过滤器是我应用的加权最小二乘过滤器 (WLS),这些是最初的不良结果:
右上视差图,左上 WLS 过滤显示图,右下置信度图。 如您所见,过滤后的 WLS 图的结果很糟糕,实际上置信图大部分是黑色的(并且深度值完全错误)。
通过使用我得到的 SGBM 参数:
左上颜色图(更容易看到深度透视图)、右上 WLS 显示、左下置信度图、右下未过滤显示图。
置信度图为白色的高置信度区域被正确过滤(您可以从颜色图和 WLS 过滤后的图像中看到),并且它们的深度信息与未过滤的显示图相当。
我的问题是,无论我尝试什么,我都无法对更近的物体抱有很高的信心,就像我在上图中的人物一样。我什么都试过了。
总之,我的问题是: 有没有办法为整个视野获得一个平滑、干净和暂时稳定的视差图(类似于我为我身后的墙壁和走廊获得的视差图)?我应该坚持 WLS 过滤还是使用其他过滤器?既然如此,你有什么建议?
我正在使用 OpenCV 和 Visual Studio。 非常感谢任何建议。
谢谢!!
【问题讨论】:
-
恐怕这对 SO 来说是题外话。
-
这怎么跑题了?
-
SO 是关于特定编程问题的,尤其是当您使用 C++ 对其进行标记时。这只是我的看法,但反对票不是我的。
标签: c++ opencv camera-calibration disparity-mapping stereoscopy