bazar  1.3.1
Public Member Functions | Public Attributes | List of all members
planar_object_recognizer Class Reference

Planar object detector. More...

#include <planar_object_recognizer.h>

Collaboration diagram for planar_object_recognizer:
Collaboration graph
[legend]

Public Member Functions

 planar_object_recognizer ()
 empty constructor. call build, load or buildWithCache before use
 planar_object_recognizer (string directory_name)
 Create from the data stored in the directory directory_name.
 ~planar_object_recognizer (void)
bool build_with_cache (string filename, int max_point_number_on_model, int patch_size, int yape_radius, int tree_number, int nbLev, LEARNPROGRESSION LearnProgress=0)
 Build the model and save it on disk.
bool build (IplImage *model_image, int max_point_number_on_model, int patch_size, int yape_radius, int tree_number, int nbLev, LEARNPROGRESSION LearnProgress=0, int *roi=0)
void learn (int max_point_number_on_model, int patch_size, int yape_radius, int tree_number, int nbLev=5, LEARNPROGRESSION LearnProgress=0)
 Create the point recognizer (see forest field)
void save (string directory_name)
 Save data in the given directory. The directory must exist.
bool load (string directory_name)
 load data from a given directory.
bool detect (IplImage *input_image)
 Detect the object in the given input image.
void set_max_detected_pts (int max)
 set the maximum number of points we want to detect
IplImage * create_result_image (IplImage *input_image, bool p_draw_points, bool p_draw_matches, bool p_draw_object, bool p_draw_model_image, int line_width=2)
 For visualization.
void debug_model_point (int p_index_of_model_point_to_debug)
 For debugging: save generated patches for a particular point in dir patches, before and after orientation correction.
void save_one_image_per_match (IplImage *input_image, const char *matches_dir)
 For debugging: save one image per match in dir matches.
void save_one_image_per_match_model_to_input (IplImage *input_image, const char *matches_dir)
void save_one_image_per_match_input_to_model (IplImage *input_image, const char *matches_dir)
void initialize (void)
 Function called by the 2 constructors.
pair< object_keypoint, int > * search_for_existing_model_point (vector< pair< object_keypoint, int > > *tmp_model_points, float cu, float cv, int scale)
void detect_most_stable_model_points (int max_point_number_on_model, int patch_size, int view_number, double min_view_rate, LEARNPROGRESSION LearnProgress=0)
void save_image_of_model_points (int patch_size, char *filename=0)
int compute_support_for_affine_transformation (affinity *A)
bool three_random_correspondences (int *n1, int *n2, int *n3)
bool valid (affinity *A)
void default_settings (void)
 Some parameters for fine tuning: Called by the 2 constructors.
void check_target_size (IplImage *image)
Functions called by the detect() function
void detect_points (IplImage *input_image)
void preprocess_points (void)
void match_points (bool fill_match_struct=true)
bool estimate_affine_transformation (void)
bool estimate_homographic_transformation_linear_method (void)
bool estimate_homographic_transformation_nonlinear_method (void)

Public Attributes

object_keypointmodel_points
 keypoints on the object.
int model_point_number
keypointdetected_points
 Detected keypoints in the input image.
int detected_point_number
image_class_exampledetected_point_views
float * match_probabilities [hard_max_detected_pts]
 Match probabilities for each detected keypoint.
image_object_point_match matches [hard_max_detected_pts]
 Matches between the detected keypoints, and the model keypoints.
int match_number
bool object_is_detected
affinityaffine_motion
homographyH
ls_minimizer2homography_estimator
float detected_u_corner1
float detected_v_corner1
float detected_u_corner2
float detected_v_corner2
float detected_u_corner3
float detected_v_corner3
float detected_u_corner4
float detected_v_corner4
pyr_yapepoint_detector
affine_image_generator new_images_generator
object_viewobject_input_view
image_classification_forestforest
 Image classifier.
int max_detected_pts
int max_depth
bool use_bins_for_model_points
bool use_bins_for_input_image
int index_of_model_point_to_debug
int views_number
 number of generated views for finding stable points
