Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes
mfpf_region_pdf Class Reference

Searches with a PDF of an arbitrary region. More...

#include <mfpf_region_pdf.h>

Inheritance diagram for mfpf_region_pdf:
Inheritance graph
[legend]

List of all members.

Public Member Functions

 mfpf_region_pdf ()
virtual ~mfpf_region_pdf ()
void set (const vcl_vector< mbl_chord > &roi, double ref_x, double ref_y, const vpdfl_pdf_base &pdf, short norm_method=1)
 Define region and PDF of region.
void set_overlap_f (double)
 Relative size of region used for estimating overlap.
virtual double radius () const
 Radius of circle containing modelled region.
const vpdfl_pdf_basepdf () const
 PDf for region vector.
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
 Create an image summarising the average model (where possible).
short version_no () const
 Version number for I/O.
virtual vcl_string is_a () const
 Name of the class.
virtual mfpf_point_finderclone () const
 Create a copy on the heap and return base class pointer.
virtual void print_summary (vcl_ostream &os) const
 Print class to os.
void print_shape (vcl_ostream &os) const
 Prints ASCII representation of shape 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_region_pdf &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 bool set_model (const vcl_vector< double > &v)
 Set model to a new value when provided with a vector.
virtual unsigned model_dim ()
 Number of dimensions in the model.
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 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 roi_ni_ x roi_nj_ grid).
double ref_y_
 Kernel reference point (in roi_ni_ x roi_nj_ grid).
vcl_vector< mbl_chordroi_
 Chords defining the region of interest.
unsigned roi_ni_
 Size of bounding box of region of interest.
unsigned roi_nj_
 Size of bounding box of region of interest.
unsigned n_pixels_
 Number of pixels in region.
mbl_cloneable_ptr< vpdfl_pdf_basepdf_
 PDf for vector sampled over ROI.
short norm_method_
 Which normalisation to use (0=none, 1=linear).
double overlap_f_
 Relative size of region used for estimating overlap.

Detailed Description

Searches with a PDF of an arbitrary region.

Records a PDF of the normalised intensities in a region of interest, defined by the set of mbl_chords roi_. These are in the bounding box [0,roi_ni_)x[0,roi_nj_).

Definition at line 19 of file mfpf_region_pdf.h.


Constructor & Destructor Documentation

mfpf_region_pdf::mfpf_region_pdf ( )

Definition at line 26 of file mfpf_region_pdf.cxx.

mfpf_region_pdf::~mfpf_region_pdf ( ) [virtual]

Definition at line 53 of file mfpf_region_pdf.cxx.


Member Function Documentation

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_region_pdf::b_read ( vsl_b_istream bfs) [virtual]

Load class from binary file stream.

Reimplemented from mfpf_point_finder.

Definition at line 418 of file mfpf_region_pdf.cxx.

void mfpf_region_pdf::b_write ( vsl_b_ostream bfs) const [virtual]

Save class to binary file stream.

Reimplemented from mfpf_point_finder.

Definition at line 399 of file mfpf_region_pdf.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_region_pdf::clone ( ) const [virtual]

Create a copy on the heap and return base class pointer.

Implements mfpf_point_finder.

Definition at line 351 of file mfpf_region_pdf.cxx.

double mfpf_region_pdf::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*log(p(region)) at p along direction u

Returns -1*edge strength at p along direction u

Implements mfpf_point_finder.

Definition at line 121 of file mfpf_region_pdf.cxx.

void mfpf_region_pdf::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 159 of file mfpf_region_pdf.cxx.

void mfpf_region_pdf::get_image_of_model ( vimt_image_2d_of< vxl_byte > &  image) const [virtual]

Create an image summarising the average model (where possible).

Return an image of the region of interest.

Creates an image of the mean template used for search. image.world2im() gives mapping from reference frame into raw image co-ords (including the step size).

Reimplemented from mfpf_point_finder.

Definition at line 317 of file mfpf_region_pdf.cxx.

void mfpf_region_pdf::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 303 of file mfpf_region_pdf.cxx.

void mfpf_point_finder::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, inherited]

Get sample of region around specified point in image.

Reimplemented in mfpf_grad_corr2d, and mfpf_norm_corr2d.

Definition at line 177 of file mfpf_point_finder.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_region_pdf::is_a ( ) const [virtual]

Name of the class.

