gpt4 book ai didi

c++ - 使用 StereoBM 时视差图中的黑色列

转载 作者:太空狗 更新时间:2023-10-29 23:45:49 26 4
gpt4 key购买 nike

我正在尝试在 OpenCV 中使用 StereoBM 从一对图像中提取视差图。忽略下面的视差图质量不好,你可以看到它的左边有一些黑色的柱子对应于参数 ndisparities。我认为 ndisparities 只告诉 StereoBM 它可以在多远的地方搜索对应关系。什么可能导致这种行为?它似乎限制了生成的深度图的宽度,但我不明白为什么。

Disparity map

您可以看到立体声对 here和我下面的代码。在此先感谢您的指点!

Mat Limg = imread("left.jpg", CV_LOAD_IMAGE_GRAYSCALE);
Mat Rimg = imread("right.jpg", CV_LOAD_IMAGE_GRAYSCALE);

Mat disp(Limg.size(), CV_16SC1), disp8U;
int ndisparities = 512;
StereoBM SBM(StereoBM::BASIC_PRESET, ndisparities , 11);
SBM(Limg, Rimg, disp, CV_16S);

double minVal, maxVal;
minMaxLoc( disp, &minVal, &maxVal );
disp.convertTo( disp8U, CV_8UC1, 255/(maxVal - minVal));
imshow("disparity", disp8U)

最佳答案

视差图量化了左右图像中对应点对之间的纵向(对极)偏移。

原则上,

 disparity := x_l - x_r

其中 x_lx_r 是空间中给定点的两个相机在焦平面上的投影。 (请记住,较大的差异表征了距离相机更近的像素。[A])


参数 ndisparities 量化您可以拥有的预期最大差异(假设您可以忽略最小差异)。

因为您假设 ndisparities 是您最大的差异,所以它成立

    x_l - x_r < ndisparities,

    x_r > x_l - ndisparities 

因此,在左图像的第一个 ndisparities 列中寻找与任何像素的右图像的对应关系是没有意义的:根本不可能。

从某种意义上说,右侧相机的视锥恰好从左侧相机的视锥右侧的 ndisparities 列开始。


修复:

如果您希望差异图左侧的黑色列更少,您需要能够假设ndisparities 的值较低。

由于 ndisparities 取决于距离最近物体(从 [A])的相机的距离,因此要么将相机远离物体,要么将相机彼此靠近。

在你非常具体的情况下,你有一个巨大的差异(stereoBM 需要做很多工作)!!前景中的“x”符号显示出与图像比例相当的差异!!我相信你需要把你的相机放远一点。

关于c++ - 使用 StereoBM 时视差图中的黑色列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15831018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com