1 /**************************************************************************** 2 * 3 * ViSP, open source Visual Servoing Platform software. 4 * Copyright (C) 2005 - 2019 by Inria. All rights reserved. 5 * 6 * This software is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * See the file LICENSE.txt at the root directory of this source 11 * distribution for additional information about the GNU GPL. 12 * 13 * For using ViSP with software that can not be combined with the GNU 14 * GPL, please contact Inria about acquiring a ViSP Professional 15 * Edition License. 16 * 17 * See http://visp.inria.fr for more information. 18 * 19 * This software was developed at: 20 * Inria Rennes - Bretagne Atlantique 21 * Campus Universitaire de Beaulieu 22 * 35042 Rennes Cedex 23 * France 24 * 25 * If you have questions regarding the use of this file, please contact 26 * Inria at visp@inria.fr 27 * 28 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 29 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 30 * 31 * Description: 32 * Example of template tracking. 33 * 34 * Authors: 35 * Amaury Dame 36 * Aurelien Yol 37 * Fabien Spindler 38 * 39 *****************************************************************************/ 40 #ifndef vpTemplateTrackerMIInverseCompositional_hh 41 #define vpTemplateTrackerMIInverseCompositional_hh 42 43 #include <visp3/core/vpConfig.h> 44 45 #include <visp3/core/vpImageFilter.h> 46 #include <visp3/tt/vpTemplateTracker.h> 47 #include <visp3/tt/vpTemplateTrackerHeader.h> 48 49 #include <visp3/tt_mi/vpTemplateTrackerMI.h> 50 #include <visp3/tt_mi/vpTemplateTrackerMIBSpline.h> 51 52 /*! 53 \class vpTemplateTrackerMIInverseCompositional 54 \ingroup group_tt_mi_tracker 55 The algorithm implemented in this class is described in \cite Dame12a and 56 \cite Marchand16a. 57 */ 58 class VISP_EXPORT vpTemplateTrackerMIInverseCompositional : public vpTemplateTrackerMI 59 { 60 public: 61 /*! Minimization method. */ 62 typedef enum { USE_NEWTON, USE_LMA, USE_GRADIENT, USE_QUASINEWTON } vpMinimizationTypeMIInverseCompositional; 63 64 private: 65 vpMinimizationTypeMIInverseCompositional minimizationMethod; 66 bool CompoInitialised; 67 bool useTemplateSelect; // use only the strong gradient pixels to compute 68 // the Jabocian 69 // valeur pour calculer Quasi_Newton 70 vpColVector p_prec; 71 vpColVector G_prec; 72 vpMatrix KQuasiNewton; 73 74 // bool useAYOptim; 75 76 public: // AY Optimisation 77 void initTemplateRefBspline(unsigned int ptIndex, double &et); 78 79 protected: 80 void initCompInverse(const vpImage<unsigned char> &I); 81 void initHessienDesired(const vpImage<unsigned char> &I); 82 void trackNoPyr(const vpImage<unsigned char> &I); 83 84 public: 85 //! Default constructor. vpTemplateTrackerMIInverseCompositional()86 vpTemplateTrackerMIInverseCompositional() 87 : vpTemplateTrackerMI(), minimizationMethod(USE_LMA), CompoInitialised(false), useTemplateSelect(false), 88 p_prec(), G_prec(), KQuasiNewton() 89 { 90 } 91 explicit vpTemplateTrackerMIInverseCompositional(vpTemplateTrackerWarp *_warp); 92 93 /*! Use only the strong gradient pixels to compute the Jabobian. By default 94 * this feature is disabled. */ setUseTemplateSelect(bool b)95 void setUseTemplateSelect(bool b) { useTemplateSelect = b; } setMinimizationMethod(vpMinimizationTypeMIInverseCompositional method)96 void setMinimizationMethod(vpMinimizationTypeMIInverseCompositional method) { minimizationMethod = method; } 97 }; 98 #endif 99