double min_view_rate
 minimum visible rate for determining stable keypoints
double keypoint_distance_threshold
float match_score_threshold
float ransac_dist_threshold
float non_linear_refine_threshold
 Distance threshold, in pixels, for non-linear refinement.
int max_ransac_iterations
 maximum iteration number for RANSAC
int ransac_stop_support

Functions for fine tuning:

int sample_number_for_refining
void use_bins_when_creating_model_points (void)
 Activate bins when detecting model points (Default)
void dont_use_bins_when_creating_model_points (void)
 Disactivate bins when detecting model points.
void use_bins_when_detecting_input_image_points (void)
 Activate bins when detecting input image points (Default)
void dont_use_bins_when_detecting_input_image_points (void)
 Disactivate bins when detecting model points.
void set_noise_level (int noise_level)
 Default = 20.
void set_use_random_background (bool use_random_background)
 Default = false;.
void set_range_variation_for_theta (float min_theta, float max_theta)
 Global rotation. Default = [0 : 2Pi].
void set_range_variation_for_phi (float min_phi, float max_phi)
 Skew. Default = [0 : Pi].
void independent_scaling (float min_lambda1, float max_lambda1, float min_lambda2, float max_lambda2)
 Default method. Between 0.5 : 1.5 for both.
void constrained_scaling (float min_lambda1, float max_lambda1, float min_lambda2, float max_lambda2, float min_l1_l2, float max_l1_l2)
 Constrained scaling. Adds a constraint on the range of the product of l1 and l2.
void use_orientation_correction (void)
 Default method.
void dont_use_orientation_correction (void)
void set_max_depth (int p_max_depth)
 Default = 10.
void set_sample_number_for_refining (int sample_number)
 Sample number for the refine step (default = 1000):
IplImage * model_and_input_images
int x0
int y0
int u_input_image
int v_input_image
void save_patch_before_and_after_correction (IplImage *image, int u, int v, int patch_size, image_class_example *pv, int point_index, int call_number)
 The following functions are useful for visualization only:
void concat_model_and_input_images (IplImage *input_image, bool p_draw_model_image=true)
void draw_points (int line_width=1)
void draw_model_points (int line_width=1)
void draw_input_image_points (int line_width=1)
void draw_matches (int line_width=2)
void draw_inlier_matches (int line_width=1)
void draw_model (void)

Detailed Description

Planar object detector.

This class can learn a planar surface and recognize its feature points on a new image.

Examples:
augment3d.cpp, filedetect.cpp, fullcalib.cpp, multicam.cpp, multigl.cpp, and singlecalib.cpp.

Definition at line 49 of file planar_object_recognizer.h.

Constructor & Destructor Documentation

planar_object_recognizer::planar_object_recognizer ( )

empty constructor. call build, load or buildWithCache before use

Definition at line 35 of file planar_object_recognizer.cpp.

References hard_max_detected_pts.

planar_object_recognizer::planar_object_recognizer ( string  directory_name)

Create from the data stored in the directory directory_name.

Definition at line 204 of file planar_object_recognizer.cpp.

planar_object_recognizer::~planar_object_recognizer ( void  )

Definition at line 312 of file planar_object_recognizer.cpp.

References hard_max_detected_pts.

Member Function Documentation

bool planar_object_recognizer::build ( IplImage *  model_image,
int  max_point_number_on_model,
int  patch_size,
int  yape_radius,
int  tree_number,
int  nbLev,
LEARNPROGRESSION  LearnProgress = 0,
int *  roi = 0 
)

Build a classifier from the given model image. The result is not saved.

Returns
true on success, false on failure.
Examples:
singlecalib.cpp.

Definition at line 128 of file planar_object_recognizer.cpp.

Referenced by acquire_model(), CalibModel::buildCached(), and main().

bool planar_object_recognizer::build_with_cache ( string  filename,
int  max_point_number_on_model,
int  patch_size,
int  yape_radius,
int  tree_number,
int  nbLev,
LEARNPROGRESSION  LearnProgress = 0 
)

