-
Notifications
You must be signed in to change notification settings - Fork 17
/
P3p.hpp
63 lines (57 loc) · 2.92 KB
/
P3p.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
* Copyright (c) 2011, Laurent Kneip, ETH Zurich
* All rights reserved.
*
* 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 name of ETH Zurich nor the
* names of its 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 ETH ZURICH 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.
*/
/*
* P3p.h
*
* Created on: Nov 2, 2010
* Author: Laurent Kneip
* Description: Compute the absolute pose of a camera using three 3D-to-2D correspondences
* Reference: A Novel Parametrization of the P3P-Problem for a Direct Computation of
* Absolute Camera Position and Orientation
*
* Input: featureVectors: 3x3 matrix with UNITARY feature vectors (each column is a vector)
* worldPoints: 3x3 matrix with corresponding 3D world points (each column is a point)
* solutions: 3x16 matrix that will contain the solutions
* form: [ 3x1 position(solution1) 3x3 orientation(solution1) 3x1 position(solution2) 3x3 orientation(solution2) ... ]
* the obtained orientation matrices are defined as transforming points from the cam to the world frame
* Output: int: 0 if correct execution
* -1 if world points aligned
*/
#ifndef P3P_HPP_
#define P3P_HPP_
#include <eigen3/Eigen/Dense>
#include <eigen3/Eigen/Core>
#include <eigen3/Eigen/Dense>
#include <eigen3/Eigen/Eigen>
class P3p {
public:
P3p();
virtual ~P3p();
int computePoses( Eigen::Matrix<double, 3,3> featureVectors, Eigen::Matrix<double,3,3> worldPoints, Eigen::Matrix<double, 3,16> & solutions );
int solveQuartic( Eigen::Matrix<double, 5,1> factors, Eigen::Matrix<double,4,1> & realRoots );
};
#endif /* P3P_HPP_ */