|
degate 0.1.1
|
This class is the base class for template matching along a grid. More...
#include <TemplateMatching.h>

Public Member Functions | |
| virtual | ~TemplateMatchingAlongGrid () |
Protected Member Functions | |
| bool | initialize_state_struct (struct search_state *state, int offs_min, int offs_max, bool is_horizontal_grid) const |
| virtual bool | get_next_pos (struct search_state *state, struct prepared_template const &tmpl) const =0 |
| Calculate the next position for a template to background matching. | |
This class is the base class for template matching along a grid.
Definition at line 360 of file TemplateMatching.h.
| virtual degate::TemplateMatchingAlongGrid::~TemplateMatchingAlongGrid | ( | ) | [inline, virtual] |
Definition at line 374 of file TemplateMatching.h.
{}
| virtual bool degate::TemplateMatchingAlongGrid::get_next_pos | ( | struct search_state * | state, |
| struct prepared_template const & | tmpl | ||
| ) | const [protected, pure virtual] |
Calculate the next position for a template to background matching.
Implements degate::TemplateMatching.
Implemented in degate::TemplateMatchingInRows, and degate::TemplateMatchingInCols.
| bool TemplateMatchingAlongGrid::initialize_state_struct | ( | struct search_state * | state, |
| int | offs_min, | ||
| int | offs_max, | ||
| bool | is_horizontal_grid | ||
| ) | const [protected] |
Definition at line 717 of file TemplateMatching.cc.
References debug(), degate::TemplateMatching::search_state::grid, degate::TemplateMatching::search_state::iter, degate::TemplateMatching::search_state::iter_begin, degate::TemplateMatching::search_state::iter_end, degate::TemplateMatching::search_state::iter_last, degate::TemplateMatching::project, and TM.
Referenced by degate::TemplateMatchingInCols::get_next_pos(), and degate::TemplateMatchingInRows::get_next_pos().
{
if(state->grid == NULL) {
const RegularGrid_shptr rg = is_horizontal_grid ?
project->get_regular_horizontal_grid() : project->get_regular_vertical_grid();
const IrregularGrid_shptr ig = is_horizontal_grid ?
project->get_irregular_horizontal_grid() : project->get_irregular_vertical_grid();
if(rg->is_enabled()) state->grid = rg;
else if(ig->is_enabled()) state->grid = ig;
if(state->grid != NULL) {
debug(TM, "check grid from %d to %d", offs_min, offs_max);
// iterate over grid and find first and last offset
state->iter_begin = state->grid->begin();
state->iter_last = state->grid->begin();
state->iter_end = state->grid->end();
for(Grid::grid_iter iter = state->grid->begin();
iter != state->grid->end(); ++iter) {
debug(TM, "\tcheck %d", *iter);
if(*iter < offs_min) state->iter_begin = iter;
if(*iter < offs_max) state->iter_last = iter;
}
if(*(state->iter_begin) < offs_min &&
state->iter_begin != state->grid->end()) state->iter_begin++;
//if(state->iter_last != state->grid->end()) state->iter_last++;
if(state->iter_begin != state->grid->end())
debug(TM, "first grid offset %d", *(state->iter_begin) );
// if(state->iter_last != state->grid->end())
debug(TM, "last grid offset %d", *(state->iter_last));
if(state->iter_begin == state->grid->end() ||
state->iter_last == state->grid->end()) {
debug(TM, "failed");
return false;
}
state->iter = state->iter_begin;
}
else {
debug(TM, "There is no grid enabled.");
return false;
}
}
return true;
}


1.7.4