removed preset parameter in createStereoBM, updated stereo_match sample

pull/605/head
Vadim Pisarevsky 12 years ago
parent b6efe30527
commit df89f30b4a
  1. 9
      modules/calib3d/include/opencv2/calib3d/calib3d.hpp
  2. 5
      modules/calib3d/src/compat_stereo.cpp
  3. 10
      modules/calib3d/src/stereobm.cpp
  4. 55
      samples/cpp/stereo_match.cpp

@ -677,10 +677,9 @@ public:
OutputArray disparity ) = 0; OutputArray disparity ) = 0;
}; };
enum { STEREO_DISP_SCALE=16, STEREO_PREFILTER_NORMALIZED_RESPONSE = 0, STEREO_PREFILTER_XSOBEL = 1, 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 };
CV_EXPORTS Ptr<StereoMatcher> createStereoBM(int preset, int numDisparities=0, int SADWindowSize=21); CV_EXPORTS Ptr<StereoMatcher> createStereoBM(int numDisparities=0, int SADWindowSize=21);
CV_EXPORTS Ptr<StereoMatcher> createStereoSGBM(int minDisparity, int numDisparities, int SADWindowSize, CV_EXPORTS Ptr<StereoMatcher> createStereoSGBM(int minDisparity, int numDisparities, int SADWindowSize,
int P1=0, int P2=0, int disp12MaxDiff=0, int P1=0, int P2=0, int disp12MaxDiff=0,
@ -695,9 +694,7 @@ class CV_EXPORTS_W StereoBM
{ {
public: public:
enum { PREFILTER_NORMALIZED_RESPONSE = 0, PREFILTER_XSOBEL = 1, enum { PREFILTER_NORMALIZED_RESPONSE = 0, PREFILTER_XSOBEL = 1,
BASIC_PRESET=STEREOBM_BASIC_PRESET, BASIC_PRESET=0, FISH_EYE_PRESET=1, NARROW_PRESET=2 };
FISH_EYE_PRESET=STEREOBM_FISH_EYE_PRESET,
NARROW_PRESET=STEREOBM_NARROW_PRESET };
//! the default constructor //! the default constructor
CV_WRAP StereoBM(); CV_WRAP StereoBM();

@ -95,8 +95,7 @@ void cvFindStereoCorrespondenceBM( const CvArr* leftarr, const CvArr* rightarr,
CV_Assert( state != 0 ); CV_Assert( state != 0 );
cv::Ptr<cv::StereoMatcher> sm = cv::createStereoBM(cv::STEREOBM_BASIC_PRESET, cv::Ptr<cv::StereoMatcher> sm = cv::createStereoBM(state->numberOfDisparities,
state->numberOfDisparities,
state->SADWindowSize); state->SADWindowSize);
sm->set("preFilterType", state->preFilterType); sm->set("preFilterType", state->preFilterType);
sm->set("preFilterSize", state->preFilterSize); sm->set("preFilterSize", state->preFilterSize);
@ -130,7 +129,7 @@ namespace cv
{ {
StereoBM::StereoBM() StereoBM::StereoBM()
{ init(STEREOBM_BASIC_PRESET); } { init(BASIC_PRESET); }
StereoBM::StereoBM(int _preset, int _ndisparities, int _SADWindowSize) StereoBM::StereoBM(int _preset, int _ndisparities, int _SADWindowSize)
{ init(_preset, _ndisparities, _SADWindowSize); } { init(_preset, _ndisparities, _SADWindowSize); }

@ -54,7 +54,7 @@ namespace cv
struct StereoBMParams 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; preFilterType = STEREO_PREFILTER_XSOBEL;
preFilterSize = 9; preFilterSize = 9;
@ -780,9 +780,9 @@ public:
params = StereoBMParams(); 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 ) void compute( InputArray leftarr, InputArray rightarr, OutputArray disparr )
@ -927,9 +927,9 @@ CV_INIT_ALGORITHM(StereoBMImpl, "StereoMatcher.BM",
} }
cv::Ptr<cv::StereoMatcher> cv::createStereoBM(int _preset, int _numDisparities, int _SADWindowSize) cv::Ptr<cv::StereoMatcher> cv::createStereoBM(int _numDisparities, int _SADWindowSize)
{ {
return new StereoBMImpl(_preset, _numDisparities, _SADWindowSize); return new StereoBMImpl(_numDisparities, _SADWindowSize);
} }
/* End of file. */ /* End of file. */

@ -66,8 +66,8 @@ int main(int argc, char** argv)
bool no_display = false; bool no_display = false;
float scale = 1.f; float scale = 1.f;
StereoBM bm; Ptr<StereoMatcher> bm = createStereoBM(16,9);
StereoSGBM sgbm; Ptr<StereoMatcher> sgbm = createStereoSGBM(0,16,3);
StereoVar var; StereoVar var;
for( int i = 1; i < argc; i++ ) 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; numberOfDisparities = numberOfDisparities > 0 ? numberOfDisparities : ((img_size.width/8) + 15) & -16;
bm.state->roi1 = roi1; //bm->set("roi1", roi1);
bm.state->roi2 = roi2; //bm->set("roi2", roi2);
bm.state->preFilterCap = 31; bm->set("preFilterCap", 31);
bm.state->SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 9; bm->set("SADWindowSize", SADWindowSize > 0 ? SADWindowSize : 9);
bm.state->minDisparity = 0; bm->set("minDisparity", 0);
bm.state->numberOfDisparities = numberOfDisparities; bm->set("numDisparities", numberOfDisparities);
bm.state->textureThreshold = 10; bm->set("textureThreshold", 10);
bm.state->uniquenessRatio = 15; bm->set("uniquenessRatio", 15);
bm.state->speckleWindowSize = 100; bm->set("speckleWindowSize", 100);
bm.state->speckleRange = 32; bm->set("speckleRange", 32);
bm.state->disp12MaxDiff = 1; bm->set("disp12MaxDiff", 1);
sgbm.preFilterCap = 63; sgbm->set("preFilterCap", 63);
sgbm.SADWindowSize = SADWindowSize > 0 ? SADWindowSize : 3; int sgbmWinSize = SADWindowSize > 0 ? SADWindowSize : 3;
sgbm->set("SADWindowSize", sgbmWinSize);
int cn = img1.channels(); int cn = img1.channels();
sgbm.P1 = 8*cn*sgbm.SADWindowSize*sgbm.SADWindowSize; sgbm->set("P1", 8*cn*sgbmWinSize*sgbmWinSize);
sgbm.P2 = 32*cn*sgbm.SADWindowSize*sgbm.SADWindowSize; sgbm->set("P2", 32*cn*sgbmWinSize*sgbmWinSize);
sgbm.minDisparity = 0; sgbm->set("minDisparity", 0);
sgbm.numberOfDisparities = numberOfDisparities; sgbm->set("numDisparities", numberOfDisparities);
sgbm.uniquenessRatio = 10; sgbm->set("uniquenessRatio", 10);
sgbm.speckleWindowSize = bm.state->speckleWindowSize; sgbm->set("speckleWindowSize", 100);
sgbm.speckleRange = bm.state->speckleRange; sgbm->set("speckleRange", 32);
sgbm.disp12MaxDiff = 1; sgbm->set("disp12MaxDiff", 1);
sgbm.fullDP = alg == STEREO_HH; sgbm->set("fullDP", alg == STEREO_HH);
var.levels = 3; // ignored with USE_AUTO_PARAMS var.levels = 3; // ignored with USE_AUTO_PARAMS
var.pyrScale = 0.5; // 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(); int64 t = getTickCount();
if( alg == STEREO_BM ) if( alg == STEREO_BM )
bm(img1, img2, disp); bm->compute(img1, img2, disp);
else if( alg == STEREO_VAR ) { else if( alg == STEREO_VAR ) {
var(img1, img2, disp); var(img1, img2, disp);
} }
else if( alg == STEREO_SGBM || alg == STEREO_HH ) else if( alg == STEREO_SGBM || alg == STEREO_HH )
sgbm(img1, img2, disp); sgbm->compute(img1, img2, disp);
t = getTickCount() - t; t = getTickCount() - t;
printf("Time elapsed: %fms\n", t*1000/getTickFrequency()); printf("Time elapsed: %fms\n", t*1000/getTickFrequency());

Loading…
Cancel
Save