1 // -*- c-basic-offset: 4 -*- 2 /** @file 3 * 4 * !! from PTOptimise.h 1951 5 * 6 * functions to call the optimizer of panotools. 7 * 8 * @author Pablo d'Angelo <pablo.dangelo@web.de> 9 * 10 * $Id: PTOptimise.h 1951 2007-04-15 20:54:49Z dangelo $ 11 * 12 * This is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU General Public 14 * License as published by the Free Software Foundation; either 15 * version 2 of the License, or (at your option) any later version. 16 * 17 * This software is distributed in the hope that it will be useful, 18 * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 20 * Lesser General Public License for more details. 21 * 22 * You should have received a copy of the GNU General Public 23 * License along with this software. If not, see 24 * <http://www.gnu.org/licenses/>. 25 * 26 */ 27 28 #ifndef _PTOPTIMIZER_H 29 #define _PTOPTIMIZER_H 30 31 #include <algorithms/PanoramaAlgorithm.h> 32 33 #include <hugin_shared.h> 34 #include <set> 35 #include <panodata/PanoramaData.h> 36 #include <panotools/PanoToolsOptimizerWrapper.h> 37 38 namespace HuginBase { 39 40 41 /// 42 class IMPEX PTOptimizer : public PanoramaAlgorithm 43 { 44 45 public: 46 /// PTOptimizer(PanoramaData & panorama)47 explicit PTOptimizer(PanoramaData& panorama) 48 : PanoramaAlgorithm(panorama) 49 {}; 50 51 /// ~PTOptimizer()52 virtual ~PTOptimizer() 53 {} 54 55 56 public: 57 /// modifiesPanoramaData()58 virtual bool modifiesPanoramaData() const 59 { return true; } 60 61 /// calls PTools::optimize() 62 virtual bool runAlgorithm(); 63 }; 64 65 /// Pairwise ransac optimisation 66 class IMPEX RANSACOptimizer : public PanoramaAlgorithm 67 { 68 public: 69 enum Mode {AUTO, HOMOGRAPHY, RPY, RPYV, RPYVB}; 70 71 /// 72 RANSACOptimizer(PanoramaData& panorama, int i1, int i2, double maxError, Mode mode=RPY) PanoramaAlgorithm(panorama)73 : PanoramaAlgorithm(panorama), o_i1(i1), o_i2(i2), 74 o_maxError(maxError), o_mode(mode) 75 {}; 76 77 /// ~RANSACOptimizer()78 virtual ~RANSACOptimizer() 79 {} 80 81 82 public: 83 /// modifiesPanoramaData()84 virtual bool modifiesPanoramaData() const 85 { return true; } 86 87 static std::vector<int> findInliers(PanoramaData & pano, int i1, int i2, double maxError, 88 Mode mode=RPY); 89 90 /// calls PTools::optimize() 91 virtual bool runAlgorithm(); 92 93 private: 94 int o_i1, o_i2; 95 double o_maxError; 96 std::vector<int> o_inliers; 97 Mode o_mode; 98 }; 99 100 101 /// 102 class IMPEX AutoOptimise : public PTOptimizer 103 { 104 105 public: 106 /// 107 AutoOptimise(PanoramaData& panorama, bool optRoll=true) PTOptimizer(panorama)108 : PTOptimizer(panorama) 109 {}; 110 111 /// ~AutoOptimise()112 virtual ~AutoOptimise() 113 {} 114 115 116 public: 117 /// 118 static void autoOptimise(PanoramaData& pano, bool optRoll=true); 119 120 public: 121 /// runAlgorithm()122 virtual bool runAlgorithm() 123 { 124 autoOptimise(o_panorama); 125 return true; // let's hope so. 126 } 127 128 }; 129 130 /// 131 class IMPEX SmartOptimizerStub 132 { 133 public: 134 /// 135 enum OptMode { 136 OPT_POS=1, 137 OPT_B=2, 138 OPT_AC=4, 139 OPT_DE=8, 140 OPT_HFOV=16, 141 OPT_GT=32, 142 OPT_VIG=64, 143 OPT_VIGCENTRE=128, 144 OPT_EXP=256, 145 OPT_WB=512, 146 OPT_RESP=1024 147 }; 148 149 /// helper function for optvar creation 150 static OptimizeVector createOptVars(const PanoramaData& optPano, int mode, unsigned anchorImg=0); 151 }; 152 153 class IMPEX SmartOptimise : public PTOptimizer, protected SmartOptimizerStub 154 { 155 156 public: 157 /// SmartOptimise(PanoramaData & panorama)158 explicit SmartOptimise(PanoramaData& panorama) 159 : PTOptimizer(panorama) 160 {}; 161 162 /// ~SmartOptimise()163 virtual ~SmartOptimise() 164 {} 165 166 public: 167 /// 168 static void smartOptimize(PanoramaData& pano); 169 170 171 public: 172 /// runAlgorithm()173 virtual bool runAlgorithm() 174 { 175 smartOptimize(o_panorama); 176 return true; // let's hope so. 177 } 178 179 }; 180 181 }//namespace 182 183 #endif //_h 184