Build the model and save it on disk.

Returns
true on success, false on failure
Examples:
augment3d.cpp, filedetect.cpp, and singlecalib.cpp.

Definition at line 165 of file planar_object_recognizer.cpp.

References mcvLoadImage().

Referenced by CalibModel::buildCached(), and main().

void planar_object_recognizer::check_target_size ( IplImage *  image)

Ensures that allocated resources are ready to handle an image of the given size.

Definition at line 1367 of file planar_object_recognizer.cpp.

int planar_object_recognizer::compute_support_for_affine_transformation ( affinity A)
void planar_object_recognizer::concat_model_and_input_images ( IplImage *  input_image,
bool  p_draw_model_image = true 
)

Definition at line 1266 of file planar_object_recognizer.cpp.

References mcvPut().

void planar_object_recognizer::constrained_scaling ( float  min_lambda1,
float  max_lambda1,
float  min_lambda2,
float  max_lambda2,
float  min_l1_l2,
float  max_l1_l2 
)

Constrained scaling. Adds a constraint on the range of the product of l1 and l2.

Definition at line 106 of file planar_object_recognizer.cpp.

IplImage * planar_object_recognizer::create_result_image ( IplImage *  input_image,
bool  p_draw_points,
bool  p_draw_matches,
bool  p_draw_object,
bool  p_draw_model_image,
int  line_width = 2 
)

For visualization.

Examples:
filedetect.cpp.

Definition at line 1058 of file planar_object_recognizer.cpp.

Referenced by main().

void planar_object_recognizer::debug_model_point ( int  p_index_of_model_point_to_debug)
inline

For debugging: save generated patches for a particular point in dir patches, before and after orientation correction.

Definition at line 192 of file planar_object_recognizer.h.

References index_of_model_point_to_debug.

void planar_object_recognizer::default_settings ( void  )

Some parameters for fine tuning: Called by the 2 constructors.

Definition at line 57 of file planar_object_recognizer.cpp.

bool planar_object_recognizer::detect ( IplImage *  input_image)

Detect the object in the given input image.

Returns true if the object is detected. If the object is detected, put the detected corners in the fieds detected_u_corner1, detected_v_corner1 ...

Calls successively the functions:

  • detect_points
  • preprocess_points
  • match_points
  • estimate_affine_transformation
  • estimate_homographic_transformation_nonlinear_method
Examples:
augment3d.cpp, filedetect.cpp, fullcalib.cpp, and singlecalib.cpp.

Definition at line 478 of file planar_object_recognizer.cpp.

Referenced by geometric_calibration(), main(), and photometric_calibration().

void planar_object_recognizer::detect_most_stable_model_points ( int  max_point_number_on_model,
int  patch_size,
int  view_number,
double  min_view_rate,
LEARNPROGRESSION  LearnProgress = 0 
)
void planar_object_recognizer::detect_points ( IplImage *  input_image)

Definition at line 405 of file planar_object_recognizer.cpp.

void planar_object_recognizer::dont_use_bins_when_creating_model_points ( void  )
inline

Disactivate bins when detecting model points.

Definition at line 77 of file planar_object_recognizer.h.

References use_bins_for_model_points.

void planar_object_recognizer::dont_use_bins_when_detecting_input_image_points ( void  )
inline

Disactivate bins when detecting model points.

Definition at line 82 of file planar_object_recognizer.h.

References use_bins_for_input_image.

void planar_object_recognizer::dont_use_orientation_correction ( void  )

Definition at line 85 of file planar_object_recognizer.cpp.

void planar_object_recognizer::draw_inlier_matches ( int  line_width = 1)
void planar_object_recognizer::draw_input_image_points ( int  line_width = 1)
void planar_object_recognizer::draw_matches ( int  line_width = 2)
void planar_object_recognizer::draw_model ( void  )

Definition at line 1081 of file planar_object_recognizer.cpp.

