From df89f30b4a888963d8ccff7889d246ba11e5c495 Mon Sep 17 00:00:00 2001 From: Vadim Pisarevsky Date: Sat, 2 Mar 2013 02:17:49 +0400 Subject: [PATCH] removed preset parameter in createStereoBM, updated stereo_match sample --- .../include/opencv2/calib3d/calib3d.hpp | 9 +-- modules/calib3d/src/compat_stereo.cpp | 5 +- modules/calib3d/src/stereobm.cpp | 10 ++-- samples/cpp/stereo_match.cpp | 55 ++++++++++--------- 4 files changed, 38 insertions(+), 41 deletions(-) diff --git a/modules/calib3d/include/opencv2/calib3d/calib3d.hpp b/modules/calib3d/include/opencv2/calib3d/calib3d.hpp index 4a67d4bd03..701f1ecb04 100644 --- a/modules/calib3d/include/opencv2/calib3d/calib3d.hpp +++ b/modules/calib3d/include/opencv2/calib3d/calib3d.hpp @@ -677,10 +677,9 @@ public: OutputArray disparity ) = 0; }; -enum { STEREO_DISP_SCALE=16, STEREO_PREFILTER_NORMALIZED_RESPONSE = 0, STEREO_PREFILTER_XSOBEL = 1, - STEREOBM_BASIC_PRESET=0, STEREOBM_FISH_EYE_PRESET=1, STEREOBM_NARROW_PRESET=2 }; +enum { STEREO_DISP_SCALE=16, STEREO_PREFILTER_NORMALIZED_RESPONSE = 0, STEREO_PREFILTER_XSOBEL = 1 }; -CV_EXPORTS Ptr createStereoBM(int preset, int numDisparities=0, int SADWindowSize=21); +CV_EXPORTS Ptr createStereoBM(int numDisparities=0, int SADWindowSize=21); CV_EXPORTS Ptr createStereoSGBM(int minDisparity, int numDisparities, int SADWindowSize, int P1=0, int P2=0, int disp12MaxDiff=0, @@ -695,9 +694,7 @@ class CV_EXPORTS_W StereoBM { public: enum { PREFILTER_NORMALIZED_RESPONSE = 0, PREFILTER_XSOBEL = 1, - BASIC_PRESET=STEREOBM_BASIC_PRESET, - FISH_EYE_PRESET=STEREOBM_FISH_EYE_PRESET, - NARROW_PRESET=STEREOBM_NARROW_PRESET }; + BASIC_PRESET=0, FISH_EYE_PRESET=1, NARROW_PRESET=2 }; //! the default constructor CV_WRAP StereoBM(); diff --git a/modules/calib3d/src/compat_stereo.cpp b/modules/calib3d/src/compat_stereo.cpp index 58ee04804d..7b9ed33e41 100644 --- a/modules/calib3d/src/compat_stereo.cpp +++ b/modules/calib3d/src/compat_stereo.cpp @@ -95,8 +95,7 @@ void cvFindStereoCorrespondenceBM( const CvArr* leftarr, const CvArr* rightarr, CV_Assert( state != 0 ); - cv::Ptr sm = cv::createStereoBM(cv::STEREOBM_BASIC_PRESET, - state->numberOfDisparities, + cv::Ptr sm = cv::createStereoBM(state->numberOfDisparities, state->SADWindowSize); sm->set("preFilterType", state->preFilterType); sm->set("preFilterSize", state->preFilterSize); @@ -130,7 +129,7 @@ namespace cv { StereoBM::StereoBM() -{ init(STEREOBM_BASIC_PRESET); } +{ init(BASIC_PRESET); } StereoBM::StereoBM(int _preset, int _ndisparities, int _SADWindowSize) { init(_preset, _ndisparities, _SADWindowSize); } diff --git a/modules/calib3d/src/stereobm.cpp b/modules/calib3d/src/stereobm.cpp index a70ecc1d36..158881bd94 100644 --- a/modules/calib3d/src/stereobm.cpp +++ b/modules/calib3d/src/stereobm.cpp @@ -54,7 +54,7 @@ namespace cv struct StereoBMParams { - StereoBMParams(int _preset=STEREOBM_BASIC_PRESET, int _numDisparities=64, int _SADWindowSize=21) + StereoBMParams(int _numDisparities=64, int _SADWindowSize=21) { preFilterType = STEREO_PREFILTER_XSOBEL; preFilterSize = 9; @@ -780,9 +780,9 @@ public: params = StereoBMParams(); } - StereoBMImpl( int _preset, int _numDisparities, int _SADWindowSize ) + StereoBMImpl( int _numDisparities, int _SADWindowSize ) { - params = StereoBMParams(_preset, _numDisparities, _SADWindowSize); + params = StereoBMParams(_numDisparities, _SADWindowSize); } void compute( InputArray leftarr, InputArray rightarr, OutputArray disparr ) @@ -927,9 +927,9 @@ CV_INIT_ALGORITHM(StereoBMImpl, "StereoMatcher.BM", } -cv::Ptr cv::createStereoBM(int _preset, int _numDisparities, int _SADWindowSize) +cv::Ptr cv::createStereoBM(int _numDisparities, int _SADWindowSize) { - return new StereoBMImpl(_preset, _numDisparities, _SADWindowSize); + return new StereoBMImpl(_numDisparities, _SADWindowSize); } /* End of file. */ diff --git a/samples/cpp/stereo_match.cpp b/samples/cpp/stereo_match.cpp index 8dc42195e8..7e1f6cb687 100644 --- a/samples/cpp/stereo_match.cpp +++ b/samples/cpp/stereo_match.cpp @@ -66,8 +66,8 @@ int main(int argc, char** argv) bool no_display = false; float scale = 1.f; - StereoBM bm; - StereoSGBM sgbm; + Ptr bm = createStereoBM(16,9); + Ptr sgbm = createStereoSGBM(0,16,3); StereoVar var; for( int i = 1; i < argc; i++ ) @@ -220,32 +220,33 @@ int main(int argc, char** argv) numberOfDisparities = numberOfDisparities > 0 ? numberOfDisparities : ((img_size.width/8) + 15) & -16; - bm.state->roi1 = roi1; - bm.state->roi2 = roi2; - bm.state->preFilterCap = 31; - bm.state->SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 9; - bm.state->minDisparity = 0; - bm.state->numberOfDisparities = numberOfDisparities; - bm.state->textureThreshold = 10; - bm.state->uniquenessRatio = 15; - bm.state->speckleWindowSize = 100; - bm.state->speckleRange = 32; - bm.state->disp12MaxDiff = 1; - - sgbm.preFilterCap = 63; - sgbm.SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 3; + //bm->set("roi1", roi1); + //bm->set("roi2", roi2); + bm->set("preFilterCap", 31); + bm->set("SADWindowSize", SADWindowSize > 0 ? SADWindowSize : 9); + bm->set("minDisparity", 0); + bm->set("numDisparities", numberOfDisparities); + bm->set("textureThreshold", 10); + bm->set("uniquenessRatio", 15); + bm->set("speckleWindowSize", 100); + bm->set("speckleRange", 32); + bm->set("disp12MaxDiff", 1); + + sgbm->set("preFilterCap", 63); + int sgbmWinSize = SADWindowSize > 0 ? SADWindowSize : 3; + sgbm->set("SADWindowSize", sgbmWinSize); int cn = img1.channels(); - sgbm.P1 = 8*cn*sgbm.SADWindowSize*sgbm.SADWindowSize; - sgbm.P2 = 32*cn*sgbm.SADWindowSize*sgbm.SADWindowSize; - sgbm.minDisparity = 0; - sgbm.numberOfDisparities = numberOfDisparities; - sgbm.uniquenessRatio = 10; - sgbm.speckleWindowSize = bm.state->speckleWindowSize; - sgbm.speckleRange = bm.state->speckleRange; - sgbm.disp12MaxDiff = 1; - sgbm.fullDP = alg == STEREO_HH; + sgbm->set("P1", 8*cn*sgbmWinSize*sgbmWinSize); + sgbm->set("P2", 32*cn*sgbmWinSize*sgbmWinSize); + sgbm->set("minDisparity", 0); + sgbm->set("numDisparities", numberOfDisparities); + sgbm->set("uniquenessRatio", 10); + sgbm->set("speckleWindowSize", 100); + sgbm->set("speckleRange", 32); + sgbm->set("disp12MaxDiff", 1); + sgbm->set("fullDP", alg == STEREO_HH); var.levels = 3; // ignored with USE_AUTO_PARAMS var.pyrScale = 0.5; // ignored with USE_AUTO_PARAMS @@ -267,12 +268,12 @@ int main(int argc, char** argv) int64 t = getTickCount(); if( alg == STEREO_BM ) - bm(img1, img2, disp); + bm->compute(img1, img2, disp); else if( alg == STEREO_VAR ) { var(img1, img2, disp); } else if( alg == STEREO_SGBM || alg == STEREO_HH ) - sgbm(img1, img2, disp); + sgbm->compute(img1, img2, disp); t = getTickCount() - t; printf("Time elapsed: %fms\n", t*1000/getTickFrequency()); -- GitLab