From be1d95b4957fa52b2270cabb50dc5ed2a6502b7f Mon Sep 17 00:00:00 2001 From: Maria Dimashova Date: Tue, 20 Mar 2012 14:41:27 +0000 Subject: [PATCH] added default values of parameters --- .../contrib/include/opencv2/contrib/contrib.hpp | 11 ++++---- modules/contrib/src/rgbdodometry.cpp | 33 ++++++++++++++++++---- 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/modules/contrib/include/opencv2/contrib/contrib.hpp b/modules/contrib/include/opencv2/contrib/contrib.hpp index f27c0c1..8a3f85d 100644 --- a/modules/contrib/include/opencv2/contrib/contrib.hpp +++ b/modules/contrib/include/opencv2/contrib/contrib.hpp @@ -631,14 +631,15 @@ namespace cv * "Real-Time Visual Odometry from Dense RGB-D Images", F. Steinbucker, J. Strum, D. Cremers, ICCV, 2011. */ enum { ROTATION = 1, - TRANSLATION = 2, - RIGID_BODY_MOTION = 4 - }; + TRANSLATION = 2, + RIGID_BODY_MOTION = 4 + }; CV_EXPORTS bool RGBDOdometry( Mat& Rt, const Mat& initRt, const Mat& image0, const Mat& depth0, const Mat& mask0, const Mat& image1, const Mat& depth1, const Mat& mask1, - const Mat& cameraMatrix, float minDepth, float maxDepth, float maxDepthDiff, - const std::vector& iterCounts, const std::vector& minGradientMagnitudes, + const Mat& cameraMatrix, float minDepth=0.f, float maxDepth=4.f, float maxDepthDiff=0.07f, + const std::vector& iterCounts=std::vector(), + const std::vector& minGradientMagnitudes=std::vector(), int transformType=RIGID_BODY_MOTION ); /** diff --git a/modules/contrib/src/rgbdodometry.cpp b/modules/contrib/src/rgbdodometry.cpp index 43eab09..352c1fa 100644 --- a/modules/contrib/src/rgbdodometry.cpp +++ b/modules/contrib/src/rgbdodometry.cpp @@ -499,22 +499,45 @@ bool cv::RGBDOdometry( cv::Mat& Rt, const Mat& initRt, CV_Assert( cameraMatrix.type() == CV_32FC1 && cameraMatrix.size() == Size(3,3) ); // other checks - CV_Assert( !iterCounts.empty() ); - CV_Assert( minGradientMagnitudes.size() == iterCounts.size() ); + CV_Assert( iterCounts.empty() || minGradientMagnitudes.empty() || + minGradientMagnitudes.size() == iterCounts.size() ); CV_Assert( initRt.empty() || (initRt.type()==CV_64FC1 && initRt.size()==Size(4,4) ) ); + vector defaultIterCounts; + vector defaultMinGradMagnitudes; + vector const* iterCountsPtr = &iterCounts; + vector const* minGradientMagnitudesPtr = &minGradientMagnitudes; + + if( iterCounts.empty() || minGradientMagnitudes.empty() ) + { + defaultIterCounts.resize(4); + defaultIterCounts[0] = 7; + defaultIterCounts[1] = 7; + defaultIterCounts[2] = 7; + defaultIterCounts[3] = 10; + + defaultMinGradMagnitudes.resize(4); + defaultMinGradMagnitudes[0] = 12; + defaultMinGradMagnitudes[1] = 5; + defaultMinGradMagnitudes[2] = 3; + defaultMinGradMagnitudes[3] = 1; + + iterCountsPtr = &defaultIterCounts; + minGradientMagnitudesPtr = &defaultMinGradMagnitudes; + } + preprocessDepth( depth0, depth1, validMask0, validMask1, minDepth, maxDepth ); vector pyramidImage0, pyramidDepth0, pyramidImage1, pyramidDepth1, pyramid_dI_dx1, pyramid_dI_dy1, pyramidTexturedMask1, pyramidCameraMatrix; - buildPyramids( image0, image1, depth0, depth1, cameraMatrix, sobelSize, sobelScale, minGradientMagnitudes, + buildPyramids( image0, image1, depth0, depth1, cameraMatrix, sobelSize, sobelScale, *minGradientMagnitudesPtr, pyramidImage0, pyramidDepth0, pyramidImage1, pyramidDepth1, pyramid_dI_dx1, pyramid_dI_dy1, pyramidTexturedMask1, pyramidCameraMatrix ); Mat resultRt = initRt.empty() ? Mat::eye(4,4,CV_64FC1) : initRt.clone(); Mat currRt, ksi; - for( int level = (int)iterCounts.size() - 1; level >= 0; level-- ) + for( int level = (int)iterCountsPtr->size() - 1; level >= 0; level-- ) { const Mat& levelCameraMatrix = pyramidCameraMatrix[level]; @@ -540,7 +563,7 @@ bool cv::RGBDOdometry( cv::Mat& Rt, const Mat& initRt, Mat corresps( levelImage0.size(), levelImage0.type(), CV_32SC1 ); // Run transformation search on current level iteratively. - for( int iter = 0; iter < iterCounts[level]; iter ++ ) + for( int iter = 0; iter < (*iterCountsPtr)[level]; iter ++ ) { int correspsCount = computeCorresp( levelCameraMatrix, levelCameraMatrix.inv(), resultRt.inv(DECOMP_SVD), levelDepth0, levelDepth1, pyramidTexturedMask1[level], maxDepthDiff, -- 2.7.4