1

我已经完成了立体校准,并且得到了 validPixROI1 和 2(绿色边框)。现在我想使用 StereoSGBM 但校准的 rois(来自 stereoRectify)的大小不同。有谁知道如何解决这个问题?

实际上我做了一些链接:

Rect roiLeft(...);
Rect roiRight(...);

Mat cLeft(rLeft, roiLeft);
//Mat cRight(rRight, roiRight); // not same size...
Mat cRight(cRight, roiLeft);

stereoBM(cLeft,cRight, dst);

如果我用那个 roi 裁剪图像,图片中间点会相同吗?

在这里有效。

在此处输入图像描述

4

3 回答 3

2

为什么不在(未裁剪的)校准图像上运行 stereoBM,然后您可以使用这些 ROI 来屏蔽结果的无效位......

   stereoBM(rLeft,rRight, disp);
   //get intersection of both rois or use target image roi, if you know the target image
   cv::Rect visibleRoi = roiLeft & roiRight;
   cv::Mat cDisp(disp,visibleRoi);

现在您对不同大小的输入或不同的中心等没有任何问题。

干杯

于 2014-06-13T17:53:25.253 回答
1

根据维基

光轴与像平面相交处的点 R。该点称为主点或图像中心。

所以我认为中心不会是一样的。参考这个网站。在其中一个示例中,对于 640x480 像素的相机,主点是 302.71656,242.33386,这表明主点和图像中心不相同。

于 2014-06-13T23:17:04.070 回答
1

在未裁剪的校正图像上运行块匹配器,然后使用。

cv::getValidDisparityROI(roi1, roi2, minDisparity, numberOfDisparities, SADWindowSize);

该调用返回一个 cv::Rect,它将成为左侧图像中所有有效像素和视差图的边界框。有效像素只是两个相机都可以“看到”的像素(对遮挡边缘的警告)。

一旦有了视差图,正确的图像就变得毫无用处。

请注意,从 stereoRectify 返回的 roi 只是从相机内在函数重新映射后的有效像素。

于 2017-11-08T01:03:27.057 回答