1 /*
2 * Copyright (C) 2007-2008 Anael Orlinski
3 *
4 * This file is part of Panomatic.
5 *
6 * Panomatic 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 *
11 * Panomatic is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with Panomatic; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20 
21 #ifndef __ransacfiltering_h
22 #define __ransacfiltering_h
23 
24 #include <vector>
25 #include "Homography.h"
26 
27 class Ransac
28 {
29 public:
30 	Ransac() : _nIter(1000), _distanceThres(25) {};
31 
32 	void filter(std::vector<PointMatchPtr>& ioMatches, std::vector<PointMatchPtr>& ioRemovedMatches);
33 	inline void setIterations(int iIters) { _nIter = iIters; }
34 	inline void setDistanceThreshold(int iDT) { _distanceThres = iDT; }
35 
36 	Homography	_bestModel;
37 
38 
39 	void transform(double iX, double iY, double &oX, double &oY);
40 
41 private:
42 
43 	double calcError(Homography *aH, PointMatch& aM);
44 
45 	int		_nIter;				// number of iterations
46 	int		_distanceThres;	// error distance threshold in pixels
47 
48 
49 };
50 
51 
52 #endif
53