Blender V5.0
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
24
25namespace libmv {
26
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
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
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
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
#define X
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
#define R
Eigen::Vector4d Vec4
Definition numeric.h:110
Eigen::Matrix< double, 3, 3 > Mat3
Definition numeric.h:75
Eigen::Matrix< double, 3, 4 > Mat34
Definition numeric.h:76
std::vector< ElementType, Eigen::aligned_allocator< ElementType > > vector
Eigen::Vector3d Vec3
Definition numeric.h:109
i
Definition text_draw.cc:230