From f40b580bb8852cb5c633224205c024738c0eb8b4 Mon Sep 17 00:00:00 2001 From: sbokov Date: Fri, 17 Jul 2015 17:12:01 +0300 Subject: [PATCH] Fixing StereoSGBM ROI Now StereoSGBM behaves similarly to StereoBM in terms of ROI handling. --- modules/calib3d/src/stereosgbm.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/calib3d/src/stereosgbm.cpp b/modules/calib3d/src/stereosgbm.cpp index afdd05c792..4213a63438 100644 --- a/modules/calib3d/src/stereosgbm.cpp +++ b/modules/calib3d/src/stereosgbm.cpp @@ -111,7 +111,7 @@ struct StereoSGBMParams }; /* - For each pixel row1[x], max(-maxD, 0) <= minX <= x < maxX <= width - max(0, -minD), + For each pixel row1[x], max(maxD, 0) <= minX <= x < maxX <= width - max(0, -minD), and for each disparity minD<=d(y), *row2 = img2.ptr(y); @@ -333,7 +333,7 @@ static void computeDisparitySGBM( const Mat& img1, const Mat& img2, int disp12MaxDiff = params.disp12MaxDiff > 0 ? params.disp12MaxDiff : 1; int P1 = params.P1 > 0 ? params.P1 : 2, P2 = std::max(params.P2 > 0 ? params.P2 : 5, P1+1); int k, width = disp1.cols, height = disp1.rows; - int minX1 = std::max(-maxD, 0), maxX1 = width + std::min(minD, 0); + int minX1 = std::max(maxD, 0), maxX1 = width + std::min(minD, 0); int D = maxD - minD, width1 = maxX1 - minX1; int INVALID_DISP = minD - 1, INVALID_DISP_SCALED = INVALID_DISP*DISP_SCALE; int SW2 = SADWindowSize.width/2, SH2 = SADWindowSize.height/2; @@ -866,7 +866,7 @@ buffers(_buffers), img1(&_img1), img2(&_img2), dst_disp(_dst_disp), clipTab(_cli width = img1->cols; height = img1->rows; minD = params.minDisparity; maxD = minD + params.numDisparities; D = maxD - minD; - minX1 = std::max(-maxD, 0); maxX1 = width + std::min(minD, 0); width1 = maxX1 - minX1; + minX1 = std::max(maxD, 0); maxX1 = width + std::min(minD, 0); width1 = maxX1 - minX1; CV_Assert( D % 16 == 0 ); SW2 = SH2 = params.SADWindowSize > 0 ? params.SADWindowSize/2 : 1;