From c17afe0fab61bb11452b36fb94eaeb405293e086 Mon Sep 17 00:00:00 2001 From: Jiri Horner Date: Sat, 22 Oct 2016 18:10:42 +0200 Subject: [PATCH] Merge pull request #6933 from hrnr:gsoc_all MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [GSOC] New camera model for stitching pipeline * implement estimateAffine2D estimates affine transformation using robust RANSAC method. * uses RANSAC framework in calib3d * includes accuracy test * uses SVD decomposition for solving 3 point equation * implement estimateAffinePartial2D estimates limited affine transformation * includes accuracy test * stitching: add affine matcher initial version of matcher that estimates affine transformation * stitching: added affine transform estimator initial version of estimator that simply chain transformations in homogeneous coordinates * calib3d: rename estimateAffine3D test test Calib3d_EstimateAffineTransform rename to Calib3d_EstimateAffine3D. This is more descriptive and prevents confusion with estimateAffine2D tests. * added perf test for estimateAffine functions tests both estimateAffine2D and estimateAffinePartial2D * calib3d: compare error in square in estimateAffine2D * incorporates fix from #6768 * rerun affine estimation on inliers * stitching: new API for parallel feature finding due to ABI breakage new functionality is added to `FeaturesFinder2`, `SurfFeaturesFinder2` and `OrbFeaturesFinder2` * stitching: add tests for parallel feature find API * perf test (about linear speed up) * accuracy test compares results with serial version * stitching: use dynamic_cast to overcome ABI issues adding parallel API to FeaturesFinder breaks ABI. This commit uses dynamic_cast and hardcodes thread-safe finders to avoid breaking ABI. This should be replaced by proper method similar to FeaturesMatcher on next ABI break. * use estimateAffinePartial2D in AffineBestOf2NearestMatcher * add constructor to AffineBestOf2NearestMatcher * allows to choose between full affine transform and partial affine transform. Other params are the as for BestOf2NearestMatcher * added protected field * samples: stitching_detailed support affine estimator and matcher * added new flags to choose matcher and estimator * stitching: rework affine matcher represent transformation in homogeneous coordinates affine matcher: remove duplicite code rework flow to get rid of duplicite code affine matcher: do not center points to (0, 0) it is not needed for affine model. it should not affect estimation in any way. affine matcher: remove unneeded cv namespacing * stitching: add stub bundle adjuster * adds stub bundle adjuster that does nothing * can be used in place of standard bundle adjusters to omit bundle adjusting step * samples: stitching detailed, support no budle adjust * uses new NoBundleAdjuster * added affine warper * uses R to get whole affine transformation and propagates rotation and translation to plane warper * add affine warper factory class * affine warper: compensate transformation * samples: stitching_detailed add support for affine warper * add Stitcher::create method this method follows similar constructor methods and returns smart pointer. This allows constructing Stitcher according to OpenCV guidelines. * supports multiple stitcher configurations (PANORAMA and SCANS) for convenient setup * returns cv::Ptr * stitcher: dynamicaly determine correct estimator we need to use affine estimator for affine matcher * preserves ABI (but add hints for ABI 4) * uses dynamic_cast hack to inject correct estimator * sample stitching: add support for multiple modes shows how to use different configurations of stitcher easily (panorama stitching and scans affine model) * stitcher: find features in parallel use new FeatureFinder API to find features in parallel. Parallelized using TBB. * stitching: disable parallel feature finding for OCL it does not bring much speedup to run features finder in parallel when OpenCL is enabled, because finder needs to wait for OCL device. Also, currently ORB is not thread-safe when OCL is enabled. * stitching: move matcher tests move matchers tests perf_stich.cpp -> perf_matchers.cpp * stitching: add affine stiching integration test test basic affine stitching (SCANS mode of stitcher) with images that have only translation between them * enable surf for stitching tests stitching.b12 test was failing with surf investigated the issue, surf is producing good result. Transformation is only slightly different from ORB, so that resulting pano does not exactly match ORB's result. That caused sanity check to fail. * added size checks similar to other tests * sanity check will be applied only for ORB * stitching: fix wrong estimator choice if case was exactly wrong, estimators were chosen wrong added logging for estimated transformation * enable surf for matchers stitching tests * enable SURF * rework sanity checking. Check estimated transform instead of matches. Est. transform should be more stable and comparable between SURF and ORB. * remove regression checking for VectorFeatures tests. It has a lot if data andtest is the same as previous except it test different vector size for performance, so sanity checking does not add any value here. Added basic sanity asserts instead. * stitching tests: allow relative error for transform * allows .01 relative error for estimated homography sanity check in stitching matchers tests * fix VS warning stitching tests: increase relative error increase relative error to make it pass on all platforms (results are still good). stitching test: allow bigger relative error transformation can differ in small values (with small absolute difference, but large relative difference). transformation output still looks usable for all platforms. This difference affects only mac and windows, linux passes fine with small difference. * stitching: add tests for affine matcher uses s1, s2 images. added also new sanity data. * stitching tests: use different data for matchers tests this data should yeild more stable transformation (it has much more matches, especially for surf). Sanity data regenerated. * stitching test: rework tests for matchers * separated rotation and translations as they are different by scale. * use appropriate absolute error for them separately. (relative error does not work for values near zero.) * stitching: fix affine warper compensation calculation of rotation and translation extracted for plane warper was wrong * stitching test: enable surf for opencl integration tests * enable SURF with correct guard (HAVE_OPENCV_XFEATURES2D) * add OPENCL guard and correct namespace as usual for opencl tests * stitching: add ocl accuracy test for affine warper test consistent results with ocl on and off * stitching: add affine warper ocl perf test add affine warper to existing warper perf tests. Added new sanity data. * stitching: do not overwrite inliers in affine matcher * estimation is run second time on inliers only, inliers produces in second run will not be therefore correct for all matches * calib3d: add Levenberg–Marquardt refining to estimateAffine2D* functions this adds affine Levenberg–Marquardt refining to estimateAffine2D functions similar to what is done in findHomography. implements Levenberg–Marquardt refinig for both full affine and partial affine transformations. * stitching: remove reestimation step in affine matcher reestimation step is not needed. estimateAffine2D* functions are running their own reestimation on inliers using the Levenberg-Marquardt algorithm, which is better than simply rerunning RANSAC on inliers. * implement partial affine bundle adjuster bundle adjuster that expect affine transform with 4DOF. Refines parameters for all cameras together. stitching: fix bug in BundleAdjusterAffinePartial * use the invers properly * use static buffer for invers to speed it up * samples: add affine bundle adjuster option to stitching_detailed * add support for using affine bundle adjuster with 4DOF * improve logging of initial intristics * sttiching: add affine bundle adjuster test * fix build warnings * stitching: increase limit on sanity check prevents spurious test failures on mac. values are still pretty fine. * stitching: set affine bundle adjuster for SCANS mode * fix bug with AffineBestOf2NearestMatcher (we want to select affine partial mode) * select right bundle adjuster * stitching: increase error bound for matcher tests * this prevents failure on mac. tranformation is still ok. * stitching: implement affine bundle adjuster * implements affine bundle adjuster that is using full affine transform * existing test case modified to test both affinePartial an full affine bundle adjuster * add stitching tutorial * show basic usage of stitching api (Stitcher class) * stitching: add more integration test for affine stitching * added new datasets to existing testcase * removed unused include * calib3d: move `haveCollinearPoints` to common header * added comment to make that this also checks too close points * calib3d: redone checkSubset for estimateAffine* callback * use common function to check collinearity * this also ensures that point will not be too close to each other * calib3d: change estimateAffine* functions API * more similar to `findHomography`, `findFundamentalMat`, `findEssentialMat` and similar * follows standard recommended semantic INPUTS, OUTPUTS, FLAGS * allows to disable refining * supported LMEDS robust method (tests yet to come) along with RANSAC * extended docs with some tips * calib3d: rewrite estimateAffine2D test * rewrite in googletest style * parametrize to test both robust methods (RANSAC and LMEDS) * get rid of boilerplate * calib3d: rework estimateAffinePartial2D test * rework in googletest style * add testing for LMEDS * calib3d: rework estimateAffine*2D perf test * test for LMEDS speed * test with/without Levenberg-Marquart * remove sanity checking (this is covered by accuracy tests) * calib3d: improve estimateAffine*2D tests * test transformations in loop * improves test by testing more potential transformations * calib3d: rewrite kernels for estimateAffine*2D functions * use analytical solution instead of SVD * this version is faster especially for smaller amount of points * calib3d: tune up perf of estimateAffine*2D functions * avoid copying inliers * avoid converting input points if not necessary * check only `from` point for collinearity, as `to` does not affect stability of transform * tutorials: add commands examples to stitching tutorials * add some examples how to run stitcher sample code * mention stitching_detailed.cpp * calib3d: change computeError for estimateAffine*2D * do error computing in floats instead of doubles this have required precision + we were storing the result in float anyway. This make code faster and allows auto-vectorization by smart compilers. * documentation: mention estimateAffine*2D function * refer to new functions on appropriate places * prefer estimateAffine*2D over estimateRigidTransform * stitching: add camera models documentations * mention camera models in module documentation to give user a better overview and reduce confusion --- .../stitching/stitcher/images/boat.jpg | Bin 0 -> 75172 bytes .../stitching/stitcher/images/budapest.jpg | Bin 0 -> 131409 bytes .../stitching/stitcher/images/newspaper.jpg | Bin 0 -> 129493 bytes .../stitching/stitcher/stitcher.markdown | 115 +++++ .../table_of_content_stitching.markdown | 15 + doc/tutorials/tutorials.markdown | 4 + modules/calib3d/include/opencv2/calib3d.hpp | 92 +++- modules/calib3d/perf/perf_affine2d.cpp | 170 +++++++ modules/calib3d/src/fundam.cpp | 23 - modules/calib3d/src/precomp.hpp | 23 + modules/calib3d/src/ptsetreg.cpp | 420 +++++++++++++++++- .../calib3d/test/test_affine2d_estimator.cpp | 130 ++++++ .../calib3d/test/test_affine3d_estimator.cpp | 2 +- .../test/test_affine_partial2d_estimator.cpp | 140 ++++++ modules/core/include/opencv2/core.hpp | 2 +- .../stitching/include/opencv2/stitching.hpp | 59 ++- .../opencv2/stitching/detail/matchers.hpp | 65 ++- .../stitching/detail/motion_estimators.hpp | 83 ++++ .../opencv2/stitching/detail/warpers.hpp | 28 ++ .../include/opencv2/stitching/warpers.hpp | 9 + modules/stitching/perf/opencl/perf_stitch.cpp | 12 +- .../stitching/perf/opencl/perf_warpers.cpp | 7 +- modules/stitching/perf/perf_estimators.cpp | 100 +++++ modules/stitching/perf/perf_matchers.cpp | 301 +++++++++++++ modules/stitching/perf/perf_stich.cpp | 187 ++++---- modules/stitching/src/matchers.cpp | 130 ++++++ modules/stitching/src/motion_estimators.cpp | 284 ++++++++++++ modules/stitching/src/stitcher.cpp | 59 ++- modules/stitching/src/warpers.cpp | 52 +++ modules/stitching/test/ocl/test_warpers.cpp | 21 + modules/stitching/test/test_matchers.cpp | 29 +- .../video/include/opencv2/video/tracking.hpp | 4 +- samples/cpp/stitching.cpp | 24 +- samples/cpp/stitching_detailed.cpp | 69 ++- 34 files changed, 2486 insertions(+), 173 deletions(-) create mode 100644 doc/tutorials/stitching/stitcher/images/boat.jpg create mode 100644 doc/tutorials/stitching/stitcher/images/budapest.jpg create mode 100644 doc/tutorials/stitching/stitcher/images/newspaper.jpg create mode 100644 doc/tutorials/stitching/stitcher/stitcher.markdown create mode 100644 doc/tutorials/stitching/table_of_content_stitching.markdown create mode 100644 modules/calib3d/perf/perf_affine2d.cpp create mode 100644 modules/calib3d/test/test_affine2d_estimator.cpp create mode 100644 modules/calib3d/test/test_affine_partial2d_estimator.cpp create mode 100644 modules/stitching/perf/perf_estimators.cpp create mode 100644 modules/stitching/perf/perf_matchers.cpp diff --git a/doc/tutorials/stitching/stitcher/images/boat.jpg b/doc/tutorials/stitching/stitcher/images/boat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..da8dd48e62fee672c9ce4ccaa3efb64b382782b5 GIT binary patch literal 75172 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
  • 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 }c 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�-5@&Tw!IXg(?Wb_l( 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 literal 0 HcmV?d00001 diff --git a/doc/tutorials/stitching/stitcher/images/newspaper.jpg b/doc/tutorials/stitching/stitcher/images/newspaper.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eff7c51f14916f231e1dc24a5a793ceee533206a GIT binary patch literal 129493 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%0A(t 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 stitcher = Stitcher::create(mode, try_use_gpu); +Stitcher::Status status = stitcher->stitch(imgs, pano); + +if (status != Stitcher::OK) +{ + cout << "Can't stitch images, error code = " << int(status) << endl; + return -1; +} +@endcode + +A new instance of stitcher is created and the @ref cv::Stitcher::stitch will +do all the hard work. + +@ref cv::Stitcher::create can create stitcher in one of the predefined +configurations (argument `mode`). See @ref cv::Stitcher::Mode for details. These +configurations will setup multiple stitcher properties to operate in one of +predefined scenarios. After you create stitcher in one of predefined +configurations you can adjust stitching by setting any of the stitcher +properties. + +If you have cuda device @ref cv::Stitcher can be configured to offload certain +operations to GPU. If you prefer this configuration set `try_use_gpu` to true. +OpenCL acceleration will be used transparently based on global OpenCV settings +regardless of this flag. + +Stitching might fail for several reasons, you should always check if +everything went good and resulting pano is stored in `pano`. See +@ref cv::Stitcher::Status documentation for possible error codes. + +Camera models +------------- + +There are currently 2 camera models implemented in stitching pipeline. + +- _Homography model_ expecting perspective transformations between images + implemented in @ref cv::detail::BestOf2NearestMatcher cv::detail::HomographyBasedEstimator + cv::detail::BundleAdjusterReproj cv::detail::BundleAdjusterRay +- _Affine model_ expecting affine transformation with 6 DOF or 4 DOF implemented in + @ref cv::detail::AffineBestOf2NearestMatcher cv::detail::AffineBasedEstimator + cv::detail::BundleAdjusterAffine cv::detail::BundleAdjusterAffinePartial cv::AffineWarper + +Homography model is useful for creating photo panoramas captured by camera, +while affine-based model can be used to stitch scans and object captured by +specialized devices. + +@note +Certain detailed settings of @ref cv::Stitcher might not make sense. Especially +you should not mix classes implementing affine model and classes implementing +Homography model, as they work with different transformations. + +Try it out +---------- + +If you enabled building samples you can found binary under +`build/bin/cpp-example-stitching`. This example is a console application, run it without +arguments to see help. `opencv_extra` provides some sample data for testing all available +configurations. + +to try panorama mode run: +``` +./cpp-example-stitching --mode panorama /testdata/stitching/boat* +``` +![](images/boat.jpg) + +to try scans mode run (dataset from home-grade scanner): +``` +./cpp-example-stitching --mode scans /testdata/stitching/newspaper* +``` +![](images/newspaper.jpg) + +or (dataset from professional book scanner): +``` +./cpp-example-stitching --mode scans /testdata/stitching/budapest* +``` +![](images/budapest.jpg) + +@note +Examples above expects POSIX platform, on windows you have to provide all files names explicitly +(e.g. `boat1.jpg` `boat2.jpg`...) as windows command line does not support `*` expansion. + +See also +-------- + +If you want to study internals of the stitching pipeline or you want to experiment with detailed +configuration see +[stitching_detailed.cpp](https://github.com/opencv/opencv/tree/master/samples/cpp/stitching_detailed.cpp) +in `opencv/samples/cpp` folder. diff --git a/doc/tutorials/stitching/table_of_content_stitching.markdown b/doc/tutorials/stitching/table_of_content_stitching.markdown new file mode 100644 index 0000000000..d85571cd7e --- /dev/null +++ b/doc/tutorials/stitching/table_of_content_stitching.markdown @@ -0,0 +1,15 @@ +Images stitching (stitching module) {#tutorial_table_of_content_stitching} +=================================== + +Sometimes a single image can't capture it all. Here you will learn how to join +more images together to create a large pano. Doesn't matter if you want to +create a photo panorama or you want to stitch scans. + +- @subpage tutorial_stitcher + + *Compatibility:* \>= OpenCV 3.2 + + *Author:* Jiri Horner + + You will use high level stitching api to create a photo panorama. You will + learn about Stitcher class and its configurations. diff --git a/doc/tutorials/tutorials.markdown b/doc/tutorials/tutorials.markdown index 9319217772..1f1a7e9f98 100644 --- a/doc/tutorials/tutorials.markdown +++ b/doc/tutorials/tutorials.markdown @@ -68,6 +68,10 @@ As always, we would be happy to hear your comments and receive your contribution Use OpenCV for advanced photo processing. +- @subpage tutorial_table_of_content_stitching + + Learn how to create beautiful photo panoramas and more with OpenCV stitching pipeline. + - @subpage tutorial_table_of_content_gpu Squeeze out every diff --git a/modules/calib3d/include/opencv2/calib3d.hpp b/modules/calib3d/include/opencv2/calib3d.hpp index e5d3b1cc74..6c61e6a854 100644 --- a/modules/calib3d/include/opencv2/calib3d.hpp +++ b/modules/calib3d/include/opencv2/calib3d.hpp @@ -360,8 +360,9 @@ determined up to a scale. Thus, it is normalized so that \f$h_{33}=1\f$. Note th cannot be estimated, an empty one will be returned. @sa - getAffineTransform, getPerspectiveTransform, estimateRigidTransform, warpPerspective, - perspectiveTransform +getAffineTransform, estimateAffine2D, estimateAffinePartial2D, getPerspectiveTransform, warpPerspective, +perspectiveTransform + @note - A example on calculating a homography for image matching can be found at @@ -1583,6 +1584,93 @@ CV_EXPORTS_W int estimateAffine3D(InputArray src, InputArray dst, OutputArray out, OutputArray inliers, double ransacThreshold = 3, double confidence = 0.99); +/** @brief Computes an optimal affine transformation between two 2D point sets. + +@param from First input 2D point set. +@param to Second input 2D point set. +@param inliers Output vector indicating which points are inliers. +@param method Robust method used to compute tranformation. The following methods are possible: +- cv::RANSAC - RANSAC-based robust method +- cv::LMEDS - Least-Median robust method +RANSAC is the default method. +@param ransacReprojThreshold Maximum reprojection error in the RANSAC algorithm to consider +a point as an inlier. Applies only to RANSAC. +@param maxIters The maximum number of robust method iterations, 2000 is the maximum it can be. +@param confidence Confidence level, between 0 and 1, for the estimated transformation. Anything +between 0.95 and 0.99 is usually good enough. Values too close to 1 can slow down the estimation +significantly. Values lower than 0.8-0.9 can result in an incorrectly estimated transformation. +@param refineIters Maximum number of iterations of refining algorithm (Levenberg-Marquardt). +Passing 0 will disable refining, so the output matrix will be output of robust method. + +@return Output 2D affine transformation matrix \f$2 \times 3\f$ or empty matrix if transformation +could not be estimated. + +The function estimates an optimal 2D affine transformation between two 2D point sets using the +selected robust algorithm. + +The computed transformation is then refined further (using only inliers) with the +Levenberg-Marquardt method to reduce the re-projection error even more. + +@note +The RANSAC method can handle practically any ratio of outliers but need a threshold to +distinguish inliers from outliers. The method LMeDS does not need any threshold but it works +correctly only when there are more than 50% of inliers. + +@sa estimateAffinePartial2D, getAffineTransform +*/ +CV_EXPORTS_W cv::Mat estimateAffine2D(InputArray from, InputArray to, OutputArray inliers = noArray(), + int method = RANSAC, double ransacReprojThreshold = 3, + size_t maxIters = 2000, double confidence = 0.99, + size_t refineIters = 10); + +/** @brief Computes an optimal limited affine transformation with 4 degrees of freedom between +two 2D point sets. + +@param from First input 2D point set. +@param to Second input 2D point set. +@param inliers Output vector indicating which points are inliers. +@param method Robust method used to compute tranformation. The following methods are possible: +- cv::RANSAC - RANSAC-based robust method +- cv::LMEDS - Least-Median robust method +RANSAC is the default method. +@param ransacReprojThreshold Maximum reprojection error in the RANSAC algorithm to consider +a point as an inlier. Applies only to RANSAC. +@param maxIters The maximum number of robust method iterations, 2000 is the maximum it can be. +@param confidence Confidence level, between 0 and 1, for the estimated transformation. Anything +between 0.95 and 0.99 is usually good enough. Values too close to 1 can slow down the estimation +significantly. Values lower than 0.8-0.9 can result in an incorrectly estimated transformation. +@param refineIters Maximum number of iterations of refining algorithm (Levenberg-Marquardt). +Passing 0 will disable refining, so the output matrix will be output of robust method. + +@return Output 2D affine transformation (4 degrees of freedom) matrix \f$2 \times 3\f$ or +empty matrix if transformation could not be estimated. + +The function estimates an optimal 2D affine transformation with 4 degrees of freedom limited to +combinations of translation, rotation, and uniform scaling. Uses the selected algorithm for robust +estimation. + +The computed transformation is then refined further (using only inliers) with the +Levenberg-Marquardt method to reduce the re-projection error even more. + +Estimated transformation matrix is: +\f[ \begin{bmatrix} \cos(\theta)s & -\sin(\theta)s & tx \\ + \sin(\theta)s & \cos(\theta)s & ty +\end{bmatrix} \f] +Where \f$ \theta \f$ is the rotation angle, \f$ s \f$ the scaling factor and \f$ tx, ty \f$ are +translations in \f$ x, y \f$ axes respectively. + +@note +The RANSAC method can handle practically any ratio of outliers but need a threshold to +distinguish inliers from outliers. The method LMeDS does not need any threshold but it works +correctly only when there are more than 50% of inliers. + +@sa estimateAffine2D, getAffineTransform +*/ +CV_EXPORTS_W cv::Mat estimateAffinePartial2D(InputArray from, InputArray to, OutputArray inliers = noArray(), + int method = RANSAC, double ransacReprojThreshold = 3, + size_t maxIters = 2000, double confidence = 0.99, + size_t refineIters = 10); + /** @brief Decompose a homography matrix to rotation(s), translation(s) and plane normal(s). @param H The input homography matrix between two images. diff --git a/modules/calib3d/perf/perf_affine2d.cpp b/modules/calib3d/perf/perf_affine2d.cpp new file mode 100644 index 0000000000..b893c39840 --- /dev/null +++ b/modules/calib3d/perf/perf_affine2d.cpp @@ -0,0 +1,170 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// (3-clause BSD License) +// +// Copyright (C) 2015-2016, OpenCV Foundation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * Neither the names of the copyright holders nor the names of the contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall copyright holders or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "perf_precomp.hpp" +#include +#include + +namespace cvtest +{ + +using std::tr1::tuple; +using std::tr1::get; +using namespace perf; +using namespace testing; +using namespace cv; + +CV_ENUM(Method, RANSAC, LMEDS) +typedef tuple AffineParams; +typedef TestBaseWithParam EstimateAffine; +#define ESTIMATE_PARAMS Combine(Values(100000, 5000, 100), Values(0.99, 0.95, 0.9), Method::all(), Values(10, 0)) + +static float rngIn(float from, float to) { return from + (to-from) * (float)theRNG(); } + +static Mat rngPartialAffMat() { + double theta = rngIn(0, (float)CV_PI*2.f); + double scale = rngIn(0, 3); + double tx = rngIn(-2, 2); + double ty = rngIn(-2, 2); + double aff[2*3] = { std::cos(theta) * scale, -std::sin(theta) * scale, tx, + std::sin(theta) * scale, std::cos(theta) * scale, ty }; + return Mat(2, 3, CV_64F, aff).clone(); +} + +PERF_TEST_P( EstimateAffine, EstimateAffine2D, ESTIMATE_PARAMS ) +{ + AffineParams params = GetParam(); + const int n = get<0>(params); + const double confidence = get<1>(params); + const int method = get<2>(params); + const size_t refining = get<3>(params); + + Mat aff(2, 3, CV_64F); + cv::randu(aff, -2., 2.); + + // LMEDS can't handle more than 50% outliers (by design) + int m; + if (method == LMEDS) + m = 3*n/5; + else + m = 2*n/5; + const float shift_outl = 15.f; + const float noise_level = 20.f; + + Mat fpts(1, n, CV_32FC2); + Mat tpts(1, n, CV_32FC2); + + randu(fpts, 0., 100.); + transform(fpts, tpts, aff); + + /* adding noise to some points */ + Mat outliers = tpts.colRange(m, n); + outliers.reshape(1) += shift_outl; + + Mat noise (outliers.size(), outliers.type()); + randu(noise, 0., noise_level); + outliers += noise; + + Mat aff_est; + vector inliers (n); + + warmup(inliers, WARMUP_WRITE); + warmup(fpts, WARMUP_READ); + warmup(tpts, WARMUP_READ); + + TEST_CYCLE() + { + aff_est = estimateAffine2D(fpts, tpts, inliers, method, 3, 2000, confidence, refining); + } + + // we already have accuracy tests + SANITY_CHECK_NOTHING(); +} + +PERF_TEST_P( EstimateAffine, EstimateAffinePartial2D, ESTIMATE_PARAMS ) +{ + AffineParams params = GetParam(); + const int n = get<0>(params); + const double confidence = get<1>(params); + const int method = get<2>(params); + const size_t refining = get<3>(params); + + Mat aff = rngPartialAffMat(); + + int m; + // LMEDS can't handle more than 50% outliers (by design) + if (method == LMEDS) + m = 3*n/5; + else + m = 2*n/5; + const float shift_outl = 15.f; const float noise_level = 20.f; + + Mat fpts(1, n, CV_32FC2); + Mat tpts(1, n, CV_32FC2); + + randu(fpts, 0., 100.); + transform(fpts, tpts, aff); + + /* adding noise*/ + Mat outliers = tpts.colRange(m, n); + outliers.reshape(1) += shift_outl; + + Mat noise (outliers.size(), outliers.type()); + randu(noise, 0., noise_level); + outliers += noise; + + Mat aff_est; + vector inliers (n); + + warmup(inliers, WARMUP_WRITE); + warmup(fpts, WARMUP_READ); + warmup(tpts, WARMUP_READ); + + TEST_CYCLE() + { + aff_est = estimateAffinePartial2D(fpts, tpts, inliers, method, 3, 2000, confidence, refining); + } + + // we already have accuracy tests + SANITY_CHECK_NOTHING(); +} + +} // namespace cvtest diff --git a/modules/calib3d/src/fundam.cpp b/modules/calib3d/src/fundam.cpp index cdcbeadd77..9af70dd210 100644 --- a/modules/calib3d/src/fundam.cpp +++ b/modules/calib3d/src/fundam.cpp @@ -47,29 +47,6 @@ namespace cv { -static bool haveCollinearPoints( const Mat& m, int count ) -{ - int j, k, i = count-1; - const Point2f* ptr = m.ptr(); - - // check that the i-th selected point does not belong - // to a line connecting some previously selected points - for( j = 0; j < i; j++ ) - { - double dx1 = ptr[j].x - ptr[i].x; - double dy1 = ptr[j].y - ptr[i].y; - for( k = 0; k < j; k++ ) - { - double dx2 = ptr[k].x - ptr[i].x; - double dy2 = ptr[k].y - ptr[i].y; - if( fabs(dx2*dy1 - dy2*dx1) <= FLT_EPSILON*(fabs(dx1) + fabs(dy1) + fabs(dx2) + fabs(dy2))) - return true; - } - } - return false; -} - - class HomographyEstimatorCallback : public PointSetRegistrator::Callback { public: diff --git a/modules/calib3d/src/precomp.hpp b/modules/calib3d/src/precomp.hpp index 0005f234e2..3208680c5f 100644 --- a/modules/calib3d/src/precomp.hpp +++ b/modules/calib3d/src/precomp.hpp @@ -115,8 +115,31 @@ template inline int compressElems( T* ptr, const uchar* mask, int ms return j; } +static inline bool haveCollinearPoints( const Mat& m, int count ) +{ + int j, k, i = count-1; + const Point2f* ptr = m.ptr(); + + // check that the i-th selected point does not belong + // to a line connecting some previously selected points + // also checks that points are not too close to each other + for( j = 0; j < i; j++ ) + { + double dx1 = ptr[j].x - ptr[i].x; + double dy1 = ptr[j].y - ptr[i].y; + for( k = 0; k < j; k++ ) + { + double dx2 = ptr[k].x - ptr[i].x; + double dy2 = ptr[k].y - ptr[i].y; + if( fabs(dx2*dy1 - dy2*dx1) <= FLT_EPSILON*(fabs(dx1) + fabs(dy1) + fabs(dx2) + fabs(dy2))) + return true; + } + } + return false; } +} // namespace cv + int checkChessboard(const cv::Mat & img, const cv::Size & size); int checkChessboardBinary(const cv::Mat & img, const cv::Size & size); diff --git a/modules/calib3d/src/ptsetreg.cpp b/modules/calib3d/src/ptsetreg.cpp index 5e652d4fd5..cbf8175d48 100644 --- a/modules/calib3d/src/ptsetreg.cpp +++ b/modules/calib3d/src/ptsetreg.cpp @@ -499,11 +499,274 @@ public: } }; -} +class Affine2DEstimatorCallback : public PointSetRegistrator::Callback +{ +public: + int runKernel( InputArray _m1, InputArray _m2, OutputArray _model ) const + { + Mat m1 = _m1.getMat(), m2 = _m2.getMat(); + const Point2f* from = m1.ptr(); + const Point2f* to = m2.ptr(); + _model.create(2, 3, CV_64F); + Mat M_mat = _model.getMat(); + double *M = M_mat.ptr(); -int cv::estimateAffine3D(InputArray _from, InputArray _to, - OutputArray _out, OutputArray _inliers, - double param1, double param2) + // we need 3 points to estimate affine transform + double x1 = from[0].x; + double y1 = from[0].y; + double x2 = from[1].x; + double y2 = from[1].y; + double x3 = from[2].x; + double y3 = from[2].y; + + double X1 = to[0].x; + double Y1 = to[0].y; + double X2 = to[1].x; + double Y2 = to[1].y; + double X3 = to[2].x; + double Y3 = to[2].y; + + /* + We want to solve AX = B + + | x1 y1 1 0 0 0 | + | 0 0 0 x1 y1 1 | + | x2 y2 1 0 0 0 | + A = | 0 0 0 x2 y2 1 | + | x3 y3 1 0 0 0 | + | 0 0 0 x3 y3 1 | + B = (X1, Y1, X2, Y2, X3, Y3).t() + X = (a, b, c, d, e, f).t() + + As the estimate of (a, b, c) only depends on the Xi, and (d, e, f) only + depends on the Yi, we do the *trick* to solve each one analytically. + + | X1 | | x1 y1 1 | | a | + | X2 | = | x2 y2 1 | * | b | + | X3 | | x3 y3 1 | | c | + + | Y1 | | x1 y1 1 | | d | + | Y2 | = | x2 y2 1 | * | e | + | Y3 | | x3 y3 1 | | f | + */ + + double d = 1. / ( x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2) ); + + M[0] = d * ( X1*(y2-y3) + X2*(y3-y1) + X3*(y1-y2) ); + M[1] = d * ( X1*(x3-x2) + X2*(x1-x3) + X3*(x2-x1) ); + M[2] = d * ( X1*(x2*y3 - x3*y2) + X2*(x3*y1 - x1*y3) + X3*(x1*y2 - x2*y1) ); + + M[3] = d * ( Y1*(y2-y3) + Y2*(y3-y1) + Y3*(y1-y2) ); + M[4] = d * ( Y1*(x3-x2) + Y2*(x1-x3) + Y3*(x2-x1) ); + M[5] = d * ( Y1*(x2*y3 - x3*y2) + Y2*(x3*y1 - x1*y3) + Y3*(x1*y2 - x2*y1) ); + return 1; + } + + void computeError( InputArray _m1, InputArray _m2, InputArray _model, OutputArray _err ) const + { + Mat m1 = _m1.getMat(), m2 = _m2.getMat(), model = _model.getMat(); + const Point2f* from = m1.ptr(); + const Point2f* to = m2.ptr(); + const double* F = model.ptr(); + + int count = m1.checkVector(2); + CV_Assert( count > 0 ); + + _err.create(count, 1, CV_32F); + Mat err = _err.getMat(); + float* errptr = err.ptr(); + // transform matrix to floats + float F0 = (float)F[0], F1 = (float)F[1], F2 = (float)F[2]; + float F3 = (float)F[3], F4 = (float)F[4], F5 = (float)F[5]; + + for(int i = 0; i < count; i++ ) + { + const Point2f& f = from[i]; + const Point2f& t = to[i]; + + float a = F0*f.x + F1*f.y + F2 - t.x; + float b = F3*f.x + F4*f.y + F5 - t.y; + + errptr[i] = a*a + b*b; + } + } + + bool checkSubset( InputArray _ms1, InputArray, int count ) const + { + Mat ms1 = _ms1.getMat(); + // check colinearity and also check that points are too close + // only ms1 affects actual estimation stability + return !haveCollinearPoints(ms1, count); + } +}; + +class AffinePartial2DEstimatorCallback : public Affine2DEstimatorCallback +{ +public: + int runKernel( InputArray _m1, InputArray _m2, OutputArray _model ) const + { + Mat m1 = _m1.getMat(), m2 = _m2.getMat(); + const Point2f* from = m1.ptr(); + const Point2f* to = m2.ptr(); + _model.create(2, 3, CV_64F); + Mat M_mat = _model.getMat(); + double *M = M_mat.ptr(); + + // we need only 2 points to estimate transform + double x1 = from[0].x; + double y1 = from[0].y; + double x2 = from[1].x; + double y2 = from[1].y; + + double X1 = to[0].x; + double Y1 = to[0].y; + double X2 = to[1].x; + double Y2 = to[1].y; + + /* + we are solving AS = B + | x1 -y1 1 0 | + | y1 x1 0 1 | + A = | x2 -y2 1 0 | + | y2 x2 0 1 | + B = (X1, Y1, X2, Y2).t() + we solve that analytically + */ + double d = 1./((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)); + + // solution vector + double S0 = d * ( (X1-X2)*(x1-x2) + (Y1-Y2)*(y1-y2) ); + double S1 = d * ( (Y1-Y2)*(x1-x2) - (X1-X2)*(y1-y2) ); + double S2 = d * ( (Y1-Y2)*(x1*y2 - x2*y1) - (X1*y2 - X2*y1)*(y1-y2) - (X1*x2 - X2*x1)*(x1-x2) ); + double S3 = d * (-(X1-X2)*(x1*y2 - x2*y1) - (Y1*x2 - Y2*x1)*(x1-x2) - (Y1*y2 - Y2*y1)*(y1-y2) ); + + // set model, rotation part is antisymmetric + M[0] = M[4] = S0; + M[1] = -S1; + M[2] = S2; + M[3] = S1; + M[5] = S3; + return 1; + } +}; + +class Affine2DRefineCallback : public LMSolver::Callback +{ +public: + Affine2DRefineCallback(InputArray _src, InputArray _dst) + { + src = _src.getMat(); + dst = _dst.getMat(); + } + + bool compute(InputArray _param, OutputArray _err, OutputArray _Jac) const + { + int i, count = src.checkVector(2); + Mat param = _param.getMat(); + _err.create(count*2, 1, CV_64F); + Mat err = _err.getMat(), J; + if( _Jac.needed()) + { + _Jac.create(count*2, param.rows, CV_64F); + J = _Jac.getMat(); + CV_Assert( J.isContinuous() && J.cols == 6 ); + } + + const Point2f* M = src.ptr(); + const Point2f* m = dst.ptr(); + const double* h = param.ptr(); + double* errptr = err.ptr(); + double* Jptr = J.data ? J.ptr() : 0; + + for( i = 0; i < count; i++ ) + { + double Mx = M[i].x, My = M[i].y; + double xi = h[0]*Mx + h[1]*My + h[2]; + double yi = h[3]*Mx + h[4]*My + h[5]; + errptr[i*2] = xi - m[i].x; + errptr[i*2+1] = yi - m[i].y; + + /* + Jacobian should be: + {x, y, 1, 0, 0, 0} + {0, 0, 0, x, y, 1} + */ + if( Jptr ) + { + Jptr[0] = Mx; Jptr[1] = My; Jptr[2] = 1.; + Jptr[3] = Jptr[4] = Jptr[5] = 0.; + Jptr[6] = Jptr[7] = Jptr[8] = 0.; + Jptr[9] = Mx; Jptr[10] = My; Jptr[11] = 1.; + + Jptr += 6*2; + } + } + + return true; + } + + Mat src, dst; +}; + +class AffinePartial2DRefineCallback : public LMSolver::Callback +{ +public: + AffinePartial2DRefineCallback(InputArray _src, InputArray _dst) + { + src = _src.getMat(); + dst = _dst.getMat(); + } + + bool compute(InputArray _param, OutputArray _err, OutputArray _Jac) const + { + int i, count = src.checkVector(2); + Mat param = _param.getMat(); + _err.create(count*2, 1, CV_64F); + Mat err = _err.getMat(), J; + if( _Jac.needed()) + { + _Jac.create(count*2, param.rows, CV_64F); + J = _Jac.getMat(); + CV_Assert( J.isContinuous() && J.cols == 4 ); + } + + const Point2f* M = src.ptr(); + const Point2f* m = dst.ptr(); + const double* h = param.ptr(); + double* errptr = err.ptr(); + double* Jptr = J.data ? J.ptr() : 0; + + for( i = 0; i < count; i++ ) + { + double Mx = M[i].x, My = M[i].y; + double xi = h[0]*Mx - h[1]*My + h[2]; + double yi = h[1]*Mx + h[0]*My + h[3]; + errptr[i*2] = xi - m[i].x; + errptr[i*2+1] = yi - m[i].y; + + /* + Jacobian should be: + {x, -y, 1, 0} + {y, x, 0, 1} + */ + if( Jptr ) + { + Jptr[0] = Mx; Jptr[1] = -My; Jptr[2] = 1.; Jptr[3] = 0.; + Jptr[4] = My; Jptr[5] = Mx; Jptr[6] = 0.; Jptr[7] = 1.; + + Jptr += 4*2; + } + } + + return true; + } + + Mat src, dst; +}; + +int estimateAffine3D(InputArray _from, InputArray _to, + OutputArray _out, OutputArray _inliers, + double param1, double param2) { CV_INSTRUMENT_REGION() @@ -524,3 +787,152 @@ int cv::estimateAffine3D(InputArray _from, InputArray _to, return createRANSACPointSetRegistrator(makePtr(), 4, param1, param2)->run(dFrom, dTo, _out, _inliers); } + +Mat estimateAffine2D(InputArray _from, InputArray _to, OutputArray _inliers, + const int method, const double ransacReprojThreshold, + const size_t maxIters, const double confidence, + const size_t refineIters) +{ + Mat from = _from.getMat(), to = _to.getMat(); + int count = from.checkVector(2); + bool result = false; + Mat H; + + CV_Assert( count >= 0 && to.checkVector(2) == count ); + + if (from.type() != CV_32FC2 || to.type() != CV_32FC2) + { + Mat tmp; + from.convertTo(tmp, CV_32FC2); + from = tmp; + to.convertTo(tmp, CV_32FC2); + to = tmp; + } + // convert to N x 1 vectors + from = from.reshape(2, count); + to = to.reshape(2, count); + + Mat inliers; + if(_inliers.needed()) + { + _inliers.create(count, 1, CV_8U, -1, true); + inliers = _inliers.getMat(); + } + + // run robust method + Ptr cb = makePtr(); + if( method == RANSAC ) + result = createRANSACPointSetRegistrator(cb, 3, ransacReprojThreshold, confidence, static_cast(maxIters))->run(from, to, H, inliers); + else if( method == LMEDS ) + result = createLMeDSPointSetRegistrator(cb, 3, confidence, static_cast(maxIters))->run(from, to, H, inliers); + else + CV_Error(Error::StsBadArg, "Unknown or unsupported robust estimation method"); + + if(result && count > 3 && refineIters) + { + // reorder to start with inliers + compressElems(from.ptr(), inliers.ptr(), 1, count); + int inliers_count = compressElems(to.ptr(), inliers.ptr(), 1, count); + if(inliers_count > 0) + { + Mat src = from.rowRange(0, inliers_count); + Mat dst = to.rowRange(0, inliers_count); + Mat Hvec = H.reshape(1, 6); + createLMSolver(makePtr(src, dst), static_cast(refineIters))->run(Hvec); + } + } + + if (!result) + { + H.release(); + if(_inliers.needed()) + { + inliers = Mat::zeros(count, 1, CV_8U); + inliers.copyTo(_inliers); + } + } + + return H; +} + +Mat estimateAffinePartial2D(InputArray _from, InputArray _to, OutputArray _inliers, + const int method, const double ransacReprojThreshold, + const size_t maxIters, const double confidence, + const size_t refineIters) +{ + Mat from = _from.getMat(), to = _to.getMat(); + const int count = from.checkVector(2); + bool result = false; + Mat H; + + CV_Assert( count >= 0 && to.checkVector(2) == count ); + + if (from.type() != CV_32FC2 || to.type() != CV_32FC2) + { + Mat tmp; + from.convertTo(tmp, CV_32FC2); + from = tmp; + to.convertTo(tmp, CV_32FC2); + to = tmp; + } + // convert to N x 1 vectors + from = from.reshape(2, count); + to = to.reshape(2, count); + + Mat inliers; + if(_inliers.needed()) + { + _inliers.create(count, 1, CV_8U, -1, true); + inliers = _inliers.getMat(); + } + + // run robust estimation + Ptr cb = makePtr(); + if( method == RANSAC ) + result = createRANSACPointSetRegistrator(cb, 2, ransacReprojThreshold, confidence, static_cast(maxIters))->run(from, to, H, inliers); + else if( method == LMEDS ) + result = createLMeDSPointSetRegistrator(cb, 2, confidence, static_cast(maxIters))->run(from, to, H, inliers); + else + CV_Error(Error::StsBadArg, "Unknown or unsupported robust estimation method"); + + if(result && count > 2 && refineIters) + { + // reorder to start with inliers + compressElems(from.ptr(), inliers.ptr(), 1, count); + int inliers_count = compressElems(to.ptr(), inliers.ptr(), 1, count); + if(inliers_count > 0) + { + Mat src = from.rowRange(0, inliers_count); + Mat dst = to.rowRange(0, inliers_count); + // H is + // a -b tx + // b a ty + // Hvec model for LevMarq is + // (a, b, tx, ty) + double *Hptr = H.ptr(); + double Hvec_buf[4] = {Hptr[0], Hptr[3], Hptr[2], Hptr[5]}; + Mat Hvec (4, 1, CV_64F, Hvec_buf); + createLMSolver(makePtr(src, dst), static_cast(refineIters))->run(Hvec); + // update H with refined parameters + Hptr[0] = Hptr[4] = Hvec_buf[0]; + Hptr[1] = -Hvec_buf[1]; + Hptr[2] = Hvec_buf[2]; + Hptr[3] = Hvec_buf[1]; + Hptr[5] = Hvec_buf[3]; + } + } + + if (!result) + { + H.release(); + if(_inliers.needed()) + { + inliers = Mat::zeros(count, 1, CV_8U); + inliers.copyTo(_inliers); + } + } + + return H; +} + +} // namespace cv diff --git a/modules/calib3d/test/test_affine2d_estimator.cpp b/modules/calib3d/test/test_affine2d_estimator.cpp new file mode 100644 index 0000000000..de9f7003e1 --- /dev/null +++ b/modules/calib3d/test/test_affine2d_estimator.cpp @@ -0,0 +1,130 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// (3-clause BSD License) +// +// Copyright (C) 2015-2016, OpenCV Foundation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * Neither the names of the copyright holders nor the names of the contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall copyright holders or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "test_precomp.hpp" + +using namespace cv; +using namespace std; +using namespace testing; + +#include +#include + +CV_ENUM(Method, RANSAC, LMEDS) +typedef TestWithParam EstimateAffine2D; + +static float rngIn(float from, float to) { return from + (to-from) * (float)theRNG(); } + +TEST_P(EstimateAffine2D, test3Points) +{ + // try more transformations + for (size_t i = 0; i < 500; ++i) + { + Mat aff(2, 3, CV_64F); + cv::randu(aff, 1., 3.); + + Mat fpts(1, 3, CV_32FC2); + Mat tpts(1, 3, CV_32FC2); + + // setting points that are not in the same line + fpts.at(0) = Point2f( rngIn(1,2), rngIn(5,6) ); + fpts.at(1) = Point2f( rngIn(3,4), rngIn(3,4) ); + fpts.at(2) = Point2f( rngIn(1,2), rngIn(3,4) ); + + transform(fpts, tpts, aff); + + vector inliers; + Mat aff_est = estimateAffine2D(fpts, tpts, inliers, GetParam() /* method */); + + EXPECT_NEAR(0., cvtest::norm(aff_est, aff, NORM_INF), 1e-3); + + // all must be inliers + EXPECT_EQ(countNonZero(inliers), 3); + } +} + +TEST_P(EstimateAffine2D, testNPoints) +{ + // try more transformations + for (size_t i = 0; i < 500; ++i) + { + Mat aff(2, 3, CV_64F); + cv::randu(aff, -2., 2.); + const int method = GetParam(); + const int n = 100; + int m; + // LMEDS can't handle more than 50% outliers (by design) + if (method == LMEDS) + m = 3*n/5; + else + m = 2*n/5; + const float shift_outl = 15.f; + const float noise_level = 20.f; + + Mat fpts(1, n, CV_32FC2); + Mat tpts(1, n, CV_32FC2); + + randu(fpts, 0., 100.); + transform(fpts, tpts, aff); + + /* adding noise to some points */ + Mat outliers = tpts.colRange(m, n); + outliers.reshape(1) += shift_outl; + + Mat noise (outliers.size(), outliers.type()); + randu(noise, 0., noise_level); + outliers += noise; + + vector inliers; + Mat aff_est = estimateAffine2D(fpts, tpts, inliers, method); + + EXPECT_FALSE(aff_est.empty()) << "estimation failed, unable to estimate transform"; + + EXPECT_NEAR(0., cvtest::norm(aff_est, aff, NORM_INF), 1e-4); + + bool inliers_good = count(inliers.begin(), inliers.end(), 1) == m && + m == accumulate(inliers.begin(), inliers.begin() + m, 0); + + EXPECT_TRUE(inliers_good); + } +} + +INSTANTIATE_TEST_CASE_P(Calib3d, EstimateAffine2D, Method::all()); diff --git a/modules/calib3d/test/test_affine3d_estimator.cpp b/modules/calib3d/test/test_affine3d_estimator.cpp index 26088157d9..aa41bf39e5 100644 --- a/modules/calib3d/test/test_affine3d_estimator.cpp +++ b/modules/calib3d/test/test_affine3d_estimator.cpp @@ -194,4 +194,4 @@ void CV_Affine3D_EstTest::run( int /* start_from */) ts->set_failed_test_info(cvtest::TS::OK); } -TEST(Calib3d_EstimateAffineTransform, accuracy) { CV_Affine3D_EstTest test; test.safe_run(); } +TEST(Calib3d_EstimateAffine3D, accuracy) { CV_Affine3D_EstTest test; test.safe_run(); } diff --git a/modules/calib3d/test/test_affine_partial2d_estimator.cpp b/modules/calib3d/test/test_affine_partial2d_estimator.cpp new file mode 100644 index 0000000000..dde7d7da1c --- /dev/null +++ b/modules/calib3d/test/test_affine_partial2d_estimator.cpp @@ -0,0 +1,140 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// (3-clause BSD License) +// +// Copyright (C) 2015-2016, OpenCV Foundation, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * Neither the names of the copyright holders nor the names of the contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall copyright holders or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "test_precomp.hpp" + +using namespace cv; +using namespace std; +using namespace testing; + +#include +#include + +CV_ENUM(Method, RANSAC, LMEDS) +typedef TestWithParam EstimateAffinePartial2D; + +static float rngIn(float from, float to) { return from + (to-from) * (float)theRNG(); } + +// get random matrix of affine transformation limited to combinations of translation, +// rotation, and uniform scaling +static Mat rngPartialAffMat() { + double theta = rngIn(0, (float)CV_PI*2.f); + double scale = rngIn(0, 3); + double tx = rngIn(-2, 2); + double ty = rngIn(-2, 2); + double aff[2*3] = { std::cos(theta) * scale, -std::sin(theta) * scale, tx, + std::sin(theta) * scale, std::cos(theta) * scale, ty }; + return Mat(2, 3, CV_64F, aff).clone(); +} + +TEST_P(EstimateAffinePartial2D, test2Points) +{ + // try more transformations + for (size_t i = 0; i < 500; ++i) + { + Mat aff = rngPartialAffMat(); + + // setting points that are no in the same line + Mat fpts(1, 2, CV_32FC2); + Mat tpts(1, 2, CV_32FC2); + + fpts.at(0) = Point2f( rngIn(1,2), rngIn(5,6) ); + fpts.at(1) = Point2f( rngIn(3,4), rngIn(3,4) ); + + transform(fpts, tpts, aff); + + vector inliers; + Mat aff_est = estimateAffinePartial2D(fpts, tpts, inliers, GetParam() /* method */); + + EXPECT_NEAR(0., cvtest::norm(aff_est, aff, NORM_INF), 1e-3); + + // all must be inliers + EXPECT_EQ(countNonZero(inliers), 2); + } +} + +TEST_P(EstimateAffinePartial2D, testNPoints) +{ + // try more transformations + for (size_t i = 0; i < 500; ++i) + { + Mat aff = rngPartialAffMat(); + + const int method = GetParam(); + const int n = 100; + int m; + // LMEDS can't handle more than 50% outliers (by design) + if (method == LMEDS) + m = 3*n/5; + else + m = 2*n/5; + const float shift_outl = 15.f; + const float noise_level = 20.f; + + Mat fpts(1, n, CV_32FC2); + Mat tpts(1, n, CV_32FC2); + + randu(fpts, 0., 100.); + transform(fpts, tpts, aff); + + /* adding noise to some points */ + Mat outliers = tpts.colRange(m, n); + outliers.reshape(1) += shift_outl; + + Mat noise (outliers.size(), outliers.type()); + randu(noise, 0., noise_level); + outliers += noise; + + vector inliers; + Mat aff_est = estimateAffinePartial2D(fpts, tpts, inliers, method); + + EXPECT_FALSE(aff_est.empty()); + + EXPECT_NEAR(0., cvtest::norm(aff_est, aff, NORM_INF), 1e-4); + + bool inliers_good = count(inliers.begin(), inliers.end(), 1) == m && + m == accumulate(inliers.begin(), inliers.begin() + m, 0); + + EXPECT_TRUE(inliers_good); + } +} + +INSTANTIATE_TEST_CASE_P(Calib3d, EstimateAffinePartial2D, Method::all()); diff --git a/modules/core/include/opencv2/core.hpp b/modules/core/include/opencv2/core.hpp index 4a21aab66e..97a13f04ec 100644 --- a/modules/core/include/opencv2/core.hpp +++ b/modules/core/include/opencv2/core.hpp @@ -1650,7 +1650,7 @@ m.cols or m.cols-1. @param dst output array of the same size and depth as src; it has as many channels as m.rows. @param m transformation 2x2 or 2x3 floating-point matrix. -@sa perspectiveTransform, getAffineTransform, estimateRigidTransform, warpAffine, warpPerspective +@sa perspectiveTransform, getAffineTransform, estimateAffine2D, warpAffine, warpPerspective */ CV_EXPORTS_W void transform(InputArray src, OutputArray dst, InputArray m ); diff --git a/modules/stitching/include/opencv2/stitching.hpp b/modules/stitching/include/opencv2/stitching.hpp index c78be1d665..387e1dec78 100644 --- a/modules/stitching/include/opencv2/stitching.hpp +++ b/modules/stitching/include/opencv2/stitching.hpp @@ -69,7 +69,29 @@ one can combine and use them separately. The implemented stitching pipeline is very similar to the one proposed in @cite BL07 . -![image](StitchingPipeline.jpg) +![stitching pipeline](StitchingPipeline.jpg) + +Camera models +------------- + +There are currently 2 camera models implemented in stitching pipeline. + +- _Homography model_ expecting perspective transformations between images + implemented in @ref cv::detail::BestOf2NearestMatcher cv::detail::HomographyBasedEstimator + cv::detail::BundleAdjusterReproj cv::detail::BundleAdjusterRay +- _Affine model_ expecting affine transformation with 6 DOF or 4 DOF implemented in + @ref cv::detail::AffineBestOf2NearestMatcher cv::detail::AffineBasedEstimator + cv::detail::BundleAdjusterAffine cv::detail::BundleAdjusterAffinePartial cv::AffineWarper + +Homography model is useful for creating photo panoramas captured by camera, +while affine-based model can be used to stitch scans and object captured by +specialized devices. Use @ref cv::Stitcher::create to get preconfigured pipeline for one +of those models. + +@note +Certain detailed settings of @ref cv::Stitcher might not make sense. Especially +you should not mix classes implementing affine model and classes implementing +Homography model, as they work with different transformations. @{ @defgroup stitching_match Features Finding and Images Matching @@ -110,6 +132,22 @@ public: ERR_HOMOGRAPHY_EST_FAIL = 2, ERR_CAMERA_PARAMS_ADJUST_FAIL = 3 }; + enum Mode + { + /** Mode for creating photo panoramas. Expects images under perspective + transformation and projects resulting pano to sphere. + + @sa detail::BestOf2NearestMatcher SphericalWarper + */ + PANORAMA = 0, + /** Mode for composing scans. Expects images under affine transformation does + not compensate exposure by default. + + @sa detail::AffineBestOf2NearestMatcher AffineWarper + */ + SCANS = 1, + + }; // Stitcher() {} /** @brief Creates a stitcher with the default parameters. @@ -118,6 +156,15 @@ public: @return Stitcher class instance. */ static Stitcher createDefault(bool try_use_gpu = false); + /** @brief Creates a Stitcher configured in one of the stitching modes. + + @param mode Scenario for stitcher operation. This is usually determined by source of images + to stitch and their transformation. Default parameters will be chosen for operation in given + scenario. + @param try_use_gpu Flag indicating whether GPU should be used whenever it's possible. + @return Stitcher class instance. + */ + static Ptr create(Mode mode = PANORAMA, bool try_use_gpu = false); CV_WRAP double registrationResol() const { return registr_resol_; } CV_WRAP void setRegistrationResol(double resol_mpx) { registr_resol_ = resol_mpx; } @@ -159,6 +206,13 @@ public: void setBundleAdjuster(Ptr bundle_adjuster) { bundle_adjuster_ = bundle_adjuster; } + /* TODO OpenCV ABI 4.x + Ptr estimator() { return estimator_; } + const Ptr estimator() const { return estimator_; } + void setEstimator(Ptr estimator) + { estimator_ = estimator; } + */ + Ptr warper() { return warper_; } const Ptr warper() const { return warper_; } void setWarper(Ptr creator) { warper_ = creator; } @@ -233,6 +287,9 @@ private: Ptr features_matcher_; cv::UMat matching_mask_; Ptr bundle_adjuster_; + /* TODO OpenCV ABI 4.x + Ptr estimator_; + */ bool do_wave_correct_; detail::WaveCorrectKind wave_correct_kind_; Ptr warper_; diff --git a/modules/stitching/include/opencv2/stitching/detail/matchers.hpp b/modules/stitching/include/opencv2/stitching/detail/matchers.hpp index a46efc5760..bc81a84629 100644 --- a/modules/stitching/include/opencv2/stitching/detail/matchers.hpp +++ b/modules/stitching/include/opencv2/stitching/detail/matchers.hpp @@ -83,9 +83,27 @@ public: @sa detail::ImageFeatures, Rect_ */ void operator ()(InputArray image, ImageFeatures &features, const std::vector &rois); + /** @brief Finds features in the given images in parallel. + + @param images Source images + @param features Found features for each image + @param rois Regions of interest for each image + + @sa detail::ImageFeatures, Rect_ + */ + void operator ()(InputArrayOfArrays images, std::vector &features, + const std::vector > &rois); + /** @overload */ + void operator ()(InputArrayOfArrays images, std::vector &features); /** @brief Frees unused memory allocated before if there is any. */ virtual void collectGarbage() {} + /* TODO OpenCV ABI 4.x + reimplement this as public method similar to FeaturesMatcher and remove private function hack + @return True, if it's possible to use the same finder instance in parallel, false otherwise + bool isThreadSafe() const { return is_thread_safe_; } + */ + protected: /** @brief This method must implement features finding logic in order to make the wrappers detail::FeaturesFinder::operator()_ work. @@ -95,6 +113,10 @@ protected: @sa detail::ImageFeatures */ virtual void find(InputArray image, ImageFeatures &features) = 0; + /** @brief uses dynamic_cast to determine thread-safety + @return True, if it's possible to use the same finder instance in parallel, false otherwise + */ + bool isThreadSafe() const; }; /** @brief SURF features finder. @@ -152,7 +174,6 @@ private: Ptr akaze; }; - #ifdef HAVE_OPENCV_XFEATURES2D class CV_EXPORTS SurfFeaturesFinderGpu : public FeaturesFinder { @@ -177,7 +198,10 @@ private: /** @brief Structure containing information about matches between two images. -It's assumed that there is a homography between those images. +It's assumed that there is a transformation between those images. Transformation may be +homography or affine transformation based on selected matcher. + +@sa detail::FeaturesMatcher */ struct CV_EXPORTS MatchesInfo { @@ -189,7 +213,7 @@ struct CV_EXPORTS MatchesInfo std::vector matches; std::vector inliers_mask; //!< Geometrically consistent matches mask int num_inliers; //!< Number of geometrically consistent matches - Mat H; //!< Estimated homography + Mat H; //!< Estimated transformation double confidence; //!< Confidence two images are from the same panorama }; @@ -288,6 +312,41 @@ protected: int range_width_; }; +/** @brief Features matcher similar to cv::detail::BestOf2NearestMatcher which +finds two best matches for each feature and leaves the best one only if the +ratio between descriptor distances is greater than the threshold match_conf. + +Unlike cv::detail::BestOf2NearestMatcher this matcher uses affine +transformation (affine trasformation estimate will be placed in matches_info). + +@sa cv::detail::FeaturesMatcher cv::detail::BestOf2NearestMatcher + */ +class CV_EXPORTS AffineBestOf2NearestMatcher : public BestOf2NearestMatcher +{ +public: + /** @brief Constructs a "best of 2 nearest" matcher that expects affine trasformation + between images + + @param full_affine whether to use full affine transformation with 6 degress of freedom or reduced + transformation with 4 degrees of freedom using only rotation, translation and uniform scaling + @param try_use_gpu Should try to use GPU or not + @param match_conf Match distances ration threshold + @param num_matches_thresh1 Minimum number of matches required for the 2D affine transform + estimation used in the inliers classification step + + @sa cv::estimateAffine2D cv::estimateAffinePartial2D + */ + AffineBestOf2NearestMatcher(bool full_affine = false, bool try_use_gpu = false, + float match_conf = 0.3f, int num_matches_thresh1 = 6) : + BestOf2NearestMatcher(try_use_gpu, match_conf, num_matches_thresh1, num_matches_thresh1), + full_affine_(full_affine) {} + +protected: + void match(const ImageFeatures &features1, const ImageFeatures &features2, MatchesInfo &matches_info); + + bool full_affine_; +}; + //! @} stitching_match } // namespace detail diff --git a/modules/stitching/include/opencv2/stitching/detail/motion_estimators.hpp b/modules/stitching/include/opencv2/stitching/detail/motion_estimators.hpp index 9f7b8bde1a..5276fd1d98 100644 --- a/modules/stitching/include/opencv2/stitching/detail/motion_estimators.hpp +++ b/modules/stitching/include/opencv2/stitching/detail/motion_estimators.hpp @@ -109,6 +109,21 @@ private: bool is_focals_estimated_; }; +/** @brief Affine transformation based estimator. + +This estimator uses pairwise tranformations estimated by matcher to estimate +final transformation for each camera. + +@sa cv::detail::HomographyBasedEstimator + */ +class CV_EXPORTS AffineBasedEstimator : public Estimator +{ +private: + virtual bool estimate(const std::vector &features, + const std::vector &pairwise_matches, + std::vector &cameras); +}; + /** @brief Base class for all camera parameters refinement methods. */ class CV_EXPORTS BundleAdjusterBase : public Estimator @@ -195,6 +210,26 @@ protected: }; +/** @brief Stub bundle adjuster that does nothing. + */ +class CV_EXPORTS NoBundleAdjuster : public BundleAdjusterBase +{ +public: + NoBundleAdjuster() : BundleAdjusterBase(0, 0) {} + +private: + bool estimate(const std::vector &, const std::vector &, + std::vector &) + { + return true; + } + void setUpInitialCameraParams(const std::vector &) {} + void obtainRefinedCameraParams(std::vector &) const {} + void calcError(Mat &) {} + void calcJacobian(Mat &) {} +}; + + /** @brief Implementation of the camera parameters refinement algorithm which minimizes sum of the reprojection error squares @@ -236,6 +271,54 @@ private: }; +/** @brief Bundle adjuster that expects affine transformation +represented in homogeneous coordinates in R for each camera param. Implements +camera parameters refinement algorithm which minimizes sum of the reprojection +error squares + +It estimates all transformation parameters. Refinement mask is ignored. + +@sa AffineBasedEstimator AffineBestOf2NearestMatcher BundleAdjusterAffinePartial + */ +class CV_EXPORTS BundleAdjusterAffine : public BundleAdjusterBase +{ +public: + BundleAdjusterAffine() : BundleAdjusterBase(6, 2) {} + +private: + void setUpInitialCameraParams(const std::vector &cameras); + void obtainRefinedCameraParams(std::vector &cameras) const; + void calcError(Mat &err); + void calcJacobian(Mat &jac); + + Mat err1_, err2_; +}; + + +/** @brief Bundle adjuster that expects affine transformation with 4 DOF +represented in homogeneous coordinates in R for each camera param. Implements +camera parameters refinement algorithm which minimizes sum of the reprojection +error squares + +It estimates all transformation parameters. Refinement mask is ignored. + +@sa AffineBasedEstimator AffineBestOf2NearestMatcher BundleAdjusterAffine + */ +class CV_EXPORTS BundleAdjusterAffinePartial : public BundleAdjusterBase +{ +public: + BundleAdjusterAffinePartial() : BundleAdjusterBase(4, 2) {} + +private: + void setUpInitialCameraParams(const std::vector &cameras); + void obtainRefinedCameraParams(std::vector &cameras) const; + void calcError(Mat &err); + void calcJacobian(Mat &jac); + + Mat err1_, err2_; +}; + + enum WaveCorrectKind { WAVE_CORRECT_HORIZ, diff --git a/modules/stitching/include/opencv2/stitching/detail/warpers.hpp b/modules/stitching/include/opencv2/stitching/detail/warpers.hpp index f848c49360..1515d76260 100644 --- a/modules/stitching/include/opencv2/stitching/detail/warpers.hpp +++ b/modules/stitching/include/opencv2/stitching/detail/warpers.hpp @@ -205,6 +205,34 @@ protected: }; +/** @brief Affine warper that uses rotations and translations + + Uses affine transformation in homogeneous coordinates to represent both rotation and + translation in camera rotation matrix. + */ +class CV_EXPORTS AffineWarper : public PlaneWarper +{ +public: + /** @brief Construct an instance of the affine warper class. + + @param scale Projected image scale multiplier + */ + AffineWarper(float scale = 1.f) : PlaneWarper(scale) {} + + Point2f warpPoint(const Point2f &pt, InputArray K, InputArray R); + Rect buildMaps(Size src_size, InputArray K, InputArray R, OutputArray xmap, OutputArray ymap); + Point warp(InputArray src, InputArray K, InputArray R, + int interp_mode, int border_mode, OutputArray dst); + Rect warpRoi(Size src_size, InputArray K, InputArray R); + +protected: + /** @brief Extracts rotation and translation matrices from matrix H representing + affine transformation in homogeneous coordinates + */ + void getRTfromHomogeneous(InputArray H, Mat &R, Mat &T); +}; + + struct CV_EXPORTS SphericalProjector : ProjectorBase { void mapForward(float x, float y, float &u, float &v); diff --git a/modules/stitching/include/opencv2/stitching/warpers.hpp b/modules/stitching/include/opencv2/stitching/warpers.hpp index 23f69516ac..139e0522b9 100644 --- a/modules/stitching/include/opencv2/stitching/warpers.hpp +++ b/modules/stitching/include/opencv2/stitching/warpers.hpp @@ -68,6 +68,15 @@ public: Ptr create(float scale) const { return makePtr(scale); } }; +/** @brief Affine warper factory class. + @sa detail::AffineWarper + */ +class AffineWarper : public WarperCreator +{ +public: + Ptr create(float scale) const { return makePtr(scale); } +}; + /** @brief Cylindrical warper factory class. @sa detail::CylindricalWarper */ diff --git a/modules/stitching/perf/opencl/perf_stitch.cpp b/modules/stitching/perf/opencl/perf_stitch.cpp index ce7c3a9f11..8b25c50940 100644 --- a/modules/stitching/perf/opencl/perf_stitch.cpp +++ b/modules/stitching/perf/opencl/perf_stitch.cpp @@ -7,9 +7,13 @@ #include "../perf_precomp.hpp" #include "opencv2/ts/ocl_perf.hpp" +#ifdef HAVE_OPENCL + +namespace cvtest { +namespace ocl { + using namespace cv; using namespace perf; -using namespace cvtest::ocl; using namespace std; using namespace std::tr1; @@ -19,7 +23,7 @@ using namespace std::tr1; typedef TestBaseWithParam stitch; -#ifdef HAVE_OPENCV_NONFREE_TODO_FIND_WHY_SURF_IS_NOT_ABLE_TO_STITCH_PANOS +#ifdef HAVE_OPENCV_XFEATURES2D #define TEST_DETECTORS testing::Values("surf", "orb") #else #define TEST_DETECTORS testing::Values("orb") @@ -142,3 +146,7 @@ OCL_PERF_TEST_P(stitch, boat, TEST_DETECTORS) SANITY_CHECK_NOTHING(); } + +} } // namespace cvtest::ocl + +#endif // HAVE_OPENCL diff --git a/modules/stitching/perf/opencl/perf_warpers.cpp b/modules/stitching/perf/opencl/perf_warpers.cpp index 57ca9a602d..1aa738cd9f 100644 --- a/modules/stitching/perf/opencl/perf_warpers.cpp +++ b/modules/stitching/perf/opencl/perf_warpers.cpp @@ -54,7 +54,8 @@ enum { SphericalWarperType = 0, CylindricalWarperType = 1, - PlaneWarperType = 2 + PlaneWarperType = 2, + AffineWarperType = 3, }; class WarperBase @@ -69,6 +70,8 @@ public: creator = makePtr(); else if (type == PlaneWarperType) creator = makePtr(); + else if (type == AffineWarperType) + creator = makePtr(); CV_Assert(!creator.empty()); K = Mat::eye(3, 3, CV_32FC1); @@ -98,7 +101,7 @@ private: Mat K, R; }; -CV_ENUM(WarperType, SphericalWarperType, CylindricalWarperType, PlaneWarperType) +CV_ENUM(WarperType, SphericalWarperType, CylindricalWarperType, PlaneWarperType, AffineWarperType) typedef tuple StitchingWarpersParams; typedef TestBaseWithParam StitchingWarpersFixture; diff --git a/modules/stitching/perf/perf_estimators.cpp b/modules/stitching/perf/perf_estimators.cpp new file mode 100644 index 0000000000..7de470c0e5 --- /dev/null +++ b/modules/stitching/perf/perf_estimators.cpp @@ -0,0 +1,100 @@ +#include "perf_precomp.hpp" +#include "opencv2/imgcodecs.hpp" +#include "opencv2/opencv_modules.hpp" + +using namespace std; +using namespace cv; +using namespace perf; +using std::tr1::tuple; +using std::tr1::get; + +typedef TestBaseWithParam > bundleAdjuster; + +#ifdef HAVE_OPENCV_XFEATURES2D +#define TEST_DETECTORS testing::Values("surf", "orb") +#else +#define TEST_DETECTORS testing::Values("orb") +#endif +#define WORK_MEGAPIX 0.6 +#define AFFINE_FUNCTIONS testing::Values("affinePartial", "affine") + +PERF_TEST_P(bundleAdjuster, affine, testing::Combine(TEST_DETECTORS, AFFINE_FUNCTIONS)) +{ + Mat img1, img1_full = imread(getDataPath("stitching/s1.jpg")); + Mat img2, img2_full = imread(getDataPath("stitching/s2.jpg")); + float scale1 = (float)std::min(1.0, sqrt(WORK_MEGAPIX * 1e6 / img1_full.total())); + float scale2 = (float)std::min(1.0, sqrt(WORK_MEGAPIX * 1e6 / img2_full.total())); + resize(img1_full, img1, Size(), scale1, scale1); + resize(img2_full, img2, Size(), scale2, scale2); + + string detector = get<0>(GetParam()); + string affine_fun = get<1>(GetParam()); + + Ptr finder; + Ptr matcher; + Ptr bundle_adjuster; + if (detector == "surf") + finder = makePtr(); + else if (detector == "orb") + finder = makePtr(); + if (affine_fun == "affinePartial") + { + matcher = makePtr(false); + bundle_adjuster = makePtr(); + } + else if (affine_fun == "affine") + { + matcher = makePtr(true); + bundle_adjuster = makePtr(); + } + Ptr estimator = makePtr(); + + std::vector images; + images.push_back(img1), images.push_back(img2); + std::vector features; + std::vector pairwise_matches; + std::vector cameras; + std::vector cameras2; + + (*finder)(images, features); + (*matcher)(features, pairwise_matches); + if (!(*estimator)(features, pairwise_matches, cameras)) + FAIL() << "estimation failed. this should never happen."; + // this is currently required + for (size_t i = 0; i < cameras.size(); ++i) + { + Mat R; + cameras[i].R.convertTo(R, CV_32F); + cameras[i].R = R; + } + + cameras2 = cameras; + bool success = true; + while(next()) + { + cameras = cameras2; // revert cameras back to original initial guess + startTimer(); + success = (*bundle_adjuster)(features, pairwise_matches, cameras); + stopTimer(); + } + + EXPECT_TRUE(success); + EXPECT_TRUE(cameras.size() == 2); + + // fist camera should be just identity + Mat &first = cameras[0].R; + SANITY_CHECK(first, 1e-3, ERROR_ABSOLUTE); + // second camera should be the estimated transform between images + // separate rotation and translation in transform matrix + Mat T_second (cameras[1].R, Range(0, 2), Range(2, 3)); + Mat R_second (cameras[1].R, Range(0, 2), Range(0, 2)); + Mat h (cameras[1].R, Range(2, 3), Range::all()); + SANITY_CHECK(T_second, 5, ERROR_ABSOLUTE); // allow 5 pixels diff in translations + SANITY_CHECK(R_second, .01, ERROR_ABSOLUTE); // rotations must be more precise + // last row should be precisely (0, 0, 1) as it is just added for representation in homogeneous + // coordinates + EXPECT_TRUE(h.type() == CV_32F); + EXPECT_FLOAT_EQ(h.at(0), 0.f); + EXPECT_FLOAT_EQ(h.at(1), 0.f); + EXPECT_FLOAT_EQ(h.at(2), 1.f); +} diff --git a/modules/stitching/perf/perf_matchers.cpp b/modules/stitching/perf/perf_matchers.cpp new file mode 100644 index 0000000000..4e5b03d430 --- /dev/null +++ b/modules/stitching/perf/perf_matchers.cpp @@ -0,0 +1,301 @@ +#include "perf_precomp.hpp" +#include "opencv2/imgcodecs.hpp" +#include "opencv2/opencv_modules.hpp" +#include "opencv2/flann.hpp" + +using namespace std; +using namespace cv; +using namespace perf; +using std::tr1::make_tuple; +using std::tr1::get; + +typedef TestBaseWithParam FeaturesFinderVec; +typedef TestBaseWithParam match; +typedef std::tr1::tuple matchVector_t; +typedef TestBaseWithParam matchVector; + +#define NUMBER_IMAGES testing::Values(1, 5, 20) +#define SURF_MATCH_CONFIDENCE 0.65f +#define ORB_MATCH_CONFIDENCE 0.3f +#define WORK_MEGAPIX 0.6 + +#ifdef HAVE_OPENCV_XFEATURES2D +#define TEST_DETECTORS testing::Values("surf", "orb") +#else +#define TEST_DETECTORS testing::Values("orb") +#endif + +PERF_TEST_P(FeaturesFinderVec, ParallelFeaturesFinder, NUMBER_IMAGES) +{ + Mat img = imread( getDataPath("stitching/a1.png") ); + vector imgs(GetParam(), img); + vector features(imgs.size()); + + Ptr featuresFinder = makePtr(); + + TEST_CYCLE() + { + (*featuresFinder)(imgs, features); + } + + SANITY_CHECK_NOTHING(); +} + +PERF_TEST_P(FeaturesFinderVec, SerialFeaturesFinder, NUMBER_IMAGES) +{ + Mat img = imread( getDataPath("stitching/a1.png") ); + vector imgs(GetParam(), img); + vector features(imgs.size()); + + Ptr featuresFinder = makePtr(); + + TEST_CYCLE() + { + for (size_t i = 0; i < imgs.size(); ++i) + (*featuresFinder)(imgs[i], features[i]); + } + + SANITY_CHECK_NOTHING(); +} + +PERF_TEST_P( match, bestOf2Nearest, TEST_DETECTORS) +{ + Mat img1, img1_full = imread( getDataPath("stitching/boat1.jpg") ); + Mat img2, img2_full = imread( getDataPath("stitching/boat2.jpg") ); + float scale1 = (float)std::min(1.0, sqrt(WORK_MEGAPIX * 1e6 / img1_full.total())); + float scale2 = (float)std::min(1.0, sqrt(WORK_MEGAPIX * 1e6 / img2_full.total())); + resize(img1_full, img1, Size(), scale1, scale1); + resize(img2_full, img2, Size(), scale2, scale2); + + Ptr finder; + Ptr matcher; + if (GetParam() == "surf") + { + finder = makePtr(); + matcher = makePtr(false, SURF_MATCH_CONFIDENCE); + } + else if (GetParam() == "orb") + { + finder = makePtr(); + matcher = makePtr(false, ORB_MATCH_CONFIDENCE); + } + else + { + FAIL() << "Unknown 2D features type: " << GetParam(); + } + + detail::ImageFeatures features1, features2; + (*finder)(img1, features1); + (*finder)(img2, features2); + + detail::MatchesInfo pairwise_matches; + + declare.in(features1.descriptors, features2.descriptors); + + while(next()) + { + cvflann::seed_random(42);//for predictive FlannBasedMatcher + startTimer(); + (*matcher)(features1, features2, pairwise_matches); + stopTimer(); + matcher->collectGarbage(); + } + + Mat dist (pairwise_matches.H, Range::all(), Range(2, 3)); + Mat R (pairwise_matches.H, Range::all(), Range(0, 2)); + // separate transform matrix, use lower error on rotations + SANITY_CHECK(dist, 1., ERROR_ABSOLUTE); + SANITY_CHECK(R, .015, ERROR_ABSOLUTE); +} + +PERF_TEST_P( matchVector, bestOf2NearestVectorFeatures, testing::Combine( + TEST_DETECTORS, + testing::Values(2, 4, 8)) + ) +{ + Mat img1, img1_full = imread( getDataPath("stitching/boat1.jpg") ); + Mat img2, img2_full = imread( getDataPath("stitching/boat2.jpg") ); + float scale1 = (float)std::min(1.0, sqrt(WORK_MEGAPIX * 1e6 / img1_full.total())); + float scale2 = (float)std::min(1.0, sqrt(WORK_MEGAPIX * 1e6 / img2_full.total())); + resize(img1_full, img1, Size(), scale1, scale1); + resize(img2_full, img2, Size(), scale2, scale2); + + Ptr finder; + Ptr matcher; + string detectorName = get<0>(GetParam()); + int featuresVectorSize = get<1>(GetParam()); + if (detectorName == "surf") + { + finder = makePtr(); + matcher = makePtr(false, SURF_MATCH_CONFIDENCE); + } + else if (detectorName == "orb") + { + finder = makePtr(); + matcher = makePtr(false, ORB_MATCH_CONFIDENCE); + } + else + { + FAIL() << "Unknown 2D features type: " << get<0>(GetParam()); + } + + detail::ImageFeatures features1, features2; + (*finder)(img1, features1); + (*finder)(img2, features2); + vector features; + vector pairwise_matches; + for(int i = 0; i < featuresVectorSize/2; i++) + { + features.push_back(features1); + features.push_back(features2); + } + + declare.time(200); + while(next()) + { + cvflann::seed_random(42);//for predictive FlannBasedMatcher + startTimer(); + (*matcher)(features, pairwise_matches); + stopTimer(); + matcher->collectGarbage(); + } + + size_t matches_count = 0; + for (size_t i = 0; i < pairwise_matches.size(); ++i) + { + if (pairwise_matches[i].src_img_idx < 0) + continue; + + EXPECT_TRUE(pairwise_matches[i].matches.size() > 100); + EXPECT_FALSE(pairwise_matches[i].H.empty()); + ++matches_count; + } + + EXPECT_TRUE(matches_count > 0); + + SANITY_CHECK_NOTHING(); +} + +PERF_TEST_P( match, affineBestOf2Nearest, TEST_DETECTORS) +{ + Mat img1, img1_full = imread( getDataPath("stitching/s1.jpg") ); + Mat img2, img2_full = imread( getDataPath("stitching/s2.jpg") ); + float scale1 = (float)std::min(1.0, sqrt(WORK_MEGAPIX * 1e6 / img1_full.total())); + float scale2 = (float)std::min(1.0, sqrt(WORK_MEGAPIX * 1e6 / img2_full.total())); + resize(img1_full, img1, Size(), scale1, scale1); + resize(img2_full, img2, Size(), scale2, scale2); + + Ptr finder; + Ptr matcher; + if (GetParam() == "surf") + { + finder = makePtr(); + matcher = makePtr(false, false, SURF_MATCH_CONFIDENCE); + } + else if (GetParam() == "orb") + { + finder = makePtr(); + matcher = makePtr(false, false, ORB_MATCH_CONFIDENCE); + } + else + { + FAIL() << "Unknown 2D features type: " << GetParam(); + } + + detail::ImageFeatures features1, features2; + (*finder)(img1, features1); + (*finder)(img2, features2); + + detail::MatchesInfo pairwise_matches; + + declare.in(features1.descriptors, features2.descriptors); + + while(next()) + { + cvflann::seed_random(42);//for predictive FlannBasedMatcher + startTimer(); + (*matcher)(features1, features2, pairwise_matches); + stopTimer(); + matcher->collectGarbage(); + } + + // separate rotation and translation in transform matrix + Mat T (pairwise_matches.H, Range(0, 2), Range(2, 3)); + Mat R (pairwise_matches.H, Range(0, 2), Range(0, 2)); + Mat h (pairwise_matches.H, Range(2, 3), Range::all()); + SANITY_CHECK(T, 5, ERROR_ABSOLUTE); // allow 5 pixels diff in translations + SANITY_CHECK(R, .01, ERROR_ABSOLUTE); // rotations must be more precise + // last row should be precisely (0, 0, 1) as it is just added for representation in homogeneous + // coordinates + EXPECT_DOUBLE_EQ(h.at(0), 0.); + EXPECT_DOUBLE_EQ(h.at(1), 0.); + EXPECT_DOUBLE_EQ(h.at(2), 1.); +} + +PERF_TEST_P( matchVector, affineBestOf2NearestVectorFeatures, testing::Combine( + TEST_DETECTORS, + testing::Values(2, 4, 8)) + ) +{ + Mat img1, img1_full = imread( getDataPath("stitching/s1.jpg") ); + Mat img2, img2_full = imread( getDataPath("stitching/s2.jpg") ); + float scale1 = (float)std::min(1.0, sqrt(WORK_MEGAPIX * 1e6 / img1_full.total())); + float scale2 = (float)std::min(1.0, sqrt(WORK_MEGAPIX * 1e6 / img2_full.total())); + resize(img1_full, img1, Size(), scale1, scale1); + resize(img2_full, img2, Size(), scale2, scale2); + + Ptr finder; + Ptr matcher; + string detectorName = get<0>(GetParam()); + int featuresVectorSize = get<1>(GetParam()); + if (detectorName == "surf") + { + finder = makePtr(); + matcher = makePtr(false, false, SURF_MATCH_CONFIDENCE); + } + else if (detectorName == "orb") + { + finder = makePtr(); + matcher = makePtr(false, false, ORB_MATCH_CONFIDENCE); + } + else + { + FAIL() << "Unknown 2D features type: " << get<0>(GetParam()); + } + + detail::ImageFeatures features1, features2; + (*finder)(img1, features1); + (*finder)(img2, features2); + vector features; + vector pairwise_matches; + for(int i = 0; i < featuresVectorSize/2; i++) + { + features.push_back(features1); + features.push_back(features2); + } + + declare.time(200); + while(next()) + { + cvflann::seed_random(42);//for predictive FlannBasedMatcher + startTimer(); + (*matcher)(features, pairwise_matches); + stopTimer(); + matcher->collectGarbage(); + } + + size_t matches_count = 0; + for (size_t i = 0; i < pairwise_matches.size(); ++i) + { + if (pairwise_matches[i].src_img_idx < 0) + continue; + + EXPECT_TRUE(pairwise_matches[i].matches.size() > 400); + EXPECT_FALSE(pairwise_matches[i].H.empty()); + ++matches_count; + } + + EXPECT_TRUE(matches_count > 0); + + SANITY_CHECK_NOTHING(); +} diff --git a/modules/stitching/perf/perf_stich.cpp b/modules/stitching/perf/perf_stich.cpp index 74fd1ccaf9..5a6d0237e9 100644 --- a/modules/stitching/perf/perf_stich.cpp +++ b/modules/stitching/perf/perf_stich.cpp @@ -1,12 +1,11 @@ #include "perf_precomp.hpp" #include "opencv2/imgcodecs.hpp" -#include "opencv2/flann.hpp" #include "opencv2/opencv_modules.hpp" using namespace std; using namespace cv; using namespace perf; -using std::tr1::make_tuple; +using std::tr1::tuple; using std::tr1::get; #define SURF_MATCH_CONFIDENCE 0.65f @@ -14,15 +13,14 @@ using std::tr1::get; #define WORK_MEGAPIX 0.6 typedef TestBaseWithParam stitch; -typedef TestBaseWithParam match; -typedef std::tr1::tuple matchVector_t; -typedef TestBaseWithParam matchVector; +typedef TestBaseWithParam > stitchDatasets; -#ifdef HAVE_OPENCV_XFEATURES2D_TODO_FIND_WHY_SURF_IS_NOT_ABLE_TO_STITCH_PANOS +#ifdef HAVE_OPENCV_XFEATURES2D #define TEST_DETECTORS testing::Values("surf", "orb") #else #define TEST_DETECTORS testing::Values("orb") #endif +#define AFFINE_DATASETS testing::Values("s", "budapest", "newspaper", "prague") PERF_TEST_P(stitch, a123, TEST_DETECTORS) { @@ -93,118 +91,101 @@ PERF_TEST_P(stitch, b12, TEST_DETECTORS) stopTimer(); } + EXPECT_NEAR(pano.size().width, 1117, 50); + EXPECT_NEAR(pano.size().height, 642, 30); + Mat pano_small; - if (!pano.empty()) - resize(pano, pano_small, Size(320, 240), 0, 0, INTER_AREA); + resize(pano, pano_small, Size(320, 240), 0, 0, INTER_AREA); - SANITY_CHECK(pano_small, 5); + // results from orb and surf are slightly different (but both of them are good). Regression data + // are for orb. + /* transformations are: + orb: + [0.99213386, 0.062509097, -351.83731; + -0.073042989, 1.0615162, -89.869858; + 0.0005330033, -4.0937066e-05, 1] + surf: + [1.0034728, 0.022535477, -352.76849; + -0.080653802, 1.0742083, -89.602058; + 0.0004876224, 0.00012311155, 1] + */ + if (GetParam() == "orb") + SANITY_CHECK(pano_small, 5); + else + SANITY_CHECK_NOTHING(); } -PERF_TEST_P( match, bestOf2Nearest, TEST_DETECTORS) +PERF_TEST_P(stitchDatasets, affine, testing::Combine(AFFINE_DATASETS, TEST_DETECTORS)) { - Mat img1, img1_full = imread( getDataPath("stitching/b1.png") ); - Mat img2, img2_full = imread( getDataPath("stitching/b2.png") ); - float scale1 = (float)std::min(1.0, sqrt(WORK_MEGAPIX * 1e6 / img1_full.total())); - float scale2 = (float)std::min(1.0, sqrt(WORK_MEGAPIX * 1e6 / img2_full.total())); - resize(img1_full, img1, Size(), scale1, scale1); - resize(img2_full, img2, Size(), scale2, scale2); + string dataset = get<0>(GetParam()); + string detector = get<1>(GetParam()); - Ptr finder; - Ptr matcher; - if (GetParam() == "surf") - { - finder = makePtr(); - matcher = makePtr(false, SURF_MATCH_CONFIDENCE); - } - else if (GetParam() == "orb") - { - finder = makePtr(); - matcher = makePtr(false, ORB_MATCH_CONFIDENCE); - } + Mat pano; + vector imgs; + int width, height, allowed_diff = 10; + Ptr featuresFinder; + + if(detector == "orb") + featuresFinder = makePtr(); else + featuresFinder = makePtr(); + + if(dataset == "budapest") { - FAIL() << "Unknown 2D features type: " << GetParam(); + imgs.push_back(imread(getDataPath("stitching/budapest1.jpg"))); + imgs.push_back(imread(getDataPath("stitching/budapest2.jpg"))); + imgs.push_back(imread(getDataPath("stitching/budapest3.jpg"))); + imgs.push_back(imread(getDataPath("stitching/budapest4.jpg"))); + imgs.push_back(imread(getDataPath("stitching/budapest5.jpg"))); + imgs.push_back(imread(getDataPath("stitching/budapest6.jpg"))); + width = 2313; + height = 1158; + // this dataset is big, the results between surf and orb differ slightly, + // but both are still good + allowed_diff = 27; + } + else if (dataset == "newspaper") + { + imgs.push_back(imread(getDataPath("stitching/newspaper1.jpg"))); + imgs.push_back(imread(getDataPath("stitching/newspaper2.jpg"))); + imgs.push_back(imread(getDataPath("stitching/newspaper3.jpg"))); + imgs.push_back(imread(getDataPath("stitching/newspaper4.jpg"))); + width = 1791; + height = 1136; + // we need to boost ORB number of features to be able to stitch this dataset + // SURF works just fine with default settings + if(detector == "orb") + featuresFinder = makePtr(Size(3,1), 3000); + } + else if (dataset == "prague") + { + imgs.push_back(imread(getDataPath("stitching/prague1.jpg"))); + imgs.push_back(imread(getDataPath("stitching/prague2.jpg"))); + width = 983; + height = 1759; + } + else // dataset == "s" + { + imgs.push_back(imread(getDataPath("stitching/s1.jpg"))); + imgs.push_back(imread(getDataPath("stitching/s2.jpg"))); + width = 1815; + height = 700; } - detail::ImageFeatures features1, features2; - (*finder)(img1, features1); - (*finder)(img2, features2); - - detail::MatchesInfo pairwise_matches; - - declare.in(features1.descriptors, features2.descriptors); + declare.time(30 * 20).iterations(20); while(next()) { - cvflann::seed_random(42);//for predictive FlannBasedMatcher + Ptr stitcher = Stitcher::create(Stitcher::SCANS, false); + stitcher->setFeaturesFinder(featuresFinder); + startTimer(); - (*matcher)(features1, features2, pairwise_matches); + stitcher->stitch(imgs, pano); stopTimer(); - matcher->collectGarbage(); } - std::vector& matches = pairwise_matches.matches; - if (GetParam() == "orb") matches.resize(0); - for(size_t q = 0; q < matches.size(); ++q) - if (matches[q].imgIdx < 0) { matches.resize(q); break;} - SANITY_CHECK_MATCHES(matches); -} - -PERF_TEST_P( matchVector, bestOf2NearestVectorFeatures, testing::Combine( - TEST_DETECTORS, - testing::Values(2, 4, 8)) - ) -{ - Mat img1, img1_full = imread( getDataPath("stitching/b1.png") ); - Mat img2, img2_full = imread( getDataPath("stitching/b2.png") ); - float scale1 = (float)std::min(1.0, sqrt(WORK_MEGAPIX * 1e6 / img1_full.total())); - float scale2 = (float)std::min(1.0, sqrt(WORK_MEGAPIX * 1e6 / img2_full.total())); - resize(img1_full, img1, Size(), scale1, scale1); - resize(img2_full, img2, Size(), scale2, scale2); - - Ptr finder; - Ptr matcher; - string detectorName = get<0>(GetParam()); - int featuresVectorSize = get<1>(GetParam()); - if (detectorName == "surf") - { - finder = makePtr(); - matcher = makePtr(false, SURF_MATCH_CONFIDENCE); - } - else if (detectorName == "orb") - { - finder = makePtr(); - matcher = makePtr(false, ORB_MATCH_CONFIDENCE); - } - else - { - FAIL() << "Unknown 2D features type: " << get<0>(GetParam()); - } - - detail::ImageFeatures features1, features2; - (*finder)(img1, features1); - (*finder)(img2, features2); - vector features; - vector pairwise_matches; - for(int i = 0; i < featuresVectorSize/2; i++) - { - features.push_back(features1); - features.push_back(features2); - } - - declare.time(200); - while(next()) - { - cvflann::seed_random(42);//for predictive FlannBasedMatcher - startTimer(); - (*matcher)(features, pairwise_matches); - stopTimer(); - matcher->collectGarbage(); - } - - - std::vector& matches = pairwise_matches[detectorName == "surf" ? 1 : 0].matches; - for(size_t q = 0; q < matches.size(); ++q) - if (matches[q].imgIdx < 0) { matches.resize(q); break;} - SANITY_CHECK_MATCHES(matches); + EXPECT_NEAR(pano.size().width, width, allowed_diff); + EXPECT_NEAR(pano.size().height, height, allowed_diff); + + SANITY_CHECK_NOTHING(); } diff --git a/modules/stitching/src/matchers.cpp b/modules/stitching/src/matchers.cpp index df424a797a..edd6b61931 100644 --- a/modules/stitching/src/matchers.cpp +++ b/modules/stitching/src/matchers.cpp @@ -107,6 +107,35 @@ private: }; +struct FindFeaturesBody : ParallelLoopBody +{ + FindFeaturesBody(FeaturesFinder &finder, InputArrayOfArrays images, + std::vector &features, const std::vector > *rois) + : finder_(finder), images_(images), features_(features), rois_(rois) {} + + void operator ()(const Range &r) const + { + for (int i = r.start; i < r.end; ++i) + { + Mat image = images_.getMat(i); + if (rois_) + finder_(image, features_[i], (*rois_)[i]); + else + finder_(image, features_[i]); + } + } + +private: + FeaturesFinder &finder_; + InputArrayOfArrays images_; + std::vector &features_; + const std::vector > *rois_; + + // to cease visual studio warning + void operator =(const FindFeaturesBody&); +}; + + ////////////////////////////////////////////////////////////////////////////// typedef std::set > MatchesSet; @@ -324,6 +353,55 @@ void FeaturesFinder::operator ()(InputArray image, ImageFeatures &features, cons } +void FeaturesFinder::operator ()(InputArrayOfArrays images, std::vector &features) +{ + size_t count = images.total(); + features.resize(count); + + FindFeaturesBody body(*this, images, features, NULL); + if (isThreadSafe()) + parallel_for_(Range(0, static_cast(count)), body); + else + body(Range(0, static_cast(count))); +} + + +void FeaturesFinder::operator ()(InputArrayOfArrays images, std::vector &features, + const std::vector > &rois) +{ + CV_Assert(rois.size() == images.total()); + size_t count = images.total(); + features.resize(count); + + FindFeaturesBody body(*this, images, features, &rois); + if (isThreadSafe()) + parallel_for_(Range(0, static_cast(count)), body); + else + body(Range(0, static_cast(count))); +} + + +bool FeaturesFinder::isThreadSafe() const +{ + if (ocl::useOpenCL()) + { + return false; + } + if (dynamic_cast(this)) + { + return true; + } + else if (dynamic_cast(this)) + { + return true; + } + else + { + return false; + } +} + + SurfFeaturesFinder::SurfFeaturesFinder(double hess_thresh, int num_octaves, int num_layers, int num_octaves_descr, int num_layers_descr) { @@ -722,5 +800,57 @@ void BestOf2NearestRangeMatcher::operator ()(const std::vector &f } +void AffineBestOf2NearestMatcher::match(const ImageFeatures &features1, const ImageFeatures &features2, + MatchesInfo &matches_info) +{ + (*impl_)(features1, features2, matches_info); + + // Check if it makes sense to find transform + if (matches_info.matches.size() < static_cast(num_matches_thresh1_)) + return; + + // Construct point-point correspondences for transform estimation + Mat src_points(1, static_cast(matches_info.matches.size()), CV_32FC2); + Mat dst_points(1, static_cast(matches_info.matches.size()), CV_32FC2); + for (size_t i = 0; i < matches_info.matches.size(); ++i) + { + const cv::DMatch &m = matches_info.matches[i]; + src_points.at(0, static_cast(i)) = features1.keypoints[m.queryIdx].pt; + dst_points.at(0, static_cast(i)) = features2.keypoints[m.trainIdx].pt; + } + + // Find pair-wise motion + if (full_affine_) + matches_info.H = estimateAffine2D(src_points, dst_points, matches_info.inliers_mask); + else + matches_info.H = estimateAffinePartial2D(src_points, dst_points, matches_info.inliers_mask); + + if (matches_info.H.empty()) { + // could not find transformation + matches_info.confidence = 0; + matches_info.num_inliers = 0; + return; + } + + // Find number of inliers + matches_info.num_inliers = 0; + for (size_t i = 0; i < matches_info.inliers_mask.size(); ++i) + if (matches_info.inliers_mask[i]) + matches_info.num_inliers++; + + // These coeffs are from paper M. Brown and D. Lowe. "Automatic Panoramic + // Image Stitching using Invariant Features" + matches_info.confidence = + matches_info.num_inliers / (8 + 0.3 * matches_info.matches.size()); + + /* should we remove matches between too close images? */ + // matches_info.confidence = matches_info.confidence > 3. ? 0. : matches_info.confidence; + + // extend H to represent linear tranformation in homogeneous coordinates + matches_info.H.push_back(Mat::zeros(1, 3, CV_64F)); + matches_info.H.at(2, 2) = 1; +} + + } // namespace detail } // namespace cv diff --git a/modules/stitching/src/motion_estimators.cpp b/modules/stitching/src/motion_estimators.cpp index dd87725bb6..f76309f777 100644 --- a/modules/stitching/src/motion_estimators.cpp +++ b/modules/stitching/src/motion_estimators.cpp @@ -88,6 +88,28 @@ struct CalcRotation }; +/** + * @brief Functor calculating final tranformation by chaining linear transformations + */ +struct CalcAffineTransform +{ + CalcAffineTransform(int _num_images, + const std::vector &_pairwise_matches, + std::vector &_cameras) + : num_images(_num_images), pairwise_matches(&_pairwise_matches[0]), cameras(&_cameras[0]) {} + + void operator()(const GraphEdge &edge) + { + int pair_idx = edge.from * num_images + edge.to; + cameras[edge.to].R = cameras[edge.from].R * pairwise_matches[pair_idx].H; + } + + int num_images; + const MatchesInfo *pairwise_matches; + CameraParams *cameras; +}; + + ////////////////////////////////////////////////////////////////////////////// void calcDeriv(const Mat &err1, const Mat &err2, double h, Mat res) @@ -171,6 +193,31 @@ bool HomographyBasedEstimator::estimate( } +////////////////////////////////////////////////////////////////////////////// + +bool AffineBasedEstimator::estimate(const std::vector &features, + const std::vector &pairwise_matches, + std::vector &cameras) +{ + cameras.resize(features.size()); + const int num_images = static_cast(features.size()); + + // find maximum spaning tree on pairwise matches + cv::detail::Graph span_tree; + std::vector span_tree_centers; + // uses number of inliers as weights + findMaxSpanningTree(num_images, pairwise_matches, span_tree, + span_tree_centers); + + // compute final transform by chaining H together + span_tree.walkBreadthFirst( + span_tree_centers[0], + CalcAffineTransform(num_images, pairwise_matches, cameras)); + // this estimator never fails + return true; +} + + ////////////////////////////////////////////////////////////////////////////// bool BundleAdjusterBase::estimate(const std::vector &features, @@ -598,6 +645,243 @@ void BundleAdjusterRay::calcJacobian(Mat &jac) } } +////////////////////////////////////////////////////////////////////////////// + +void BundleAdjusterAffine::setUpInitialCameraParams(const std::vector &cameras) +{ + cam_params_.create(num_images_ * 6, 1, CV_64F); + for (size_t i = 0; i < static_cast(num_images_); ++i) + { + CV_Assert(cameras[i].R.type() == CV_32F); + // cameras[i].R is + // a b tx + // c d ty + // 0 0 1. (optional) + // cam_params_ model for LevMarq is + // (a, b, tx, c, d, ty) + Mat params (2, 3, CV_64F, cam_params_.ptr() + i * 6); + cameras[i].R.rowRange(0, 2).convertTo(params, CV_64F); + } +} + + +void BundleAdjusterAffine::obtainRefinedCameraParams(std::vector &cameras) const +{ + for (int i = 0; i < num_images_; ++i) + { + // cameras[i].R will be + // a b tx + // c d ty + // 0 0 1 + cameras[i].R = Mat::eye(3, 3, CV_32F); + Mat params = cam_params_.rowRange(i * 6, i * 6 + 6).reshape(1, 2); + params.convertTo(cameras[i].R.rowRange(0, 2), CV_32F); + } +} + + +void BundleAdjusterAffine::calcError(Mat &err) +{ + err.create(total_num_matches_ * 2, 1, CV_64F); + + int match_idx = 0; + for (size_t edge_idx = 0; edge_idx < edges_.size(); ++edge_idx) + { + size_t i = edges_[edge_idx].first; + size_t j = edges_[edge_idx].second; + + const ImageFeatures& features1 = features_[i]; + const ImageFeatures& features2 = features_[j]; + const MatchesInfo& matches_info = pairwise_matches_[i * num_images_ + j]; + + Mat H1 (2, 3, CV_64F, cam_params_.ptr() + i * 6); + Mat H2 (2, 3, CV_64F, cam_params_.ptr() + j * 6); + + // invert H1 + Mat H1_inv; + invertAffineTransform(H1, H1_inv); + + // convert to representation in homogeneous coordinates + Mat last_row = Mat::zeros(1, 3, CV_64F); + last_row.at(2) = 1.; + H1_inv.push_back(last_row); + H2.push_back(last_row); + + Mat_ H = H1_inv * H2; + + for (size_t k = 0; k < matches_info.matches.size(); ++k) + { + if (!matches_info.inliers_mask[k]) + continue; + + const DMatch& m = matches_info.matches[k]; + const Point2f& p1 = features1.keypoints[m.queryIdx].pt; + const Point2f& p2 = features2.keypoints[m.trainIdx].pt; + + double x = H(0,0)*p1.x + H(0,1)*p1.y + H(0,2); + double y = H(1,0)*p1.x + H(1,1)*p1.y + H(1,2); + + err.at(2 * match_idx + 0, 0) = p2.x - x; + err.at(2 * match_idx + 1, 0) = p2.y - y; + + ++match_idx; + } + } +} + + +void BundleAdjusterAffine::calcJacobian(Mat &jac) +{ + jac.create(total_num_matches_ * 2, num_images_ * 6, CV_64F); + + double val; + const double step = 1e-4; + + for (int i = 0; i < num_images_; ++i) + { + for (int j = 0; j < 6; ++j) + { + val = cam_params_.at(i * 6 + j, 0); + cam_params_.at(i * 6 + j, 0) = val - step; + calcError(err1_); + cam_params_.at(i * 6 + j, 0) = val + step; + calcError(err2_); + calcDeriv(err1_, err2_, 2 * step, jac.col(i * 6 + j)); + cam_params_.at(i * 6 + j, 0) = val; + } + } +} + + +////////////////////////////////////////////////////////////////////////////// + +void BundleAdjusterAffinePartial::setUpInitialCameraParams(const std::vector &cameras) +{ + cam_params_.create(num_images_ * 4, 1, CV_64F); + for (size_t i = 0; i < static_cast(num_images_); ++i) + { + CV_Assert(cameras[i].R.type() == CV_32F); + // cameras[i].R is + // a -b tx + // b a ty + // 0 0 1. (optional) + // cam_params_ model for LevMarq is + // (a, b, tx, ty) + double *params = cam_params_.ptr() + i * 4; + params[0] = cameras[i].R.at(0, 0); + params[1] = cameras[i].R.at(1, 0); + params[2] = cameras[i].R.at(0, 2); + params[3] = cameras[i].R.at(1, 2); + } +} + + +void BundleAdjusterAffinePartial::obtainRefinedCameraParams(std::vector &cameras) const +{ + for (size_t i = 0; i < static_cast(num_images_); ++i) + { + // cameras[i].R will be + // a -b tx + // b a ty + // 0 0 1 + // cam_params_ model for LevMarq is + // (a, b, tx, ty) + const double *params = cam_params_.ptr() + i * 4; + double transform_buf[9] = + { + params[0], -params[1], params[2], + params[1], params[0], params[3], + 0., 0., 1. + }; + Mat transform(3, 3, CV_64F, transform_buf); + transform.convertTo(cameras[i].R, CV_32F); + } +} + + +void BundleAdjusterAffinePartial::calcError(Mat &err) +{ + err.create(total_num_matches_ * 2, 1, CV_64F); + + int match_idx = 0; + for (size_t edge_idx = 0; edge_idx < edges_.size(); ++edge_idx) + { + size_t i = edges_[edge_idx].first; + size_t j = edges_[edge_idx].second; + + const ImageFeatures& features1 = features_[i]; + const ImageFeatures& features2 = features_[j]; + const MatchesInfo& matches_info = pairwise_matches_[i * num_images_ + j]; + + const double *H1_ptr = cam_params_.ptr() + i * 4; + double H1_buf[9] = + { + H1_ptr[0], -H1_ptr[1], H1_ptr[2], + H1_ptr[1], H1_ptr[0], H1_ptr[3], + 0., 0., 1. + }; + Mat H1 (3, 3, CV_64F, H1_buf); + const double *H2_ptr = cam_params_.ptr() + j * 4; + double H2_buf[9] = + { + H2_ptr[0], -H2_ptr[1], H2_ptr[2], + H2_ptr[1], H2_ptr[0], H2_ptr[3], + 0., 0., 1. + }; + Mat H2 (3, 3, CV_64F, H2_buf); + + // invert H1 + Mat H1_aff (H1, Range(0, 2)); + double H1_inv_buf[6]; + Mat H1_inv (2, 3, CV_64F, H1_inv_buf); + invertAffineTransform(H1_aff, H1_inv); + H1_inv.copyTo(H1_aff); + + Mat_ H = H1 * H2; + + for (size_t k = 0; k < matches_info.matches.size(); ++k) + { + if (!matches_info.inliers_mask[k]) + continue; + + const DMatch& m = matches_info.matches[k]; + const Point2f& p1 = features1.keypoints[m.queryIdx].pt; + const Point2f& p2 = features2.keypoints[m.trainIdx].pt; + + double x = H(0,0)*p1.x + H(0,1)*p1.y + H(0,2); + double y = H(1,0)*p1.x + H(1,1)*p1.y + H(1,2); + + err.at(2 * match_idx + 0, 0) = p2.x - x; + err.at(2 * match_idx + 1, 0) = p2.y - y; + + ++match_idx; + } + } +} + + +void BundleAdjusterAffinePartial::calcJacobian(Mat &jac) +{ + jac.create(total_num_matches_ * 2, num_images_ * 4, CV_64F); + + double val; + const double step = 1e-4; + + for (int i = 0; i < num_images_; ++i) + { + for (int j = 0; j < 4; ++j) + { + val = cam_params_.at(i * 4 + j, 0); + cam_params_.at(i * 4 + j, 0) = val - step; + calcError(err1_); + cam_params_.at(i * 4 + j, 0) = val + step; + calcError(err2_); + calcDeriv(err1_, err2_, 2 * step, jac.col(i * 4 + j)); + cam_params_.at(i * 4 + j, 0) = val; + } + } +} + ////////////////////////////////////////////////////////////////////////////// diff --git a/modules/stitching/src/stitcher.cpp b/modules/stitching/src/stitcher.cpp index 19d3924337..905e5a938a 100644 --- a/modules/stitching/src/stitcher.cpp +++ b/modules/stitching/src/stitcher.cpp @@ -91,6 +91,34 @@ Stitcher Stitcher::createDefault(bool try_use_gpu) } +Ptr Stitcher::create(Mode mode, bool try_use_gpu) +{ + Stitcher stit = createDefault(try_use_gpu); + Ptr stitcher = makePtr(stit); + + switch (mode) + { + case PANORAMA: // PANORAMA is the default + // already setup + break; + + case SCANS: + stitcher->setWaveCorrection(false); + stitcher->setFeaturesMatcher(makePtr(false, try_use_gpu)); + stitcher->setBundleAdjuster(makePtr()); + stitcher->setWarper(makePtr()); + stitcher->setExposureCompensator(makePtr()); + break; + + default: + CV_Error(Error::StsBadArg, "Invalid stitching mode. Must be one of Stitcher::Mode"); + break; + } + + return stitcher; +} + + Stitcher::Status Stitcher::estimateTransform(InputArrayOfArrays images) { CV_INSTRUMENT_REGION() @@ -416,6 +444,9 @@ Stitcher::Status Stitcher::matchImages() int64 t = getTickCount(); #endif + std::vector feature_find_imgs(imgs_.size()); + std::vector > feature_find_rois(rois_.size()); + for (size_t i = 0; i < imgs_.size(); ++i) { full_img = imgs_[i]; @@ -444,17 +475,17 @@ Stitcher::Status Stitcher::matchImages() } if (rois_.empty()) - (*features_finder_)(img, features_[i]); + feature_find_imgs[i] = img; else { - std::vector rois(rois_[i].size()); + feature_find_rois[i].resize(rois_[i].size()); for (size_t j = 0; j < rois_[i].size(); ++j) { Point tl(cvRound(rois_[i][j].x * work_scale_), cvRound(rois_[i][j].y * work_scale_)); Point br(cvRound(rois_[i][j].br().x * work_scale_), cvRound(rois_[i][j].br().y * work_scale_)); - rois[j] = Rect(tl, br); + feature_find_rois[i][j] = Rect(tl, br); } - (*features_finder_)(img, features_[i], rois); + feature_find_imgs[i] = img; } features_[i].img_idx = (int)i; LOGLN("Features in image #" << i+1 << ": " << features_[i].keypoints.size()); @@ -463,10 +494,18 @@ Stitcher::Status Stitcher::matchImages() seam_est_imgs_[i] = img.clone(); } + // find features possibly in parallel + if (rois_.empty()) + (*features_finder_)(feature_find_imgs, features_); + else + (*features_finder_)(feature_find_imgs, features_, feature_find_rois); + // Do it to save memory features_finder_->collectGarbage(); full_img.release(); img.release(); + feature_find_imgs.clear(); + feature_find_rois.clear(); LOGLN("Finding features, time: " << ((getTickCount() - t) / getTickFrequency()) << " sec"); @@ -505,8 +544,16 @@ Stitcher::Status Stitcher::matchImages() Stitcher::Status Stitcher::estimateCameraParams() { - detail::HomographyBasedEstimator estimator; - if (!estimator(features_, pairwise_matches_, cameras_)) + /* TODO OpenCV ABI 4.x + get rid of this dynamic_cast hack and use estimator_ + */ + Ptr estimator; + if (dynamic_cast(features_matcher_.get())) + estimator = makePtr(); + else + estimator = makePtr(); + + if (!(*estimator)(features_, pairwise_matches_, cameras_)) return ERR_HOMOGRAPHY_EST_FAIL; for (size_t i = 0; i < cameras_.size(); ++i) diff --git a/modules/stitching/src/warpers.cpp b/modules/stitching/src/warpers.cpp index 3163fa4414..96fe7f7cb5 100644 --- a/modules/stitching/src/warpers.cpp +++ b/modules/stitching/src/warpers.cpp @@ -222,6 +222,58 @@ void PlaneWarper::detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br) } +Point2f AffineWarper::warpPoint(const Point2f &pt, InputArray K, InputArray H) +{ + Mat R, T; + getRTfromHomogeneous(H, R, T); + return PlaneWarper::warpPoint(pt, K, R, T); +} + + +Rect AffineWarper::buildMaps(Size src_size, InputArray K, InputArray H, OutputArray xmap, OutputArray ymap) +{ + Mat R, T; + getRTfromHomogeneous(H, R, T); + return PlaneWarper::buildMaps(src_size, K, R, T, xmap, ymap); +} + + +Point AffineWarper::warp(InputArray src, InputArray K, InputArray H, + int interp_mode, int border_mode, OutputArray dst) +{ + Mat R, T; + getRTfromHomogeneous(H, R, T); + return PlaneWarper::warp(src, K, R, T, interp_mode, border_mode, dst); +} + + +Rect AffineWarper::warpRoi(Size src_size, InputArray K, InputArray H) +{ + Mat R, T; + getRTfromHomogeneous(H, R, T); + return PlaneWarper::warpRoi(src_size, K, R, T); +} + + +void AffineWarper::getRTfromHomogeneous(InputArray H_, Mat &R, Mat &T) +{ + Mat H = H_.getMat(); + CV_Assert(H.size() == Size(3, 3) && H.type() == CV_32F); + + T = Mat::zeros(3, 1, CV_32F); + R = H.clone(); + + T.at(0,0) = R.at(0,2); + T.at(1,0) = R.at(1,2); + R.at(0,2) = 0.f; + R.at(1,2) = 0.f; + + // we want to compensate transform to fit into plane warper + R = R.t(); + T = (R * T) * -1; +} + + void SphericalWarper::detectResultRoi(Size src_size, Point &dst_tl, Point &dst_br) { detectResultRoiByBorder(src_size, dst_tl, dst_br); diff --git a/modules/stitching/test/ocl/test_warpers.cpp b/modules/stitching/test/ocl/test_warpers.cpp index a42ebb36c2..2b74372414 100644 --- a/modules/stitching/test/ocl/test_warpers.cpp +++ b/modules/stitching/test/ocl/test_warpers.cpp @@ -143,6 +143,27 @@ OCL_TEST_F(PlaneWarperTest, Mat) } } +typedef WarperTestBase AffineWarperTest; + +OCL_TEST_F(AffineWarperTest, Mat) +{ + for (int j = 0; j < test_loop_times; j++) + { + generateTestData(); + + Ptr creator = makePtr(); + Ptr warper = creator->create(1.0); + + OCL_OFF(warper->buildMaps(src.size(), K, R, xmap, ymap)); + OCL_ON(warper->buildMaps(usrc.size(), K, R, uxmap, uymap)); + + OCL_OFF(warper->warp(src, K, R, INTER_LINEAR, BORDER_REPLICATE, dst)); + OCL_ON(warper->warp(usrc, K, R, INTER_LINEAR, BORDER_REPLICATE, udst)); + + Near(1.5e-4); + } +} + } } // namespace cvtest::ocl #endif // HAVE_OPENCL diff --git a/modules/stitching/test/test_matchers.cpp b/modules/stitching/test/test_matchers.cpp index 6deed7b75f..61d86a6a0f 100644 --- a/modules/stitching/test/test_matchers.cpp +++ b/modules/stitching/test/test_matchers.cpp @@ -42,11 +42,11 @@ #include "test_precomp.hpp" #include "opencv2/opencv_modules.hpp" -#ifdef HAVE_OPENCV_XFEATURES2D - using namespace cv; using namespace std; +#ifdef HAVE_OPENCV_XFEATURES2D + TEST(SurfFeaturesFinder, CanFindInROIs) { Ptr finder = makePtr(); @@ -75,4 +75,27 @@ TEST(SurfFeaturesFinder, CanFindInROIs) ASSERT_EQ(bad_count, 0); } -#endif +#endif // HAVE_OPENCV_XFEATURES2D + +TEST(ParallelFeaturesFinder, IsSameWithSerial) +{ + Ptr para_finder = makePtr(); + Ptr serial_finder = makePtr(); + Mat img = imread(string(cvtest::TS::ptr()->get_data_path()) + "stitching/a3.png", IMREAD_GRAYSCALE); + + vector imgs(50, img); + detail::ImageFeatures serial_features; + vector para_features(imgs.size()); + + (*serial_finder)(img, serial_features); + (*para_finder)(imgs, para_features); + + // results must be the same + for(size_t i = 0; i < para_features.size(); ++i) + { + Mat diff_descriptors = serial_features.descriptors.getMat(ACCESS_READ) != para_features[i].descriptors.getMat(ACCESS_READ); + ASSERT_EQ(countNonZero(diff_descriptors), 0); + ASSERT_EQ(serial_features.img_size, para_features[i].img_size); + ASSERT_EQ(serial_features.keypoints.size(), para_features[i].keypoints.size()); + } +} diff --git a/modules/video/include/opencv2/video/tracking.hpp b/modules/video/include/opencv2/video/tracking.hpp index d4ccd532aa..c6ead3a42c 100644 --- a/modules/video/include/opencv2/video/tracking.hpp +++ b/modules/video/include/opencv2/video/tracking.hpp @@ -245,7 +245,7 @@ where src[i] and dst[i] are the i-th points in src and dst, respectively when fullAffine=false. @sa -getAffineTransform, getPerspectiveTransform, findHomography +estimateAffine2D, estimateAffinePartial2D, getAffineTransform, getPerspectiveTransform, findHomography */ CV_EXPORTS_W Mat estimateRigidTransform( InputArray src, InputArray dst, bool fullAffine ); @@ -306,7 +306,7 @@ sample image_alignment.cpp that demonstrates the use of the function. Note that an exception if algorithm does not converges. @sa -estimateRigidTransform, findHomography +estimateAffine2D, estimateAffinePartial2D, findHomography */ CV_EXPORTS_W double findTransformECC( InputArray templateImage, InputArray inputImage, InputOutputArray warpMatrix, int motionType = MOTION_AFFINE, diff --git a/samples/cpp/stitching.cpp b/samples/cpp/stitching.cpp index 5b4437ac9e..d0b38b4e5c 100644 --- a/samples/cpp/stitching.cpp +++ b/samples/cpp/stitching.cpp @@ -50,6 +50,7 @@ using namespace std; using namespace cv; bool try_use_gpu = false; +Stitcher::Mode mode = Stitcher::PANORAMA; vector imgs; string result_name = "result.jpg"; @@ -62,8 +63,8 @@ int main(int argc, char* argv[]) if (retval) return -1; Mat pano; - Stitcher stitcher = Stitcher::createDefault(try_use_gpu); - Stitcher::Status status = stitcher.stitch(imgs, pano); + Ptr stitcher = Stitcher::create(mode, try_use_gpu); + Stitcher::Status status = stitcher->stitch(imgs, pano); if (status != Stitcher::OK) { @@ -79,12 +80,16 @@ int main(int argc, char* argv[]) void printUsage() { cout << - "Rotation model images stitcher.\n\n" + "Images stitcher.\n\n" "stitching img1 img2 [...imgN]\n\n" "Flags:\n" " --try_use_gpu (yes|no)\n" " Try to use GPU. The default value is 'no'. All default values\n" " are for CPU mode.\n" + " --mode (panorama|scans)\n" + " Determines configuration of stitcher. The default is 'panorama',\n" + " mode suitable for creating photo panoramas. Option 'scans' is suitable\n" + " for stitching materials under affine transformation, such as scans.\n" " --output \n" " The default is 'result.jpg'.\n"; } @@ -122,6 +127,19 @@ int parseCmdArgs(int argc, char** argv) result_name = argv[i + 1]; i++; } + else if (string(argv[i]) == "--mode") + { + if (string(argv[i + 1]) == "panorama") + mode = Stitcher::PANORAMA; + else if (string(argv[i + 1]) == "scans") + mode = Stitcher::SCANS; + else + { + cout << "Bad --mode flag value\n"; + return -1; + } + i++; + } else { Mat img = imread(argv[i]); diff --git a/samples/cpp/stitching_detailed.cpp b/samples/cpp/stitching_detailed.cpp index f333bc6e36..df412e14fa 100644 --- a/samples/cpp/stitching_detailed.cpp +++ b/samples/cpp/stitching_detailed.cpp @@ -84,12 +84,16 @@ static void printUsage() " Resolution for image registration step. The default is 0.6 Mpx.\n" " --features (surf|orb)\n" " Type of features used for images matching. The default is surf.\n" + " --matcher (homography|affine)\n" + " Matcher used for pairwise image matching.\n" + " --estimator (homography|affine)\n" + " Type of estimator used for transformation estimation.\n" " --match_conf \n" " Confidence for feature matching step. The default is 0.65 for surf and 0.3 for orb.\n" " --conf_thresh \n" " Threshold for two images are from the same panorama confidence.\n" " The default is 1.0.\n" - " --ba (reproj|ray)\n" + " --ba (no|reproj|ray|affine)\n" " Bundle adjustment cost function. The default is ray.\n" " --ba_refine_mask (mask)\n" " Set refinement mask for bundle adjustment. It looks like 'x_xxx',\n" @@ -105,7 +109,7 @@ static void printUsage() " Labels description: Nm is number of matches, Ni is number of inliers,\n" " C is confidence.\n" "\nCompositing Flags:\n" - " --warp (plane|cylindrical|spherical|fisheye|stereographic|compressedPlaneA2B1|compressedPlaneA1.5B1|compressedPlanePortraitA2B1|compressedPlanePortraitA1.5B1|paniniA2B1|paniniA1.5B1|paniniPortraitA2B1|paniniPortraitA1.5B1|mercator|transverseMercator)\n" + " --warp (affine|plane|cylindrical|spherical|fisheye|stereographic|compressedPlaneA2B1|compressedPlaneA1.5B1|compressedPlanePortraitA2B1|compressedPlanePortraitA1.5B1|paniniA2B1|paniniA1.5B1|paniniPortraitA2B1|paniniPortraitA1.5B1|mercator|transverseMercator)\n" " Warp surface type. The default is 'spherical'.\n" " --seam_megapix \n" " Resolution for seam estimation step. The default is 0.1 Mpx.\n" @@ -138,6 +142,8 @@ double seam_megapix = 0.1; double compose_megapix = -1; float conf_thresh = 1.f; string features_type = "surf"; +string matcher_type = "homography"; +string estimator_type = "homography"; string ba_cost_func = "ray"; string ba_refine_mask = "xxxxx"; bool do_wave_correct = true; @@ -214,6 +220,28 @@ static int parseCmdArgs(int argc, char** argv) match_conf = 0.3f; i++; } + else if (string(argv[i]) == "--matcher") + { + if (string(argv[i + 1]) == "homography" || string(argv[i + 1]) == "affine") + matcher_type = argv[i + 1]; + else + { + cout << "Bad --matcher flag value\n"; + return -1; + } + i++; + } + else if (string(argv[i]) == "--estimator") + { + if (string(argv[i + 1]) == "homography" || string(argv[i + 1]) == "affine") + estimator_type = argv[i + 1]; + else + { + cout << "Bad --estimator flag value\n"; + return -1; + } + i++; + } else if (string(argv[i]) == "--match_conf") { match_conf = static_cast(atof(argv[i + 1])); @@ -465,18 +493,16 @@ int main(int argc, char* argv[]) t = getTickCount(); #endif vector pairwise_matches; - if (range_width==-1) - { - BestOf2NearestMatcher matcher(try_cuda, match_conf); - matcher(features, pairwise_matches); - matcher.collectGarbage(); - } + Ptr matcher; + if (matcher_type == "affine") + matcher = makePtr(false, try_cuda, match_conf); + else if (range_width==-1) + matcher = makePtr(try_cuda, match_conf); else - { - BestOf2NearestRangeMatcher matcher(range_width, try_cuda, match_conf); - matcher(features, pairwise_matches); - matcher.collectGarbage(); - } + matcher = makePtr(range_width, try_cuda, match_conf); + + (*matcher)(features, pairwise_matches); + matcher->collectGarbage(); LOGLN("Pairwise matching, time: " << ((getTickCount() - t) / getTickFrequency()) << " sec"); @@ -512,9 +538,14 @@ int main(int argc, char* argv[]) return -1; } - HomographyBasedEstimator estimator; + Ptr estimator; + if (estimator_type == "affine") + estimator = makePtr(); + else + estimator = makePtr(); + vector cameras; - if (!estimator(features, pairwise_matches, cameras)) + if (!(*estimator)(features, pairwise_matches, cameras)) { cout << "Homography estimation failed.\n"; return -1; @@ -525,12 +556,14 @@ int main(int argc, char* argv[]) Mat R; cameras[i].R.convertTo(R, CV_32F); cameras[i].R = R; - LOGLN("Initial intrinsics #" << indices[i]+1 << ":\n" << cameras[i].K()); + LOGLN("Initial camera intrinsics #" << indices[i]+1 << ":\nK:\n" << cameras[i].K() << "\nR:\n" << cameras[i].R); } Ptr adjuster; if (ba_cost_func == "reproj") adjuster = makePtr(); else if (ba_cost_func == "ray") adjuster = makePtr(); + else if (ba_cost_func == "affine") adjuster = makePtr(); + else if (ba_cost_func == "no") adjuster = makePtr(); else { cout << "Unknown bundle adjustment cost function: '" << ba_cost_func << "'.\n"; @@ -555,7 +588,7 @@ int main(int argc, char* argv[]) vector focals; for (size_t i = 0; i < cameras.size(); ++i) { - LOGLN("Camera #" << indices[i]+1 << ":\n" << cameras[i].K()); + LOGLN("Camera #" << indices[i]+1 << ":\nK:\n" << cameras[i].K() << "\nR:\n" << cameras[i].R); focals.push_back(cameras[i].focal); } @@ -612,6 +645,8 @@ int main(int argc, char* argv[]) { if (warp_type == "plane") warper_creator = makePtr(); + else if (warp_type == "affine") + warper_creator = makePtr(); else if (warp_type == "cylindrical") warper_creator = makePtr(); else if (warp_type == "spherical")