微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

视差图后过滤

如何解决视差图后过滤

经过校准和校正后,我能够提取出立体摄像机的摄像机馈送的相当准确的视差图。该地图包含正确的视差值,因为当我按公制距离转换它们时,它们确实是准确的。 现在,如果不加修饰,我的视差图看起来像这样:

Rectified Image on the left,disparity Map on the right,Below the correct estimation of my forehead (~0.5 meters,white dot on the disparity map)

左图为校正后的图像,右图为视差图,低于我额头的正确估计值(约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),这是最初的不良结果:

Upper right disparity map,Upper left WLS filtered disp map,bottom right confidence map

右上视差图,左上WLS过滤后的显示图,右下置信度图。 如您所见,在经过过滤的WLS映射中结果很差,实际上,置信度映射大部分是黑色的(深度值完全错误)。

通过使用SGBM参数,我得到:

Upper left color map (easier to see the depth perspective),upper right WLS disp,lower left confidence map,lower right unfiltered disp map

左上颜色图(更容易看到深度透视图),右上WLS显示,左下置信度图,右下未过滤的显示图。

置信度图为白色的高置信度区域已正确过滤(从颜色图和WLS过滤后的图像中都可以看到),并且其深度信息与未过滤的显示图相当。

我的问题是,无论我尝试什么,我都无法像上面图片中的人物那样对较近的物体抱有很高的信心。我尝试了一切。

因此,总而言之,我的问题是: 有没有办法获得整个视场的平滑,清洁和暂时稳定的视差图(类似于我在身后的墙壁和走廊所获得的视差图)?我应该坚持使用WLS过滤还是使用其他过滤器?在这种情况下,您有什么建议?

我正在使用OpenCV和Visual Studio。 任何建议都将不胜感激。

谢谢!

解决方法

对于那些有类似问题的人:就我而言,我意识到我将错误的图像传递给了过滤器功能。

wls_filter->filter(dispL,recl,dispFiltered,dispR,Rect(),recr);

在归一化之后,dispL和dispR是左右视差图:

double minValL,maxValL;
minMaxLoc(disp16sL,&minValL,&maxValL);
disp16sL.convertTo(dispL,CV_8UC1,255 / (maxValL - minValL));

(与右侧显示地图相同)

相反,具有:

    wls_filter->filter(disp16sL,disp16sR,recr);

其中disp16sL和disp16sR是归一化之前的视差图,然后对获得的过滤后的视差图进行归一化处理,可以得到更好的结果,置信度图几乎完全是白色的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。