00001 /* 00002 * Copyright (c) 2011, Laurent Kneip, ETH Zurich 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions are met: 00007 * * Redistributions of source code must retain the above copyright 00008 * notice, this list of conditions and the following disclaimer. 00009 * * Redistributions in binary form must reproduce the above copyright 00010 * notice, this list of conditions and the following disclaimer in the 00011 * documentation and/or other materials provided with the distribution. 00012 * * Neither the name of ETH Zurich nor the 00013 * names of its contributors may be used to endorse or promote products 00014 * derived from this software without specific prior written permission. 00015 * 00016 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 00017 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00018 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00019 * DISCLAIMED. IN NO EVENT SHALL ETH ZURICH BE LIABLE FOR ANY 00020 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00021 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00022 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00023 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00024 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00025 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00026 */ 00027 00028 /* 00029 * P3p.h 00030 * 00031 * Created on: Nov 2, 2010 00032 * Author: Laurent Kneip 00033 * Description: Compute the absolute pose of a camera using three 3D-to-2D correspondences 00034 * Reference: A Novel Parametrization of the P3P-Problem for a Direct Computation of 00035 * Absolute Camera Position and Orientation 00036 * 00037 * Input: featureVectors: 3x3 matrix with UNITARY feature vectors (each column is a vector) 00038 * worldPoints: 3x3 matrix with corresponding 3D world points (each column is a point) 00039 * solutions: 3x16 matrix that will contain the solutions 00040 * form: [ 3x1 position(solution1) 3x3 orientation(solution1) 3x1 position(solution2) 3x3 orientation(solution2) ... ] 00041 * the obtained orientation matrices are defined as transforming points from the cam to the world frame 00042 * Output: int: 0 if correct execution 00043 * -1 if world points aligned 00044 */ 00045 00046 #ifndef P3P_H_ 00047 #define P3P_H_ 00048 00049 #include <TooN/TooN.h> 00050 00051 class P3p { 00052 public: 00053 P3p(); 00054 virtual ~P3p(); 00055 00056 int computePoses( TooN::Matrix<3,3> featureVectors, TooN::Matrix<3,3> worldPoints, TooN::Matrix<3,16> & solutions ); 00057 int solveQuartic( TooN::Vector<5> factors, TooN::Vector<4> & realRoots ); 00058 }; 00059 00060 #endif /* P3P_H_ */