References cvPoint().

void planar_object_recognizer::draw_model_points ( int  line_width = 1)

Definition at line 1305 of file planar_object_recognizer.cpp.

References PyrImage::convCoordf(), and cvPoint().

void planar_object_recognizer::draw_points ( int  line_width = 1)

Definition at line 1299 of file planar_object_recognizer.cpp.

bool planar_object_recognizer::estimate_affine_transformation ( void  )
bool planar_object_recognizer::estimate_homographic_transformation_linear_method ( void  )

Definition at line 680 of file planar_object_recognizer.cpp.

References PyrImage::convCoordf().

bool planar_object_recognizer::estimate_homographic_transformation_nonlinear_method ( void  )

Definition at line 743 of file planar_object_recognizer.cpp.

References PyrImage::convCoordf(), and homography_error().

void planar_object_recognizer::independent_scaling ( float  min_lambda1,
float  max_lambda1,
float  min_lambda2,
float  max_lambda2 
)

Default method. Between 0.5 : 1.5 for both.

Definition at line 100 of file planar_object_recognizer.cpp.

void planar_object_recognizer::initialize ( void  )

Function called by the 2 constructors.

Definition at line 296 of file planar_object_recognizer.cpp.

void planar_object_recognizer::learn ( int  max_point_number_on_model,
int  patch_size,
int  yape_radius,
int  tree_number,
int  nbLev = 5,
LEARNPROGRESSION  LearnProgress = 0 
)

Create the point recognizer (see forest field)

Definition at line 335 of file planar_object_recognizer.cpp.

References hard_max_detected_pts.

bool planar_object_recognizer::load ( string  directory_name)

load data from a given directory.

Returns
true on success, false on failure.

Definition at line 212 of file planar_object_recognizer.cpp.

References hard_max_detected_pts, object_keypoint::M, and mcvLoadImage().

void planar_object_recognizer::match_points ( bool  fill_match_struct = true)
void planar_object_recognizer::preprocess_points ( void  )
void planar_object_recognizer::save ( string  directory_name)

Save data in the given directory. The directory must exist.

Examples:
singlecalib.cpp.

Definition at line 364 of file planar_object_recognizer.cpp.

References mcvSaveImage().

Referenced by acquire_model(), CalibModel::buildCached(), and main().

void planar_object_recognizer::save_image_of_model_points ( int  patch_size,
char *  filename = 0 
)
void planar_object_recognizer::save_one_image_per_match ( IplImage *  input_image,
const char *  matches_dir 
)
void planar_object_recognizer::save_one_image_per_match_input_to_model ( IplImage *  input_image,
const char *  matches_dir 
)
void planar_object_recognizer::save_one_image_per_match_model_to_input ( IplImage *  input_image,
const char *  matches_dir 
)
void planar_object_recognizer::save_patch_before_and_after_correction ( IplImage *  image,
int  u,
int  v,
int  patch_size,
image_class_example pv,
int  point_index,
int  call_number 
)

The following functions are useful for visualization only:

Definition at line 826 of file planar_object_recognizer.cpp.

References mcvGetPatch(), mcvSaveImage(), and image_class_example::preprocessed.

pair< object_keypoint, int > * planar_object_recognizer::search_for_existing_model_point ( vector< pair< object_keypoint, int > > *  tmp_model_points,
float  cu,
float  cv,
int  scale 
)

Definition at line 846 of file planar_object_recognizer.cpp.

void planar_object_recognizer::set_max_depth ( int  p_max_depth)
inline

Default = 10.

Definition at line 107 of file planar_object_recognizer.h.

References max_depth.

void planar_object_recognizer::set_max_detected_pts ( int  max)

set the maximum number of points we want to detect

Definition at line 74 of file planar_object_recognizer.cpp.

References hard_max_detected_pts.

void planar_object_recognizer::set_noise_level ( int  noise_level)

Default = 20.

Definition at line 120 of file planar_object_recognizer.cpp.

