Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
vgl_h_matrix_2d_compute_linear Class Reference

#include <vgl_h_matrix_2d_compute_linear.h>

Inheritance diagram for vgl_h_matrix_2d_compute_linear:
Inheritance graph
[legend]

Public Member Functions

 vgl_h_matrix_2d_compute_linear (bool allow_ideal_points=false)
 Construct a vgl_h_matrix_2d_compute_linear object. More...
 
int minimum_number_of_correspondences () const override
 
void verbose (bool v)
 
bool compute (std::vector< vgl_homg_point_2d< double > > const &points1, std::vector< vgl_homg_point_2d< double > > const &points2, vgl_h_matrix_2d< double > &H)
 homography from matched points. More...
 
bool compute (std::vector< vgl_homg_line_2d< double > > const &lines1, std::vector< vgl_homg_line_2d< double > > const &lines2, vgl_h_matrix_2d< double > &H)
 homography from matched lines. More...
 
bool compute (std::vector< vgl_homg_line_2d< double > > const &lines1, std::vector< vgl_homg_line_2d< double > > const &lines2, std::vector< double > const &weights, vgl_h_matrix_2d< double > &H)
 homography from matched lines with a weight vector. More...
 
bool compute (std::vector< vgl_homg_point_2d< double > > const &points1, std::vector< vgl_homg_point_2d< double > > const &points2, std::vector< vgl_homg_line_2d< double > > const &lines1, std::vector< vgl_homg_line_2d< double > > const &lines2, vgl_h_matrix_2d< double > &H)
 homography from matched points and lines. More...
 
vgl_h_matrix_2d< double > compute (std::vector< vgl_homg_point_2d< double > > const &p1, std::vector< vgl_homg_point_2d< double > > const &p2)
 homography from matched points - return h_matrix. More...
 
vgl_h_matrix_2d< double > compute (std::vector< vgl_homg_line_2d< double > > const &l1, std::vector< vgl_homg_line_2d< double > > const &l2)
 homography from matched lines - return h_matrix. More...
 
vgl_h_matrix_2d< double > compute (std::vector< vgl_homg_line_2d< double > > const &l1, std::vector< vgl_homg_line_2d< double > > const &l2, std::vector< double > const &weights)
 homography from matched lines with weight vector - return h_matrix. More...
 
vgl_h_matrix_2d< double > compute (std::vector< vgl_homg_point_2d< double > > const &p1, std::vector< vgl_homg_point_2d< double > > const &p2, std::vector< vgl_homg_line_2d< double > > const &l1, std::vector< vgl_homg_line_2d< double > > const &l2)
 homography from matched points and lines - return h_matrix. More...
 

Protected Member Functions

bool compute_p (std::vector< vgl_homg_point_2d< double > > const &points1, std::vector< vgl_homg_point_2d< double > > const &points2, vgl_h_matrix_2d< double > &H) override
 compute from matched points. More...
 
bool compute_l (std::vector< vgl_homg_line_2d< double > > const &lines1, std::vector< vgl_homg_line_2d< double > > const &lines2, vgl_h_matrix_2d< double > &H) override
 compute from matched lines. More...
 
bool compute_l (std::vector< vgl_homg_line_2d< double > > const &lines1, std::vector< vgl_homg_line_2d< double > > const &lines2, std::vector< double > const &weights, vgl_h_matrix_2d< double > &H) override
 compute from matched lines with weight vector. More...
 
bool compute_pl (std::vector< vgl_homg_point_2d< double > > const &points1, std::vector< vgl_homg_point_2d< double > > const &points2, std::vector< vgl_homg_line_2d< double > > const &lines1, std::vector< vgl_homg_line_2d< double > > const &lines2, vgl_h_matrix_2d< double > &H) override
 compute from matched points and lines. More...
 
bool solve_linear_problem (int equ_count, std::vector< vgl_homg_point_2d< double > > const &p1, std::vector< vgl_homg_point_2d< double > > const &p2, vgl_h_matrix_2d< double > &H)
 Assumes all corresponding points have equal weight. More...
 
bool solve_weighted_least_squares (std::vector< vgl_homg_line_2d< double > > const &l1, std::vector< vgl_homg_line_2d< double > > const &l2, std::vector< double > const &w, vgl_h_matrix_2d< double > &H)
 for lines, the solution should be weighted by line length. More...
 

Protected Attributes

bool verbose_
 

Private Attributes

bool allow_ideal_points_
 

Detailed Description

Definition at line 24 of file vgl_h_matrix_2d_compute_linear.h.

Constructor & Destructor Documentation

◆ vgl_h_matrix_2d_compute_linear()

