立体声整流 - ROI有不同的尺寸

时间:2014-06-13 15:20:22

标签: c++ opencv roi stereoscopy

我做了立体声校准,得到了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裁剪我的图像,那么图片的中间点是否相同?

Here它有效。

enter image description here

3 个答案:

答案 0 :(得分: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);

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

干杯

答案 1 :(得分:1)

根据wiki

  

光轴与像面交叉处的点R.这一点被称为主要点或图像中心。

所以我不认为中心会是一样的。 请参阅this site。在其中一个例子中,对于一个640x480像素的摄像机,主要点是302.71656,242.33386,它表明主点和图像中心不相同。

答案 2 :(得分:1)

在未经过整理的图像上运行块匹配器,然后使用。

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

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

一旦有了视差图,右图就变得无用了。

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