void planar_object_recognizer::set_range_variation_for_phi ( float  min_phi,
float  max_phi 
)

Skew. Default = [0 : Pi].

Definition at line 95 of file planar_object_recognizer.cpp.

void planar_object_recognizer::set_range_variation_for_theta ( float  min_theta,
float  max_theta 
)

Global rotation. Default = [0 : 2Pi].

Definition at line 90 of file planar_object_recognizer.cpp.

void planar_object_recognizer::set_sample_number_for_refining ( int  sample_number)
inline

Sample number for the refine step (default = 1000):

Definition at line 110 of file planar_object_recognizer.h.

References sample_number_for_refining.

void planar_object_recognizer::set_use_random_background ( bool  use_random_background)

Default = false;.

Definition at line 115 of file planar_object_recognizer.cpp.

bool planar_object_recognizer::three_random_correspondences ( int *  n1,
int *  n2,
int *  n3 
)

Definition at line 534 of file planar_object_recognizer.cpp.

References rand().

void planar_object_recognizer::use_bins_when_creating_model_points ( void  )
inline

Activate bins when detecting model points (Default)

Definition at line 75 of file planar_object_recognizer.h.

References use_bins_for_model_points.

void planar_object_recognizer::use_bins_when_detecting_input_image_points ( void  )
inline

Activate bins when detecting input image points (Default)

Definition at line 80 of file planar_object_recognizer.h.

References use_bins_for_input_image.

void planar_object_recognizer::use_orientation_correction ( void  )

Default method.

Definition at line 80 of file planar_object_recognizer.cpp.

bool planar_object_recognizer::valid ( affinity A)

Definition at line 605 of file planar_object_recognizer.cpp.

References cvmGet().

Member Data Documentation

affinity* planar_object_recognizer::affine_motion

Definition at line 174 of file planar_object_recognizer.h.

int planar_object_recognizer::detected_point_number

Definition at line 164 of file planar_object_recognizer.h.

image_class_example* planar_object_recognizer::detected_point_views

Definition at line 165 of file planar_object_recognizer.h.

keypoint* planar_object_recognizer::detected_points

Detected keypoints in the input image.

Definition at line 163 of file planar_object_recognizer.h.

float planar_object_recognizer::detected_u_corner1

Definition at line 177 of file planar_object_recognizer.h.

float planar_object_recognizer::detected_u_corner2

Definition at line 178 of file planar_object_recognizer.h.

float planar_object_recognizer::detected_u_corner3

Definition at line 179 of file planar_object_recognizer.h.

float planar_object_recognizer::detected_u_corner4

Definition at line 180 of file planar_object_recognizer.h.

float planar_object_recognizer::detected_v_corner1

Definition at line 177 of file planar_object_recognizer.h.

float planar_object_recognizer::detected_v_corner2

Definition at line 178 of file planar_object_recognizer.h.

float planar_object_recognizer::detected_v_corner3

Definition at line 179 of file planar_object_recognizer.h.

float planar_object_recognizer::detected_v_corner4

Definition at line 180 of file planar_object_recognizer.h.

image_classification_forest* planar_object_recognizer::forest

Image classifier.

Definition at line 218 of file planar_object_recognizer.h.

homography* planar_object_recognizer::H
ls_minimizer2* planar_object_recognizer::homography_estimator

Definition at line 176 of file planar_object_recognizer.h.

int planar_object_recognizer::index_of_model_point_to_debug

Definition at line 233 of file planar_object_recognizer.h.

Referenced by debug_model_point().

double planar_object_recognizer::keypoint_distance_threshold

interest points that are closer than this distance are merged by by search_for_existing_model_point().

Definition at line 244 of file planar_object_recognizer.h.

int planar_object_recognizer::match_number
float* planar_object_recognizer::match_probabilities[hard_max_detected_pts]

Match probabilities for each detected keypoint.

Definition at line 168 of file planar_object_recognizer.h.

float planar_object_recognizer::match_score_threshold

The RANSAC estimation will not take into account a match whose score is under that threshold.