vgl_h_matrix_2d_compute_linear::vgl_h_matrix_2d_compute_linear ( bool  allow_ideal_points = false)

Construct a vgl_h_matrix_2d_compute_linear object.

The allow_ideal_points flag is described below.

Definition at line 19 of file vgl_h_matrix_2d_compute_linear.cxx.

Member Function Documentation

◆ compute() [1/8]

bool vgl_h_matrix_2d_compute::compute ( std::vector< vgl_homg_point_2d< double > > const &  points1,
std::vector< vgl_homg_point_2d< double > > const &  points2,
vgl_h_matrix_2d< double > &  H 
)
inlineinherited

homography from matched points.

Definition at line 52 of file vgl_h_matrix_2d_compute.h.

◆ compute() [2/8]

bool vgl_h_matrix_2d_compute::compute ( std::vector< vgl_homg_line_2d< double > > const &  lines1,
std::vector< vgl_homg_line_2d< double > > const &  lines2,
vgl_h_matrix_2d< double > &  H 
)
inlineinherited

homography from matched lines.

Definition at line 60 of file vgl_h_matrix_2d_compute.h.

◆ compute() [3/8]

bool vgl_h_matrix_2d_compute::compute ( std::vector< vgl_homg_line_2d< double > > const &  lines1,
std::vector< vgl_homg_line_2d< double > > const &  lines2,
std::vector< double > const &  weights,
vgl_h_matrix_2d< double > &  H 
)
inlineinherited

homography from matched lines with a weight vector.

Definition at line 68 of file vgl_h_matrix_2d_compute.h.

◆ compute() [4/8]

bool vgl_h_matrix_2d_compute::compute ( std::vector< vgl_homg_point_2d< double > > const &  points1,
std::vector< vgl_homg_point_2d< double > > const &  points2,
std::vector< vgl_homg_line_2d< double > > const &  lines1,
std::vector< vgl_homg_line_2d< double > > const &  lines2,
vgl_h_matrix_2d< double > &  H 
)
inlineinherited

homography from matched points and lines.

Definition at line 77 of file vgl_h_matrix_2d_compute.h.

◆ compute() [5/8]

vgl_h_matrix_2d<double> vgl_h_matrix_2d_compute::compute ( std::vector< vgl_homg_point_2d< double > > const &  p1,
std::vector< vgl_homg_point_2d< double > > const &  p2 
)
inlineinherited

homography from matched points - return h_matrix.

Definition at line 88 of file vgl_h_matrix_2d_compute.h.

◆ compute() [6/8]

vgl_h_matrix_2d<double> vgl_h_matrix_2d_compute::compute ( std::vector< vgl_homg_line_2d< double > > const &  l1,
std::vector< vgl_homg_line_2d< double > > const &  l2 
)
inlineinherited

homography from matched lines - return h_matrix.

Definition at line 94 of file vgl_h_matrix_2d_compute.h.

◆ compute() [7/8]

vgl_h_matrix_2d<double> vgl_h_matrix_2d_compute::compute ( std::vector< vgl_homg_line_2d< double > > const &  l1,
std::vector< vgl_homg_line_2d< double > > const &  l2,
std::vector< double > const &  weights 
)
inlineinherited

homography from matched lines with weight vector - return h_matrix.

Definition at line 100 of file vgl_h_matrix_2d_compute.h.

◆ compute() [8/8]

vgl_h_matrix_2d<double> vgl_h_matrix_2d_compute::compute ( std::vector< vgl_homg_point_2d< double > > const &  p1,
std::vector< vgl_homg_point_2d< double > > const &  p2,
std::vector< vgl_homg_line_2d< double > > const &  l1,
std::vector< vgl_homg_line_2d< double > > const &  l2 
)
inlineinherited

homography from matched points and lines - return h_matrix.

Definition at line 107 of file vgl_h_matrix_2d_compute.h.

◆ compute_l() [1/2]

bool vgl_h_matrix_2d_compute_linear::compute_l ( std::vector< vgl_homg_line_2d< double > > const &  lines1,
std::vector< vgl_homg_line_2d< double > > const &  lines2,
vgl_h_matrix_2d< double > &  H 
)
overrideprotectedvirtual

compute from matched lines.

Implements vgl_h_matrix_2d_compute.

Definition at line 159 of file vgl_h_matrix_2d_compute_linear.cxx.

◆ compute_l() [2/2]

bool vgl_h_matrix_2d_compute_linear::compute_l ( std::vector< vgl_homg_line_2d< double > > const &  lines1,
std::vector< vgl_homg_line_2d< double > > const &  lines2,
std::vector< double > const &  weights,
vgl_h_matrix_2d< double > &  H 
)
overrideprotectedvirtual

compute from matched lines with weight vector.

