Searches over a grid using normalised correlation. More...
#include <mfpf_norm_corr2d.h>
Public Member Functions | |
mfpf_norm_corr2d () | |
virtual | ~mfpf_norm_corr2d () |
void | set (const vil_image_view< double > &k) |
Define filter kernel to search with. | |
void | set (const vil_image_view< double > &k, double ref_x, double ref_y) |
Define filter kernel to search with. | |
virtual bool | set_model (const vcl_vector< double > &v) |
Define filter kernel to search with, expressed as a vector. | |
virtual unsigned | model_dim () |
Number of dimensions in the model. | |
void | set_overlap_f (double) |
Relative size of region used for estimating overlap. | |
const vil_image_view< double > & | kernel () const |
Filter kernel to search with. | |
void | get_kernel_vector (vcl_vector< double > &v) const |
Filter kernel to search with, expressed as a vector. | |
virtual void | get_sample_vector (const vimt_image_2d_of< float > &image, const vgl_point_2d< double > &p, const vgl_vector_2d< double > &u, vcl_vector< double > &v) |
Get sample of region around specified point in image. | |
virtual double | radius () const |
Radius of circle containing modelled region. | |
virtual double | evaluate (const vimt_image_2d_of< float > &image, const vgl_point_2d< double > &p, const vgl_vector_2d< double > &u) |
Evaluate match at p, using u to define scale and orientation. | |
virtual void | evaluate_region (const vimt_image_2d_of< float > &image, const vgl_point_2d< double > &p, const vgl_vector_2d< double > &u, vimt_image_2d_of< double > &response) |
Evaluate match at in a region around p. | |
virtual double | search_one_pose (const vimt_image_2d_of< float > &image, const vgl_point_2d< double > &p, const vgl_vector_2d< double > &u, vgl_point_2d< double > &new_p) |
Search given image around p, using u to define scale and angle. | |
bool | is_inside (const mfpf_pose &pose, const vgl_point_2d< double > &p, double f=1.0) const |
virtual bool | overlap (const mfpf_pose &pose1, const mfpf_pose &pose2) const |
Return true if modelled regions at pose1 and pose2 overlap. | |
virtual void | get_outline (vcl_vector< vgl_point_2d< double > > &pts) const |
Generate points in ref frame that represent boundary. | |
virtual void | get_image_of_model (vimt_image_2d_of< vxl_byte > &image) const |
Return an image of the kernel. | |
short | version_no () const |
Version number for I/O. | |
virtual vcl_string | is_a () const |
Name of the class. | |
virtual mfpf_point_finder * | clone () const |
Create a copy on the heap and return base class pointer. | |
virtual void | print_summary (vcl_ostream &os) const |
Print class to os. | |
virtual void | b_write (vsl_b_ostream &bfs) const |
Save class to binary file stream. | |
virtual void | b_read (vsl_b_istream &bfs) |
Load class from binary file stream. | |
bool | operator== (const mfpf_norm_corr2d &nc) const |
Test equality. | |
virtual void | set_step_size (double) |
Size of step between sample points. | |
double | step_size () const |
Size of step between sample points. | |
virtual void | set_search_area (unsigned ni, unsigned nj) |
Define search region size. | |
void | set_angle_range (unsigned nA, double dA) |
Define angle search parameters. | |
void | set_scale_range (unsigned ns, double ds) |
Define scale search parameters. | |
int | search_ni () const |
Number of points either side of centre to search along i. | |
int | search_nj () const |
Number of points either side of centre to search along j. | |
virtual double | search_one_pose_with_opt (const vimt_image_2d_of< float > &image, const vgl_point_2d< double > &p, const vgl_vector_2d< double > &u, vgl_point_2d< double > &new_p) |
Search given image around p, using u to define scale and angle. | |
virtual double | search (const vimt_image_2d_of< float > &image, const vgl_point_2d< double > &p, const vgl_vector_2d< double > &u, vgl_point_2d< double > &new_p, vgl_vector_2d< double > &new_u) |
Search given image around p, using u to define scale and orientation. | |
virtual double | search_with_opt (const vimt_image_2d_of< float > &image, const vgl_point_2d< double > &p, const vgl_vector_2d< double > &u, vgl_point_2d< double > &new_p, vgl_vector_2d< double > &new_u) |
Search given image around p, using u to define scale and orientation. | |
virtual void | grid_search_one_pose (const vimt_image_2d_of< float > &image, const vgl_point_2d< double > &p, const vgl_vector_2d< double > &u, vcl_vector< mfpf_pose > &pts, vcl_vector< double > &fit) |
Search for local optima around given point/scale/angle. | |
virtual void | multi_search_one_pose (const vimt_image_2d_of< float > &image, const vgl_point_2d< double > &p, const vgl_vector_2d< double > &u, vcl_vector< mfpf_pose > &pts, vcl_vector< double > &fit) |
Search for local optima around given point/scale/angle. | |
virtual void | grid_search (const vimt_image_2d_of< float > &image, const vgl_point_2d< double > &p, const vgl_vector_2d< double > &u, vcl_vector< mfpf_pose > &poses, vcl_vector< double > &fit) |
Search for local optima around given point/scale/angle. | |
virtual void | multi_search (const vimt_image_2d_of< float > &image, const vgl_point_2d< double > &p, const vgl_vector_2d< double > &u, vcl_vector< mfpf_pose > &poses, vcl_vector< double > &fits) |
Search for local optima around given point/scale/angle. | |
virtual void | refine_match (const vimt_image_2d_of< float > &image, vgl_point_2d< double > &p, vgl_vector_2d< double > &u, double &fit) |
Perform local optimisation to refine position,scale and angle. | |
virtual void | aligned_bounding_box (const mfpf_pose &pose, mfpf_pose &box_pose, double &wi, double &wj) const |
Computes the aligned bounding box for feature with given pose. | |
unsigned | image_level (const mfpf_pose &pose, const vimt_image_pyramid &im_pyr) const |
Select best level for searching around pose. | |
Protected Member Functions | |
bool | base_equality (const mfpf_point_finder &pf) const |
Return true if base class parameters are the same in pf. | |
Protected Attributes | |
double | step_size_ |
Size of step between sample points. | |
int | search_ni_ |
Number of points either side of centre to search. | |
int | search_nj_ |
Number of points either side of centre to search. | |
unsigned | nA_ |
Define N. angles (ie try at A+idA, i in [-nA,+nA]). | |
double | dA_ |
Angle step size (ie try at A+idA, i in [-nA,+nA]). | |
unsigned | ns_ |
Number of scales to try at. | |
double | ds_ |
Scaling factor (ie try at ((ds)^i), i in [-ns,+ns]. | |
Private Member Functions | |
void | set_defaults () |
Define default values. | |
Private Attributes | |
double | ref_x_ |
Kernel reference point (in kni_ x knj_ grid). | |
double | ref_y_ |
Kernel reference point (in kni_ x knj_ grid). | |
double | overlap_f_ |
Relative size of region used for estimating overlap. | |
vil_image_view< double > | kernel_ |
Filter kernel to search with. |
Searches over a grid using normalised correlation.
Definition at line 13 of file mfpf_norm_corr2d.h.
mfpf_norm_corr2d::mfpf_norm_corr2d | ( | ) |
Definition at line 25 of file mfpf_norm_corr2d.cxx.
mfpf_norm_corr2d::~mfpf_norm_corr2d | ( | ) | [virtual] |
Definition at line 47 of file mfpf_norm_corr2d.cxx.
void mfpf_point_finder::aligned_bounding_box | ( | const mfpf_pose & | pose, |
mfpf_pose & | box_pose, | ||
double & | wi, | ||
double & | wj | ||
) | const [virtual, inherited] |
Computes the aligned bounding box for feature with given pose.
On exit box_pose.p() gives the centre, corners are given by box_pose(+/-0.5*wi, +/-0.5*wj).
Definition at line 600 of file mfpf_point_finder.cxx.
void mfpf_norm_corr2d::b_read | ( | vsl_b_istream & | bfs | ) | [virtual] |
Load class from binary file stream.
Reimplemented from mfpf_point_finder.
Definition at line 482 of file mfpf_norm_corr2d.cxx.
void mfpf_norm_corr2d::b_write | ( | vsl_b_ostream & | bfs | ) | const [virtual] |
Save class to binary file stream.
Reimplemented from mfpf_point_finder.
Definition at line 463 of file mfpf_norm_corr2d.cxx.
bool mfpf_point_finder::base_equality | ( | const mfpf_point_finder & | pf | ) | const [protected, inherited] |
Return true if base class parameters are the same in pf.
Definition at line 627 of file mfpf_point_finder.cxx.
mfpf_point_finder * mfpf_norm_corr2d::clone | ( | ) | const [virtual] |
Create a copy on the heap and return base class pointer.
Implements mfpf_point_finder.
Definition at line 447 of file mfpf_norm_corr2d.cxx.
double mfpf_norm_corr2d::evaluate | ( | const vimt_image_2d_of< float > & | image, |
const vgl_point_2d< double > & | p, | ||
const vgl_vector_2d< double > & | u | ||
) | [virtual] |
Evaluate match at p, using u to define scale and orientation.
Returns -1*edge strength at p along direction u
Implements mfpf_point_finder.
Definition at line 240 of file mfpf_norm_corr2d.cxx.
void mfpf_norm_corr2d::evaluate_region | ( | const vimt_image_2d_of< float > & | image, |
const vgl_point_2d< double > & | p, | ||
const vgl_vector_2d< double > & | u, | ||
vimt_image_2d_of< double > & | response | ||
) | [virtual] |
Evaluate match at in a region around p.
Returns a quality of fit at a set of positions. response image (whose size and transform is set inside the function), indicates the points at which the function was evaluated. response(i,j) is the fit at the point response.world2im().inverse()(i,j). The world2im() transformation may be affine.
Implements mfpf_point_finder.
Definition at line 273 of file mfpf_norm_corr2d.cxx.
void mfpf_norm_corr2d::get_image_of_model | ( | vimt_image_2d_of< vxl_byte > & | image | ) | const [virtual] |
Return an image of the kernel.
Reimplemented from mfpf_point_finder.
Definition at line 429 of file mfpf_norm_corr2d.cxx.
void mfpf_norm_corr2d::get_kernel_vector | ( | vcl_vector< double > & | v | ) | const |
Filter kernel to search with, expressed as a vector.
Definition at line 117 of file mfpf_norm_corr2d.cxx.
void mfpf_norm_corr2d::get_outline | ( | vcl_vector< vgl_point_2d< double > > & | pts | ) | const [virtual] |
Generate points in ref frame that represent boundary.
Points of a contour around the shape. Used for display purposes.
Implements mfpf_point_finder.
Definition at line 413 of file mfpf_norm_corr2d.cxx.
void mfpf_norm_corr2d::get_sample_vector | ( | const vimt_image_2d_of< float > & | image, |
const vgl_point_2d< double > & | p, | ||
const vgl_vector_2d< double > & | u, | ||
vcl_vector< double > & | v | ||
) | [virtual] |
Get sample of region around specified point in image.
Reimplemented from mfpf_point_finder.
Definition at line 190 of file mfpf_norm_corr2d.cxx.
void mfpf_point_finder::grid_search | ( | const vimt_image_2d_of< float > & | image, |
const vgl_point_2d< double > & | p, | ||
const vgl_vector_2d< double > & | u, | ||
vcl_vector< mfpf_pose > & | pts, | ||
vcl_vector< double > & | fit | ||
) | [virtual, inherited] |
Search for local optima around given point/scale/angle.
For each angle and scale (defined by internal nA,dA,ns,ds) search in a grid around p (defined by search_ni and search_nj). Find local minima on this grid and return them in poses. Responses lie on grid in (x,y,ds,dA)
Note that an object in an image may lead to multiple responses, one at each scale and angle near to the optima. Thus the poses defined in pts should be further refined to eliminate such multiple responses.
For each angle and scale (defined by internal nA,dA,ns,ds) search in a grid around p (defined by search_ni and search_nj). Find local minima on this grid and return them in pts.
Note that an object in an image may lead to multiple responses, one at each scale and angle near to the optima. Thus the poses defined in pts should be further refined to eliminate such multiple responses.
Definition at line 452 of file mfpf_point_finder.cxx.
void mfpf_point_finder::grid_search_one_pose | ( | const vimt_image_2d_of< float > & | image, |
const vgl_point_2d< double > & | p, | ||
const vgl_vector_2d< double > & | u, | ||
vcl_vector< mfpf_pose > & | pts, | ||
vcl_vector< double > & | fit | ||
) | [virtual, inherited] |
Search for local optima around given point/scale/angle.
Search in a grid around p (defined by search_ni and search_nj). Find local minima on this grid and return append each to pts. Note: pts is not resized, so empty beforehand if necessary.
Search in a grid around p (defined by search_ni and search_nj). Find local minima on this grid and return them in pts.
Definition at line 337 of file mfpf_point_finder.cxx.
unsigned mfpf_point_finder::image_level | ( | const mfpf_pose & | pose, |
const vimt_image_pyramid & | im_pyr | ||
) | const [inherited] |
Select best level for searching around pose.
Select best level for searching around pose with finder.
Selects pyramid level with pixel sizes best matching the model pixel size at given pose.
Definition at line 575 of file mfpf_point_finder.cxx.
vcl_string mfpf_norm_corr2d::is_a | ( | ) | const [virtual] |
Name of the class.
Reimplemented from mfpf_point_finder.
Definition at line 441 of file mfpf_norm_corr2d.cxx.
bool mfpf_norm_corr2d::is_inside | ( | const mfpf_pose & | pose, |
const vgl_point_2d< double > & | p, | ||
double | f = 1.0 |
||
) | const |
Definition at line 383 of file mfpf_norm_corr2d.cxx.
const vil_image_view<double>& mfpf_norm_corr2d::kernel | ( | ) | const [inline] |
Filter kernel to search with.
Definition at line 58 of file mfpf_norm_corr2d.h.
unsigned mfpf_norm_corr2d::model_dim | ( | ) | [virtual] |
Number of dimensions in the model.
Reimplemented from mfpf_point_finder.
Definition at line 111 of file mfpf_norm_corr2d.cxx.
void mfpf_point_finder::multi_search | ( | const vimt_image_2d_of< float > & | image, |
const vgl_point_2d< double > & | p, | ||
const vgl_vector_2d< double > & | u, | ||
vcl_vector< mfpf_pose > & | poses, | ||
vcl_vector< double > & | fits | ||
) | [virtual, inherited] |
Search for local optima around given point/scale/angle.
For each angle and scale (defined by internal nA,dA,ns,ds) search in a grid around p (defined by search_ni and search_nj). Find local minima on this grid. Sub-grid estimation using parabolic fitting included. poses[i] defines result i, with corresponding fit fits[i]
Note that an object in an image may lead to multiple responses, one at each scale and angle near to the optima. Thus the poses defined in pts should be further refined to eliminate such multiple responses.
Definition at line 493 of file mfpf_point_finder.cxx.
void mfpf_point_finder::multi_search_one_pose | ( | const vimt_image_2d_of< float > & | image, |
const vgl_point_2d< double > & | p0, | ||
const vgl_vector_2d< double > & | u, | ||
vcl_vector< mfpf_pose > & | pts, | ||
vcl_vector< double > & | fit | ||
) | [virtual, inherited] |
Search for local optima around given point/scale/angle.
Search in a grid around p (defined by search_ni and search_nj). Find local minima on this grid. Perform single sub-grid optimisation by fitting a parabola in x and y and testing resulting point. Append each to pts. Note: pts is not resized, so empty beforehand if necessary.
Definition at line 367 of file mfpf_point_finder.cxx.
bool mfpf_norm_corr2d::operator== | ( | const mfpf_norm_corr2d & | nc | ) | const |
Test equality.
Definition at line 507 of file mfpf_norm_corr2d.cxx.
Return true if modelled regions at pose1 and pose2 overlap.
Checks if reference point of one is inside region of other
Reimplemented from mfpf_point_finder.
Definition at line 402 of file mfpf_norm_corr2d.cxx.
void mfpf_norm_corr2d::print_summary | ( | vcl_ostream & | os | ) | const [virtual] |
Print class to os.
Reimplemented from mfpf_point_finder.
Definition at line 456 of file mfpf_norm_corr2d.cxx.
double mfpf_norm_corr2d::radius | ( | ) | const [virtual] |
Radius of circle containing modelled region.
Implements mfpf_point_finder.
Definition at line 226 of file mfpf_norm_corr2d.cxx.
void mfpf_point_finder::refine_match | ( | const vimt_image_2d_of< float > & | image, |
vgl_point_2d< double > & | p, | ||
vgl_vector_2d< double > & | u, | ||
double & | fit | ||
) | [virtual, inherited] |
Perform local optimisation to refine position,scale and angle.
On input fit is match at p,u. On exit p,u and fit are updated. Baseclass implementation uses simplex optimisation.
Definition at line 526 of file mfpf_point_finder.cxx.
double mfpf_point_finder::search | ( | const vimt_image_2d_of< float > & | image, |
const vgl_point_2d< double > & | p, | ||
const vgl_vector_2d< double > & | u, | ||
vgl_point_2d< double > & | new_p, | ||
vgl_vector_2d< double > & | new_u | ||
) | [virtual, inherited] |
Search given image around p, using u to define scale and orientation.
On exit, new_p and new_u define position, scale and orientation of the best nearby match. Returns a quality of fit measure at that point (the smaller the better).
Default implementation calls search_one_pose(...) at multiple angles and scales. Result will be at a grid position and one of the given angle/scales. True optima can then be found by further optimisation of the point.
On exit, new_p and new_u define position, scale and orientation of the best nearby match. Returns a quality of fit measure at that point (the smaller the better).
Definition at line 241 of file mfpf_point_finder.cxx.
int mfpf_point_finder::search_ni | ( | ) | const [inline, inherited] |
Number of points either side of centre to search along i.
Definition at line 76 of file mfpf_point_finder.h.
int mfpf_point_finder::search_nj | ( | ) | const [inline, inherited] |
Number of points either side of centre to search along j.
Definition at line 79 of file mfpf_point_finder.h.
double mfpf_norm_corr2d::search_one_pose | ( | const vimt_image_2d_of< float > & | image, |
const vgl_point_2d< double > & | p, | ||
const vgl_vector_2d< double > & | u, | ||
vgl_point_2d< double > & | new_p | ||
) | [virtual] |
Search given image around p, using u to define scale and angle.
On exit, new_p defines position of the best nearby match. Returns a quality of fit measure at that point (the smaller the better).
Implements mfpf_point_finder.
Definition at line 333 of file mfpf_norm_corr2d.cxx.
double mfpf_point_finder::search_one_pose_with_opt | ( | const vimt_image_2d_of< float > & | image, |
const vgl_point_2d< double > & | p0, | ||
const vgl_vector_2d< double > & | u, | ||
vgl_point_2d< double > & | new_p | ||
) | [virtual, inherited] |
Search given image around p, using u to define scale and angle.
Evaluates responses on a grid, finds the best point on the grid, then optimises its position by fitting a parabola.
On exit, new_p defines position of the best nearby match. Returns a quality of fit measure at that point (the smaller the better).
Definition at line 193 of file mfpf_point_finder.cxx.
double mfpf_point_finder::search_with_opt | ( | const vimt_image_2d_of< float > & | image, |
const vgl_point_2d< double > & | p, | ||
const vgl_vector_2d< double > & | u, | ||
vgl_point_2d< double > & | new_p, | ||
vgl_vector_2d< double > & | new_u | ||
) | [virtual, inherited] |
Search given image around p, using u to define scale and orientation.
On exit, new_p and new_u define position, scale and orientation of the best nearby match. Returns a quality of fit measure at that point (the smaller the better). Parabolic fit used to estimate optimal position.
Default implementation calls search_one_pose(...) at multiple angles and scales. Result will be at a grid position and one of the given angle/scales. True optima can then be found by further optimisation of the point.
On exit, new_p and new_u define position, scale and orientation of the best nearby match. Returns a quality of fit measure at that point (the smaller the better).
Definition at line 283 of file mfpf_point_finder.cxx.
void mfpf_norm_corr2d::set | ( | const vil_image_view< double > & | k | ) |
Define filter kernel to search with.
Reference point set to the centre
Definition at line 81 of file mfpf_norm_corr2d.cxx.
void mfpf_norm_corr2d::set | ( | const vil_image_view< double > & | k, |
double | ref_x, | ||
double | ref_y | ||
) |
Define filter kernel to search with.
Definition at line 52 of file mfpf_norm_corr2d.cxx.
void mfpf_point_finder::set_angle_range | ( | unsigned | nA, |
double | dA | ||
) | [inherited] |
Define angle search parameters.
Definition at line 151 of file mfpf_point_finder.cxx.
void mfpf_norm_corr2d::set_defaults | ( | ) | [private] |
Define default values.
Definition at line 31 of file mfpf_norm_corr2d.cxx.
bool mfpf_norm_corr2d::set_model | ( | const vcl_vector< double > & | v | ) | [virtual] |
Define filter kernel to search with, expressed as a vector.
Reimplemented from mfpf_point_finder.
Definition at line 87 of file mfpf_norm_corr2d.cxx.
void mfpf_norm_corr2d::set_overlap_f | ( | double | f | ) |
Relative size of region used for estimating overlap.
If 0.5, then overlap requires pt inside central 50% of region.
Definition at line 136 of file mfpf_norm_corr2d.cxx.
void mfpf_point_finder::set_scale_range | ( | unsigned | ns, |
double | ds | ||
) | [inherited] |
Define scale search parameters.
Definition at line 158 of file mfpf_point_finder.cxx.
void mfpf_point_finder::set_search_area | ( | unsigned | ni, |
unsigned | nj | ||
) | [virtual, inherited] |
Define search region size.
During search, samples at points on grid [-ni,ni]x[-nj,nj], with axes defined by u.
Definition at line 144 of file mfpf_point_finder.cxx.
void mfpf_point_finder::set_step_size | ( | double | s | ) | [virtual, inherited] |
Size of step between sample points.
Definition at line 136 of file mfpf_point_finder.cxx.
double mfpf_point_finder::step_size | ( | ) | const [inline, inherited] |
Size of step between sample points.
Definition at line 62 of file mfpf_point_finder.h.
short mfpf_norm_corr2d::version_no | ( | ) | const |
Version number for I/O.
Reimplemented from mfpf_point_finder.
Definition at line 473 of file mfpf_norm_corr2d.cxx.
double mfpf_point_finder::dA_ [protected, inherited] |
Angle step size (ie try at A+idA, i in [-nA,+nA]).
Definition at line 40 of file mfpf_point_finder.h.
double mfpf_point_finder::ds_ [protected, inherited] |
Scaling factor (ie try at ((ds)^i), i in [-ns,+ns].
Definition at line 46 of file mfpf_point_finder.h.
vil_image_view<double> mfpf_norm_corr2d::kernel_ [private] |
Filter kernel to search with.
Definition at line 26 of file mfpf_norm_corr2d.h.
unsigned mfpf_point_finder::nA_ [protected, inherited] |
Define N. angles (ie try at A+idA, i in [-nA,+nA]).
Definition at line 37 of file mfpf_point_finder.h.
unsigned mfpf_point_finder::ns_ [protected, inherited] |
Number of scales to try at.
Definition at line 43 of file mfpf_point_finder.h.
double mfpf_norm_corr2d::overlap_f_ [private] |
Relative size of region used for estimating overlap.
If 0.5, then overlap requires pt inside central 50% of region.
Definition at line 23 of file mfpf_norm_corr2d.h.
double mfpf_norm_corr2d::ref_x_ [private] |
Kernel reference point (in kni_ x knj_ grid).
Definition at line 17 of file mfpf_norm_corr2d.h.
double mfpf_norm_corr2d::ref_y_ [private] |
Kernel reference point (in kni_ x knj_ grid).
Definition at line 19 of file mfpf_norm_corr2d.h.
int mfpf_point_finder::search_ni_ [protected, inherited] |
Number of points either side of centre to search.
Definition at line 31 of file mfpf_point_finder.h.
int mfpf_point_finder::search_nj_ [protected, inherited] |
Number of points either side of centre to search.
Definition at line 34 of file mfpf_point_finder.h.
double mfpf_point_finder::step_size_ [protected, inherited] |
Size of step between sample points.
Definition at line 28 of file mfpf_point_finder.h.