Reimplemented from mfpf_point_finder.

Definition at line 345 of file mfpf_region_pdf.cxx.

bool mfpf_region_pdf::is_inside ( const mfpf_pose pose,
const vgl_point_2d< double > &  p,
double  f = 1.0 
) const

Definition at line 273 of file mfpf_region_pdf.cxx.

unsigned mfpf_point_finder::model_dim ( ) [virtual, inherited]

Number of dimensions in the model.

Number of dimensions in the model (return 0 by default).

Reimplemented in mfpf_grad_corr2d, mfpf_norm_corr2d, and mfpf_norm_corr1d.

Definition at line 171 of file mfpf_point_finder.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_region_pdf::operator== ( const mfpf_region_pdf nc) const

Test equality.

Definition at line 448 of file mfpf_region_pdf.cxx.

bool mfpf_region_pdf::overlap ( const mfpf_pose pose1,
const mfpf_pose pose2 
) const [virtual]

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 292 of file mfpf_region_pdf.cxx.

const vpdfl_pdf_base& mfpf_region_pdf::pdf ( ) const [inline]

PDf for region vector.

Definition at line 73 of file mfpf_region_pdf.h.

void mfpf_region_pdf::print_shape ( vcl_ostream &  os) const

Prints ASCII representation of shape to os.

Definition at line 377 of file mfpf_region_pdf.cxx.

void mfpf_region_pdf::print_summary ( vcl_ostream &  os) const [virtual]

Print class to os.

Reimplemented from mfpf_point_finder.

Definition at line 360 of file mfpf_region_pdf.cxx.

double mfpf_region_pdf::radius ( ) const [virtual]

Radius of circle containing modelled region.

Implements mfpf_point_finder.

Definition at line 106 of file mfpf_region_pdf.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_region_pdf::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.

Search given image around p, using u to define scale and orientation.

On exit, new_p defines position of the best nearby match. Returns a quality of fit measure at that point (the smaller the better).

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).

Implements mfpf_point_finder.

Definition at line 221 of file mfpf_region_pdf.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_region_pdf::set ( const vcl_vector< mbl_chord > &  roi,
double  ref_x,
double  ref_y,
const vpdfl_pdf_base pdf,
short  norm_method = 1 
)

Define region and PDF of region.

Definition at line 58 of file mfpf_region_pdf.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_region_pdf::set_defaults ( ) [private]

Define default values.

Definition at line 32 of file mfpf_region_pdf.cxx.

bool mfpf_point_finder::set_model ( const vcl_vector< double > &  v) [virtual, inherited]

Set model to a new value when provided with a vector.

Define model parameters (return false by default).

Reimplemented in mfpf_grad_corr2d, and mfpf_norm_corr2d.

Definition at line 165 of file mfpf_point_finder.cxx.

void mfpf_region_pdf::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 99 of file mfpf_region_pdf.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_region_pdf::version_no ( ) const

Version number for I/O.

Reimplemented from mfpf_point_finder.

Definition at line 393 of file mfpf_region_pdf.cxx.


Member Data Documentation

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.

unsigned mfpf_region_pdf::n_pixels_ [private]

Number of pixels in region.

Definition at line 36 of file mfpf_region_pdf.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.

Which normalisation to use (0=none, 1=linear).

Definition at line 42 of file mfpf_region_pdf.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_region_pdf::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 46 of file mfpf_region_pdf.h.

PDf for vector sampled over ROI.

Definition at line 39 of file mfpf_region_pdf.h.

double mfpf_region_pdf::ref_x_ [private]

Kernel reference point (in roi_ni_ x roi_nj_ grid).

Definition at line 23 of file mfpf_region_pdf.h.

double mfpf_region_pdf::ref_y_ [private]

Kernel reference point (in roi_ni_ x roi_nj_ grid).

Definition at line 25 of file mfpf_region_pdf.h.

vcl_vector<mbl_chord> mfpf_region_pdf::roi_ [private]

Chords defining the region of interest.

Definition at line 28 of file mfpf_region_pdf.h.

unsigned mfpf_region_pdf::roi_ni_ [private]

Size of bounding box of region of interest.

Definition at line 31 of file mfpf_region_pdf.h.

unsigned mfpf_region_pdf::roi_nj_ [private]

Size of bounding box of region of interest.

Definition at line 33 of file mfpf_region_pdf.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.


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