Renesas / opencv-lib

Dependents:   RZ_A2M_Mbed_samples

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers motion_core.hpp Source File

motion_core.hpp

00001 /*M///////////////////////////////////////////////////////////////////////////////////////
00002 //
00003 //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
00004 //
00005 //  By downloading, copying, installing or using the software you agree to this license.
00006 //  If you do not agree to this license, do not download, install,
00007 //  copy or use the software.
00008 //
00009 //
00010 //                           License Agreement
00011 //                For Open Source Computer Vision Library
00012 //
00013 // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
00014 // Copyright (C) 2009-2011, Willow Garage Inc., all rights reserved.
00015 // Third party copyrights are property of their respective owners.
00016 //
00017 // Redistribution and use in source and binary forms, with or without modification,
00018 // are permitted provided that the following conditions are met:
00019 //
00020 //   * Redistribution's of source code must retain the above copyright notice,
00021 //     this list of conditions and the following disclaimer.
00022 //
00023 //   * Redistribution's in binary form must reproduce the above copyright notice,
00024 //     this list of conditions and the following disclaimer in the documentation
00025 //     and/or other materials provided with the distribution.
00026 //
00027 //   * The name of the copyright holders may not be used to endorse or promote products
00028 //     derived from this software without specific prior written permission.
00029 //
00030 // This software is provided by the copyright holders and contributors "as is" and
00031 // any express or implied warranties, including, but not limited to, the implied
00032 // warranties of merchantability and fitness for a particular purpose are disclaimed.
00033 // In no event shall the Intel Corporation or contributors be liable for any direct,
00034 // indirect, incidental, special, exemplary, or consequential damages
00035 // (including, but not limited to, procurement of substitute goods or services;
00036 // loss of use, data, or profits; or business interruption) however caused
00037 // and on any theory of liability, whether in contract, strict liability,
00038 // or tort (including negligence or otherwise) arising in any way out of
00039 // the use of this software, even if advised of the possibility of such damage.
00040 //
00041 //M*/
00042 
00043 #ifndef OPENCV_VIDEOSTAB_MOTION_CORE_HPP
00044 #define OPENCV_VIDEOSTAB_MOTION_CORE_HPP
00045 
00046 #include <cmath>
00047 #include "opencv2/core.hpp"
00048 
00049 namespace cv
00050 {
00051 namespace videostab
00052 {
00053 
00054 //! @addtogroup videostab_motion
00055 //! @{
00056 
00057 /** @brief Describes motion model between two point clouds.
00058  */
00059 enum MotionModel
00060 {
00061     MM_TRANSLATION = 0,
00062     MM_TRANSLATION_AND_SCALE = 1,
00063     MM_ROTATION = 2,
00064     MM_RIGID = 3,
00065     MM_SIMILARITY = 4,
00066     MM_AFFINE = 5,
00067     MM_HOMOGRAPHY = 6,
00068     MM_UNKNOWN = 7
00069 };
00070 
00071 /** @brief Describes RANSAC method parameters.
00072  */
00073 struct CV_EXPORTS RansacParams
00074 {
00075     int size; //!< subset size
00076     float thresh; //!< max error to classify as inlier
00077     float eps; //!< max outliers ratio
00078     float prob; //!< probability of success
00079 
00080     RansacParams() : size(0), thresh(0), eps(0), prob(0) {}
00081     /** @brief Constructor
00082     @param size Subset size.
00083     @param thresh Maximum re-projection error value to classify as inlier.
00084     @param eps Maximum ratio of incorrect correspondences.
00085     @param prob Required success probability.
00086      */
00087     RansacParams(int size, float thresh, float eps, float prob);
00088 
00089     /**
00090     @return Number of iterations that'll be performed by RANSAC method.
00091     */
00092     int niters() const
00093     {
00094         return static_cast<int>(
00095                 std::ceil(std::log(1 - prob) / std::log(1 - std::pow(1 - eps, size))));
00096     }
00097 
00098     /**
00099     @param model Motion model. See cv::videostab::MotionModel.
00100     @return Default RANSAC method parameters for the given motion model.
00101     */
00102     static RansacParams default2dMotion(MotionModel model)
00103     {
00104         CV_Assert(model < MM_UNKNOWN);
00105         if (model == MM_TRANSLATION)
00106             return RansacParams(1, 0.5f, 0.5f, 0.99f);
00107         if (model == MM_TRANSLATION_AND_SCALE)
00108             return RansacParams(2, 0.5f, 0.5f, 0.99f);
00109         if (model == MM_ROTATION)
00110             return RansacParams(1, 0.5f, 0.5f, 0.99f);
00111         if (model == MM_RIGID)
00112             return RansacParams(2, 0.5f, 0.5f, 0.99f);
00113         if (model == MM_SIMILARITY)
00114             return RansacParams(2, 0.5f, 0.5f, 0.99f);
00115         if (model == MM_AFFINE)
00116             return RansacParams(3, 0.5f, 0.5f, 0.99f);
00117         return RansacParams(4, 0.5f, 0.5f, 0.99f);
00118     }
00119 };
00120 
00121 inline RansacParams::RansacParams(int _size, float _thresh, float _eps, float _prob)
00122     : size(_size), thresh(_thresh), eps(_eps), prob(_prob) {}
00123 
00124 //! @}
00125 
00126 } // namespace videostab
00127 } // namespace cv
00128 
00129 #endif