在校准和矫正之后,我能够从我的立体相机的摄像头中提取出一个相当精确的视差图。该图包含正确的视差值,因为当我将它们转换为度量距离时,它们非常准确。
现在,如果不进行任何处理,我的视差图看起来就像这样:
左侧为校正后的图像,右侧为视差图,下方为我的额头正确估计值(约0.5米,在视差图上为白点)。使用SGBM算法,参数设置如下:
但是我可以通过一组滑动条轻松地更改它们。
正如您所看到的,视差图看起来很粗糙,并且许多非纹理区域具有黑色像素,其视差值无法检测。此外,细节和边缘不够清晰,这对于我的最终应用程序是不可接受的。 我尝试寻找过滤器,并发现一个非常常见的是加权最小二乘滤波器(WLS),我应用了它,这些是初始的不良结果: 上右视差图,上左WLS滤波的视差图,下右置信度图。可以看到,WLS滤波后的结果很差,实际上置信度图大部分是黑色的(深度值完全错误)。
通过调整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。 非常感谢任何建议。
谢谢!