2

我想创建一个深度图以获得每个像素的 3D 位置,以便我可以在我的图片上获得某些选定项目的 3D 位置。为了查看我的深度数据是否正确,我使用 MeshLab 将其可视化。

我使用 KITTI 数据集的立体数据,因此对图像进行了校正,并提供了每个相机的校准

过程如下:

左图 + 右图 --> 使用立体半全局匹配 (SGBM) 计算视差 --> 使用 cv::reprojectImageTo3D() 计算深度图,Q 已初始化,这要归功于校准参数和此函数:

 cv::stereoRectify(cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imgSize, R, T, R1, R2, P1, P2, Q);

我的问题如下: 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

路还行,但路牌有些变形。我不明白,我试图更改参数但没有成功。我总是有这种扭曲。这很烦人,因为我无法计算出招牌的良好 3D 位置。我也尝试了经典的块匹配,但它是相同的,与半全局匹配相比,结果不是那么好。

但是我的差异看起来像这样(这对我来说似乎很好): 在此处输入图像描述

视差计算的参数如下:

    StereoSGBM sgbm;
    sgbm.SADWindowSize = 3;
    sgbm.numberOfDisparities = 128;
    sgbm.preFilterCap = 10;
    sgbm.minDisparity = 0;
    sgbm.uniquenessRatio = 10.0;
    sgbm.speckleWindowSize = 100;
    sgbm.speckleRange = 32;
    sgbm.disp12MaxDiff = 1;
    sgbm.fullDP = 1;
    sgbm.P1 = sgbm.SADWindowSize*sgbm.SADWindowSize*4;
    sgbm.P2 = sgbm.SADWindowSize*sgbm.SADWindowSize*32;

    sgbm(gray1, gray2, disp);

你知道为什么会这样吗?我该如何解决?我想有一个很好的标志牌表面。

4

1 回答 1

0

您可能可以通过使用 SGBM 参数稍微改善一些情况,但现实情况是立体数据是嘈杂的,您不应该期望在点云中获得完美的平面标志。

如果您有兴趣找到标志的 3D 位置,从 RGB 图像中分割标志并将点云中的相应点平均在一起应该会产生合理的结果。

于 2015-07-09T22:40:20.427 回答