Blender  V2.93
libmv/simple_pipeline/reconstruction.cc
Go to the documentation of this file.
1 // Copyright (c) 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 
22 #include "libmv/logging/logging.h"
23 #include "libmv/numeric/numeric.h"
24 
25 namespace libmv {
26 
28 }
30  const EuclideanReconstruction& other) {
31  image_to_cameras_map_ = other.image_to_cameras_map_;
32  points_ = other.points_;
33 }
34 
36  const EuclideanReconstruction& other) {
37  if (&other != this) {
38  image_to_cameras_map_ = other.image_to_cameras_map_;
39  points_ = other.points_;
40  }
41  return *this;
42 }
43 
45  const Mat3& R,
46  const Vec3& t) {
47  LG << "InsertCamera " << image << ":\nR:\n" << R << "\nt:\n" << t;
48 
49  EuclideanCamera camera;
50  camera.image = image;
51  camera.R = R;
52  camera.t = t;
53 
54  image_to_cameras_map_.insert(make_pair(image, camera));
55 }
56 
57 void EuclideanReconstruction::InsertPoint(int track, const Vec3& X) {
58  LG << "InsertPoint " << track << ":\n" << X;
59  if (track >= points_.size()) {
60  points_.resize(track + 1);
61  }
62  points_[track].track = track;
63  points_[track].X = X;
64 }
65 
67  return const_cast<EuclideanCamera*>(
68  static_cast<const EuclideanReconstruction*>(this)->CameraForImage(image));
69 }
70 
72  int image) const {
73  ImageToCameraMap::const_iterator it = image_to_cameras_map_.find(image);
74  if (it == image_to_cameras_map_.end()) {
75  return NULL;
76  }
77  return &it->second;
78 }
79 
82  for (const ImageToCameraMap::value_type& image_and_camera :
83  image_to_cameras_map_) {
84  cameras.push_back(image_and_camera.second);
85  }
86  return cameras;
87 }
88 
90  return const_cast<EuclideanPoint*>(
91  static_cast<const EuclideanReconstruction*>(this)->PointForTrack(track));
92 }
93 
95  if (track < 0 || track >= points_.size()) {
96  return NULL;
97  }
98  const EuclideanPoint* point = &points_[track];
99  if (point->track == -1) {
100  return NULL;
101  }
102  return point;
103 }
104 
106  vector<EuclideanPoint> points;
107  for (int i = 0; i < points_.size(); ++i) {
108  if (points_[i].track != -1) {
109  points.push_back(points_[i]);
110  }
111  }
112  return points;
113 }
114 
116  LG << "InsertCamera " << image << ":\nP:\n" << P;
117 
118  ProjectiveCamera camera;
119  camera.image = image;
120  camera.P = P;
121 
122  image_to_cameras_map_.insert(make_pair(image, camera));
123 }
124 
126  LG << "InsertPoint " << track << ":\n" << X;
127  if (track >= points_.size()) {
128  points_.resize(track + 1);
129  }
130  points_[track].track = track;
131  points_[track].X = X;
132 }
133 
135  return const_cast<ProjectiveCamera*>(
136  static_cast<const ProjectiveReconstruction*>(this)->CameraForImage(
137  image));
138 }
139 
141  int image) const {
142  ImageToCameraMap::const_iterator it = image_to_cameras_map_.find(image);
143  if (it == image_to_cameras_map_.end()) {
144  return NULL;
145  }
146  return &it->second;
147 }
148 
150  vector<ProjectiveCamera> cameras;
151  for (const ImageToCameraMap::value_type& image_and_camera :
152  image_to_cameras_map_) {
153  cameras.push_back(image_and_camera.second);
154  }
155  return cameras;
156 }
157 
159  return const_cast<ProjectivePoint*>(
160  static_cast<const ProjectiveReconstruction*>(this)->PointForTrack(track));
161 }
162 
164  int track) const {
165  if (track < 0 || track >= points_.size()) {
166  return NULL;
167  }
168  const ProjectivePoint* point = &points_[track];
169  if (point->track == -1) {
170  return NULL;
171  }
172  return point;
173 }
174 
177  for (int i = 0; i < points_.size(); ++i) {
178  if (points_[i].track != -1) {
179  points.push_back(points_[i]);
180  }
181  }
182  return points;
183 }
184 
185 } // namespace libmv
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble t
#define X
Definition: GeomUtils.cpp:213
vector< EuclideanCamera > AllCameras() const
Returns all cameras.
EuclideanPoint * PointForTrack(int track)
Returns a pointer to the point corresponding to track.
void InsertCamera(int image, const Mat3 &R, const Vec3 &t)
EuclideanReconstruction & operator=(const EuclideanReconstruction &other)
EuclideanCamera * CameraForImage(int image)
Returns a pointer to the camera corresponding to image.
vector< EuclideanPoint > AllPoints() const
Returns all points.
vector< ProjectivePoint > AllPoints() const
Returns all points.
vector< ProjectiveCamera > AllCameras() const
Returns all cameras.
ProjectivePoint * PointForTrack(int track)
Returns a pointer to the point corresponding to track.
ProjectiveCamera * CameraForImage(int image)
Returns a pointer to the camera corresponding to image.
#define LG
static float P(float k)
Definition: math_interp.c:41
#define R
Eigen::Vector4d Vec4
Definition: numeric.h:107
Eigen::Matrix< double, 3, 3 > Mat3
Definition: numeric.h:72
Eigen::Matrix< double, 3, 4 > Mat34
Definition: numeric.h:73
Eigen::Vector3d Vec3
Definition: numeric.h:106