18 #ifndef PIC_COMPUTER_VISION_NELDER_MEAD_OPT_GORDON_LOWE_HPP 19 #define PIC_COMPUTER_VISION_NELDER_MEAD_OPT_GORDON_LOWE_HPP 21 #include "../util/matrix_3_x_3.hpp" 22 #include "../util/nelder_mead_opt_base.hpp" 23 #include "../computer_vision/camera_matrix.hpp" 25 #ifndef PIC_DISABLE_EIGEN 26 #ifndef PIC_EIGEN_NOT_BUNDLED 27 #include "../externals/Eigen/Dense" 29 #include <Eigen/Dense> 35 #ifndef PIC_DISABLE_EIGEN 37 #define GL_PACKED_CAMERA_SIZE 11 38 #define GL_3D_POINT_SIZE 3 43 std::vector< std::vector< Vec<2, float> > >
m;
52 this->m.push_back(m0);
53 this->m.push_back(m1);
62 unsigned int c = index * 11;
64 Eigen::Quaternion<double> reg;
69 R = reg.toRotationMatrix();
100 Eigen::Vector4d point;
101 for(
int i = 0; i <
m[index].size(); i++) {
102 point = Eigen::Vector4d(x[c], x[c + 1], x[c + 2], 1.0);
104 Eigen::Vector3d point_proj = P * point;
105 point_proj /= point_proj[2];
107 double dx = point_proj[0] -
m[index][i][0];
108 double dy = point_proj[1] -
m[index][i][1];
110 err += dx * dx + dy * dy;
125 float function(
float *x,
unsigned int n)
127 int n2 = int(
m.size() *
m[0].size());
143 Eigen::Matrix3d K_inv = K.inverse();
145 printf(
"Points: %zd\n",
m.size());
147 for(
unsigned int i = 0; i <
m.size(); i++) {
148 Eigen::Vector3d point = Eigen::Vector3d (
m[i][0],
m[i][1], 1.0);
150 point = K_inv * point;
167 static double *
prepareInputData(std::vector< Eigen::Matrix3d > &K, std::vector< Eigen::Matrix3d > &R, std::vector< Eigen::Vector3d > &t, std::vector< Eigen::Vector3d > &x,
unsigned int &ret_size)
169 if(R.size() != t.size()) {
177 int n = int (R.size());
179 double *ret =
new double[ret_size];
182 for(
int i = 0; i < n; i++) {
184 Eigen::Quaternion<double> reg(R[i]);
186 ret[c] = reg.x(); c++;
187 ret[c] = reg.y(); c++;
188 ret[c] = reg.z(); c++;
189 ret[c] = reg.w(); c++;
191 ret[c] = t[i][0]; c++;
192 ret[c] = t[i][1]; c++;
193 ret[c] = t[i][2]; c++;
195 ret[c] = K[i](0, 0); c++;
196 ret[c] = K[i](1, 1); c++;
197 ret[c] = K[i](0, 2); c++;
198 ret[c] = K[i](1, 2); c++;
201 for(
size_t i = 0; i < x.size(); i++) {
202 ret[c] = x[i][0]; c++;
203 ret[c] = x[i][1]; c++;
204 ret[c] = x[i][2]; c++;
215 #endif // PIC_COMPUTER_VISION_NELDER_MEAD_OPT_GORDON_LOWE_HPP std::vector< std::vector< Vec< 2, float > > > m
Definition: nelder_mead_opt_gordon_lowe.hpp:43
NelderMeadOptGordonLowe(std::vector< Vec< 2, float > > m0, std::vector< Vec< 2, float > > m1)
NelderMeadOptGordonLowe.
Definition: nelder_mead_opt_gordon_lowe.hpp:50
PIC_INLINE Eigen::Matrix34d getCameraMatrix(Eigen::Matrix3d &K, Eigen::Matrix3d &R, Eigen::Vector3d &t)
getCameraMatrix
Definition: camera_matrix.hpp:132
static double * prepareInputData(std::vector< Eigen::Matrix3d > &K, std::vector< Eigen::Matrix3d > &R, std::vector< Eigen::Vector3d > &t, std::vector< Eigen::Vector3d > &x, unsigned int &ret_size)
prepareInputData
Definition: nelder_mead_opt_gordon_lowe.hpp:167
#define GL_PACKED_CAMERA_SIZE
Definition: nelder_mead_opt_gordon_lowe.hpp:37
#define GL_3D_POINT_SIZE
Definition: nelder_mead_opt_gordon_lowe.hpp:38
static Eigen::Matrix34d parseCameraMatrix(float *x, unsigned int index)
Definition: nelder_mead_opt_gordon_lowe.hpp:56
The NelderMeadOptBase class.
Definition: nelder_mead_opt_base.hpp:31
static void init3DPoints(Eigen::Matrix3d K, std::vector< Vec< 2, float > > &m, std::vector< Eigen::Vector3d > &x, float distance=20.0f)
init3DPoints
Definition: nelder_mead_opt_gordon_lowe.hpp:141
Definition: nelder_mead_opt_gordon_lowe.hpp:40
Definition: bilateral_separation.hpp:25
double ProjectionError(float *x, unsigned int index)
ProjectionError.
Definition: nelder_mead_opt_gordon_lowe.hpp:91
The Vec class.
Definition: vec.hpp:35