Examples:
augment3d.cpp, filedetect.cpp, and singlecalib.cpp.

Definition at line 249 of file planar_object_recognizer.h.

Referenced by CalibModel::buildCached(), and main().

image_object_point_match planar_object_recognizer::matches[hard_max_detected_pts]

Matches between the detected keypoints, and the model keypoints.

Examples:
augment3d.cpp, fullcalib.cpp, multicam.cpp, and singlecalib.cpp.

Definition at line 170 of file planar_object_recognizer.h.

Referenced by add_detected_homography(), geom_calib_draw(), and show_result().

int planar_object_recognizer::max_depth

Definition at line 226 of file planar_object_recognizer.h.

Referenced by set_max_depth().

int planar_object_recognizer::max_detected_pts

Definition at line 225 of file planar_object_recognizer.h.

int planar_object_recognizer::max_ransac_iterations

maximum iteration number for RANSAC

Examples:
augment3d.cpp, filedetect.cpp, and singlecalib.cpp.

Definition at line 259 of file planar_object_recognizer.h.

Referenced by CalibModel::buildCached(), and main().

double planar_object_recognizer::min_view_rate

minimum visible rate for determining stable keypoints

Examples:
filedetect.cpp.

Definition at line 239 of file planar_object_recognizer.h.

Referenced by CalibModel::buildCached(), and main().

IplImage* planar_object_recognizer::model_and_input_images

Definition at line 280 of file planar_object_recognizer.h.

int planar_object_recognizer::model_point_number

Definition at line 160 of file planar_object_recognizer.h.

object_keypoint* planar_object_recognizer::model_points

keypoints on the object.

(X, Y) = coordinates in the original image, Z = 0. usage: model_points[target][model], with 0 <= target < detected_point_number and 0 <= model < model_point_number

Definition at line 159 of file planar_object_recognizer.h.

affine_image_generator planar_object_recognizer::new_images_generator

Definition at line 205 of file planar_object_recognizer.h.

Referenced by CalibModel::buildCached().

float planar_object_recognizer::non_linear_refine_threshold

Distance threshold, in pixels, for non-linear refinement.

Examples:
augment3d.cpp, filedetect.cpp, and singlecalib.cpp.

Definition at line 256 of file planar_object_recognizer.h.

Referenced by CalibModel::buildCached(), and main().

object_view* planar_object_recognizer::object_input_view

Definition at line 207 of file planar_object_recognizer.h.

bool planar_object_recognizer::object_is_detected
pyr_yape* planar_object_recognizer::point_detector

Definition at line 182 of file planar_object_recognizer.h.

float planar_object_recognizer::ransac_dist_threshold

The minimum reprojection distance that RANSAC will consider compatible.

Examples:
augment3d.cpp, filedetect.cpp, and singlecalib.cpp.

Definition at line 253 of file planar_object_recognizer.h.

Referenced by CalibModel::buildCached(), and main().

int planar_object_recognizer::ransac_stop_support

RANSAC will stop if it finds a transformation that satisfies at least ransac_stop_support matches.

Definition at line 264 of file planar_object_recognizer.h.

int planar_object_recognizer::sample_number_for_refining

Definition at line 111 of file planar_object_recognizer.h.

Referenced by set_sample_number_for_refining().

int planar_object_recognizer::u_input_image

Definition at line 282 of file planar_object_recognizer.h.

bool planar_object_recognizer::use_bins_for_input_image
bool planar_object_recognizer::use_bins_for_model_points
int planar_object_recognizer::v_input_image

Definition at line 282 of file planar_object_recognizer.h.

int planar_object_recognizer::views_number

number of generated views for finding stable points

Examples:
filedetect.cpp.

Definition at line 236 of file planar_object_recognizer.h.

Referenced by CalibModel::buildCached(), and main().

int planar_object_recognizer::x0

Definition at line 281 of file planar_object_recognizer.h.

int planar_object_recognizer::y0

Definition at line 281 of file planar_object_recognizer.h.


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