~siretart/ubuntu/utopic/blender/libav10

« back to all changes in this revision

Viewing changes to extern/libmv/libmv/multiview/resection.h

  • Committer: Package Import Robot
  • Author(s): Matteo F. Vescovi
  • Date: 2012-07-23 08:54:18 UTC
  • mfrom: (14.2.16 sid)
  • mto: (14.2.19 sid)
  • mto: This revision was merged to the branch mainline in revision 42.
  • Revision ID: package-import@ubuntu.com-20120723085418-9foz30v6afaf5ffs
Tags: 2.63a-2
* debian/: Cycles support added (Closes: #658075)
  For now, this top feature has been enabled only
  on [any-amd64 any-i386] architectures because
  of OpenImageIO failing on all others
* debian/: scripts installation path changed
  from /usr/lib to /usr/share:
  + debian/patches/: patchset re-worked for path changing
  + debian/control: "Breaks" field added on yafaray-exporter

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright (c) 2009 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
// Compute the projection matrix from a set of 3D points X and their
 
22
// projections x = PX in 2D. This is useful if a point cloud is reconstructed.
 
23
//
 
24
// Algorithm is the standard DLT as described in Hartley & Zisserman, page 179.
 
25
 
 
26
#ifndef LIBMV_MULTIVIEW_RESECTION_H
 
27
#define LIBMV_MULTIVIEW_RESECTION_H
 
28
 
 
29
#include "libmv/logging/logging.h"
 
30
#include "libmv/numeric/numeric.h"
 
31
 
 
32
namespace libmv {
 
33
namespace resection {
 
34
 
 
35
// x's are 2D image coordinates, (x,y,1), and X's are homogeneous four vectors.
 
36
template<typename T>
 
37
void Resection(const Matrix<T, 2, Dynamic> &x,
 
38
               const Matrix<T, 4, Dynamic> &X,
 
39
               Matrix<T, 3, 4> *P) {
 
40
  int N = x.cols();
 
41
  assert(X.cols() == N);
 
42
 
 
43
  Matrix<T, Dynamic, 12> design(2*N, 12);
 
44
  design.setZero();
 
45
  for (int i = 0; i < N; i++) {
 
46
    T xi = x(0, i);
 
47
    T yi = x(1, i);
 
48
    // See equation (7.2) on page 179 of H&Z.
 
49
    design.template block<1,4>(2*i,     4) =    -X.col(i).transpose();
 
50
    design.template block<1,4>(2*i,     8) =  yi*X.col(i).transpose();
 
51
    design.template block<1,4>(2*i + 1, 0) =     X.col(i).transpose();
 
52
    design.template block<1,4>(2*i + 1, 8) = -xi*X.col(i).transpose();
 
53
  }
 
54
  Matrix<T, 12, 1> p;
 
55
  Nullspace(&design, &p);
 
56
  reshape(p, 3, 4, P);
 
57
}
 
58
 
 
59
}  // namespace resection
 
60
}  // namespace libmv
 
61
 
 
62
#endif  // LIBMV_MULTIVIEW_RESECTION_H