Implements vgl_h_matrix_2d_compute.

Definition at line 344 of file vgl_h_matrix_2d_compute_linear.cxx.

◆ compute_p()

bool vgl_h_matrix_2d_compute_linear::compute_p ( std::vector< vgl_homg_point_2d< double > > const &  points1,
std::vector< vgl_homg_point_2d< double > > const &  points2,
vgl_h_matrix_2d< double > &  H 
)
overrideprotectedvirtual

compute from matched points.

Implements vgl_h_matrix_2d_compute.

Definition at line 116 of file vgl_h_matrix_2d_compute_linear.cxx.

◆ compute_pl()

bool vgl_h_matrix_2d_compute_linear::compute_pl ( std::vector< vgl_homg_point_2d< double > > const &  points1,
std::vector< vgl_homg_point_2d< double > > const &  points2,
std::vector< vgl_homg_line_2d< double > > const &  lines1,
std::vector< vgl_homg_line_2d< double > > const &  lines2,
vgl_h_matrix_2d< double > &  H 
)
overrideprotectedvirtual

compute from matched points and lines.

Implements vgl_h_matrix_2d_compute.

Definition at line 214 of file vgl_h_matrix_2d_compute_linear.cxx.

◆ minimum_number_of_correspondences()

int vgl_h_matrix_2d_compute_linear::minimum_number_of_correspondences ( ) const
inlineoverridevirtual

Implements vgl_h_matrix_2d_compute.

Definition at line 70 of file vgl_h_matrix_2d_compute_linear.h.

◆ solve_linear_problem()

bool vgl_h_matrix_2d_compute_linear::solve_linear_problem ( int  equ_count,
std::vector< vgl_homg_point_2d< double > > const &  p1,
std::vector< vgl_homg_point_2d< double > > const &  p2,
vgl_h_matrix_2d< double > &  H 
)
protected

Assumes all corresponding points have equal weight.

Compute a plane-plane projectivity using linear least squares.

Returns false if the calculation fails or there are fewer than four point matches in the list. The algorithm finds the nullvector of the $2 n \times 9$ design matrix:

\[ \left(\begin{array}{ccccccccc} 0 & 0 & 0 & x_1 z_1' & y_1 z_1' & z_1 z_1' & -x_1 y_1' & -y_1 y_1' & -z_1 y_1' \cr x_1 z_1' & y_1 z_1' & z_1 z_1' & 0 & 0 & 0 & -x_1 x_1' & -y_1 x_1' & -z_1 x_1' \cr \multicolumn{9}{c}{\cdots} \cr 0 & 0 & 0 & x_n z_n' & y_n z_n' & z_n z_n' & -x_n y_n' & -y_n y_n' & -z_n y_n'\cr x_n z_n' & y_n z_n' & z_n z_n' & 0 & 0 & 0 & -x_n x_n' & -y_n x_n' & -z_n x_n' \end{array}\right) \]

If \t allow_ideal_points was set at construction, the $3 \times 9$ version which allows for ideal points is used.

Definition at line 53 of file vgl_h_matrix_2d_compute_linear.cxx.

◆ solve_weighted_least_squares()

bool vgl_h_matrix_2d_compute_linear::solve_weighted_least_squares ( std::vector< vgl_homg_line_2d< double > > const &  l1,
std::vector< vgl_homg_line_2d< double > > const &  l2,
std::vector< double > const &  w,
vgl_h_matrix_2d< double > &  H 
)
protected

for lines, the solution should be weighted by line length.

The solution equations should be weighted by the length of the corresponding line matches.

This weighting is given by w.

The two equations resulting from l1i<->l2i should be weighted by wi. Form a m x m diagonal matrix W with elements from w, with m = 2*Nc, where Nc=l1.size()=l2.size() is the number of corresponding line pairs. The weighted least squares problem is expressed as:

         (D^tWD)x = Mx = 0

where D is the design matrix and x is the 9 element vector of unknown homography matrix elements. This problem can be solved using SVD as in the case of unweighted least squares.

Definition at line 280 of file vgl_h_matrix_2d_compute_linear.cxx.

◆ verbose()

void vgl_h_matrix_2d_compute::verbose ( bool  v)
inlineinherited

Definition at line 40 of file vgl_h_matrix_2d_compute.h.

Member Data Documentation

◆ allow_ideal_points_

bool vgl_h_matrix_2d_compute_linear::allow_ideal_points_
private

Definition at line 26 of file vgl_h_matrix_2d_compute_linear.h.

◆ verbose_

bool vgl_h_matrix_2d_compute::verbose_
protectedinherited

Definition at line 114 of file vgl_h_matrix_2d_compute.h.


The documentation for this class was generated from the following files: