Blender V4.3
fundamental.h
Go to the documentation of this file.
1// Copyright (c) 2007, 2008, 2011 libmv authors.
2//
3// Permission is hereby granted, free of charge, to any person obtaining a copy
4// of this software and associated documentation files (the "Software"), to
5// deal in the Software without restriction, including without limitation the
6// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7// sell copies of the Software, and to permit persons to whom the Software is
8// furnished to do so, subject to the following conditions:
9//
10// The above copyright notice and this permission notice shall be included in
11// all copies or substantial portions of the Software.
12//
13// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19// IN THE SOFTWARE.
20
21#ifndef LIBMV_MULTIVIEW_FUNDAMENTAL_H_
22#define LIBMV_MULTIVIEW_FUNDAMENTAL_H_
23
24#include <vector>
25
27
28namespace libmv {
29
30void ProjectionsFromFundamental(const Mat3& F, Mat34* P1, Mat34* P2);
31void FundamentalFromProjections(const Mat34& P1, const Mat34& P2, Mat3* F);
32
37 const Mat& x2,
38 std::vector<Mat3>* F);
39
44 const Mat& x2,
45 std::vector<Mat3>* F);
46
50double NormalizedEightPointSolver(const Mat& x1, const Mat& x2, Mat3* F);
51
56
57void NormalizeFundamental(const Mat3& F, Mat3* F_normalized);
58
65double SampsonDistance(const Mat& F, const Vec2& x1, const Vec2& x2);
66
72double SymmetricEpipolarDistance(const Mat& F, const Vec2& x1, const Vec2& x2);
73
82void RelativeCameraMotion(const Mat3& R1,
83 const Vec3& t1,
84 const Mat3& R2,
85 const Vec3& t2,
86 Mat3* R,
87 Vec3* t);
88
89void EssentialFromFundamental(const Mat3& F,
90 const Mat3& K1,
91 const Mat3& K2,
92 Mat3* E);
93
94void FundamentalFromEssential(const Mat3& E,
95 const Mat3& K1,
96 const Mat3& K2,
97 Mat3* F);
98
100 const Mat3& R1, const Vec3& t1, const Mat3& R2, const Vec3& t2, Mat3* E);
101
102void MotionFromEssential(const Mat3& E,
103 std::vector<Mat3>* Rs,
104 std::vector<Vec3>* ts);
105
115int MotionFromEssentialChooseSolution(const std::vector<Mat3>& Rs,
116 const std::vector<Vec3>& ts,
117 const Mat3& K1,
118 const Vec2& x1,
119 const Mat3& K2,
120 const Vec2& x2);
121
123 const Mat3& K1,
124 const Vec2& x1,
125 const Mat3& K2,
126 const Vec2& x2,
127 Mat3* R,
128 Vec3* t);
129
133void FundamentalToEssential(const Mat3& F, Mat3* E);
134
143 // Default constructor which sets up a options for generic usage.
145
146 // Maximal number of iterations for refinement step.
148
149 // Expected average of symmetric epipolar distance between
150 // actual destination points and original ones transformed by
151 // estimated fundamental matrix.
152 //
153 // Refinement will finish as soon as average of symmetric
154 // epipolar distance is less or equal to this value.
155 //
156 // This distance is measured in the same units as input points are.
158};
159
168 const Mat& x1,
169 const Mat& x2,
171 Mat3* F);
172
173} // namespace libmv
174
175#endif // LIBMV_MULTIVIEW_FUNDAMENTAL_H_
CCL_NAMESPACE_BEGIN struct Options options
float[3][3] Mat3
Definition gpu_matrix.cc:28
#define R
double FundamentalFrom7CorrespondencesLinear(const Mat &x1, const Mat &x2, std::vector< Mat3 > *F)
void EssentialFromRt(const Mat3 &R1, const Vec3 &t1, const Mat3 &R2, const Vec3 &t2, Mat3 *E)
double SampsonDistance(const Mat &F, const Vec2 &x1, const Vec2 &x2)
void FundamentalFromEssential(const Mat3 &E, const Mat3 &K1, const Mat3 &K2, Mat3 *F)
void FundamentalFromProjections(const Mat34 &P1, const Mat34 &P2, Mat3 *F)
bool EstimateFundamentalFromCorrespondences(const Mat &x1, const Mat &x2, const EstimateFundamentalOptions &options, Mat3 *F)
Eigen::Matrix< double, 3, 3 > Mat3
Definition numeric.h:72
void EnforceFundamentalRank2Constraint(Mat3 *F)
Eigen::MatrixXd Mat
Definition numeric.h:60
void ProjectionsFromFundamental(const Mat3 &F, Mat34 *P1, Mat34 *P2)
void MotionFromEssential(const Mat3 &E, std::vector< Mat3 > *Rs, std::vector< Vec3 > *ts)
bool MotionFromEssentialAndCorrespondence(const Mat3 &E, const Mat3 &K1, const Vec2 &x1, const Mat3 &K2, const Vec2 &x2, Mat3 *R, Vec3 *t)
Eigen::Matrix< double, 3, 4 > Mat34
Definition numeric.h:73
void NormalizeFundamental(const Mat3 &F, Mat3 *F_normalized)
int MotionFromEssentialChooseSolution(const std::vector< Mat3 > &Rs, const std::vector< Vec3 > &ts, const Mat3 &K1, const Vec2 &x1, const Mat3 &K2, const Vec2 &x2)
void EssentialFromFundamental(const Mat3 &F, const Mat3 &K1, const Mat3 &K2, Mat3 *E)
double NormalizedEightPointSolver(const Mat &x1, const Mat &x2, Mat3 *F)
void RelativeCameraMotion(const Mat3 &R1, const Vec3 &t1, const Mat3 &R2, const Vec3 &t2, Mat3 *R, Vec3 *t)
Eigen::Vector3d Vec3
Definition numeric.h:106
double SymmetricEpipolarDistance(const Mat &F, const Vec2 &x1, const Vec2 &x2)
void FundamentalToEssential(const Mat3 &F, Mat3 *E)
double FundamentalFromCorrespondences7Point(const Mat &x1, const Mat &x2, std::vector< Mat3 > *F)