
--- scribo/sandbox/icdar_13_table/src/new.cc | 35 +++++++++++++++++++++++++++++- 1 files changed, 34 insertions(+), 1 deletions(-) diff --git a/scribo/sandbox/icdar_13_table/src/new.cc b/scribo/sandbox/icdar_13_table/src/new.cc index bcf127e..d52ac15 100644 --- a/scribo/sandbox/icdar_13_table/src/new.cc +++ b/scribo/sandbox/icdar_13_table/src/new.cc @@ -58,6 +58,13 @@ using namespace mln; +// Check if two boxes intersected +bool intersect(const box2d& b1, const box2d& b2) +{ + return ((unsigned) abs(b1.pcenter().col() - b2.pcenter().col()) * 2 < b1.width() + b2.width() + && (unsigned) abs(b1.pcenter().row() - b2.pcenter().row()) * 2 < b1.height() + b2.height()); +} + // Draw weighted boxes (red < orange < cyan < green) // 1 link < 2 links < 3 links < 3+ links template<typename T, typename L> @@ -581,6 +588,9 @@ int main(int argc, char** argv) descendants[columns_set.find(j)].insert(j); } + std::vector<box2d> columns; + std::set<unsigned> not_valid; + // Visualization: columns. image2d<value::rgb8> ima_columns = data::convert(value::rgb8(), bin_merged); for (unsigned i = 0; i < groups.nelements(); ++i) @@ -590,9 +600,32 @@ int main(int argc, char** argv) for (group_set::const_iterator j = descendants[i].begin(); j != descendants[i].end(); ++j) column_box.merge(groups(*j).bbox()); - draw::box(ima_columns, column_box, literal::red); + draw::box(ima_columns, column_box, literal::green); + columns.push_back(column_box); } + for (unsigned i = 0; i < columns.size(); ++i) + { + for (unsigned j = 0; j < columns.size(); ++j) + { + if (i != j) + { + const box2d& c1 = columns[i]; + const box2d& c2 = columns[j]; + + if (intersect(c1, c2) || intersect(c2, c1)) + { + not_valid.insert(i); + not_valid.insert(j); + } + } + } + } + + for (unsigned i = 0; i < columns.size(); ++i) + if (not_valid.find(i) != not_valid.end()) + draw::box(ima_columns, columns[i], literal::red); + // Write images and close XML std::ostringstream path; unsigned number = 0; -- 1.7.2.5