tesseract  4.1.0
edgblob.h File Reference
#include "scrollview.h"
#include "params.h"
#include "ocrblock.h"
#include "coutln.h"
#include "crakedge.h"
#include <memory>

Go to the source code of this file.

Classes

class  OL_BUCKETS
 

Macros

#define BUCKETSIZE   16
 

Functions

void extract_edges (Pix *pix, BLOCK *block)
 
void outlines_to_blobs (BLOCK *block, ICOORD bleft, ICOORD tright, C_OUTLINE_LIST *outlines)
 
void fill_buckets (C_OUTLINE_LIST *outlines, OL_BUCKETS *buckets)
 
void empty_buckets (BLOCK *block, OL_BUCKETS *buckets)
 
bool capture_children (OL_BUCKETS *buckets, C_BLOB_IT *reject_it, C_OUTLINE_IT *blob_it)
 

Macro Definition Documentation

#define BUCKETSIZE   16

Definition at line 30 of file edgblob.h.

Function Documentation

bool capture_children ( OL_BUCKETS buckets,
C_BLOB_IT *  reject_it,
C_OUTLINE_IT *  blob_it 
)

Definition at line 436 of file edgblob.cpp.

440  {
441  C_OUTLINE *outline; // master outline
442  int32_t child_count; // no of children
443 
444  outline = blob_it->data();
445  if (edges_use_new_outline_complexity)
446  child_count = buckets->outline_complexity(outline,
447  edges_children_count_limit,
448  0);
449  else
450  child_count = buckets->count_children(outline,
451  edges_children_count_limit);
452  if (child_count > edges_children_count_limit)
453  return false;
454 
455  if (child_count > 0)
456  buckets->extract_children(outline, blob_it);
457  return true;
458 }
int32_t count_children(C_OUTLINE *outline, int32_t max_count)
Definition: edgblob.cpp:179
int32_t outline_complexity(C_OUTLINE *outline, int32_t max_count, int16_t depth)
Definition: edgblob.cpp:110
void extract_children(C_OUTLINE *outline, C_OUTLINE_IT *it)
Definition: edgblob.cpp:295
void empty_buckets ( BLOCK block,
OL_BUCKETS buckets 
)

Definition at line 394 of file edgblob.cpp.

397  {
398  bool good_blob; // healthy blob
399  C_OUTLINE_LIST outlines; // outlines in block
400  // iterator
401  C_OUTLINE_IT out_it = &outlines;
402  C_OUTLINE_IT bucket_it = buckets->start_scan();
403  C_OUTLINE_IT parent_it; // parent outline
404  C_BLOB_IT good_blobs = block->blob_list();
405  C_BLOB_IT junk_blobs = block->reject_blobs();
406 
407  while (!bucket_it.empty()) {
408  out_it.set_to_list(&outlines);
409  do {
410  parent_it = bucket_it; // find outermost
411  do {
412  bucket_it.forward();
413  } while (!bucket_it.at_first() &&
414  !(*parent_it.data() < *bucket_it.data()));
415  } while (!bucket_it.at_first());
416 
417  // move to new list
418  out_it.add_after_then_move(parent_it.extract());
419  good_blob = capture_children(buckets, &junk_blobs, &out_it);
420  C_BLOB::ConstructBlobsFromOutlines(good_blob, &outlines, &good_blobs,
421  &junk_blobs);
422 
423  bucket_it.set_to_list(buckets->scan_next());
424  }
425 }
bool capture_children(OL_BUCKETS *buckets, C_BLOB_IT *reject_it, C_OUTLINE_IT *blob_it)
Definition: edgblob.cpp:436
static void ConstructBlobsFromOutlines(bool good_blob, C_OUTLINE_LIST *outline_list, C_BLOB_IT *good_blobs_it, C_BLOB_IT *bad_blobs_it)
Definition: stepblob.cpp:189
C_BLOB_LIST * reject_blobs()
Definition: ocrblock.h:132
C_OUTLINE_LIST * start_scan()
Definition: edgblob.h:45
C_OUTLINE_LIST * scan_next()
Definition: edgblob.h:51
C_BLOB_LIST * blob_list()
get blobs
Definition: ocrblock.h:129
void extract_edges ( Pix *  pix,
BLOCK block 
)

Definition at line 330 of file edgblob.cpp.

331  { // block to scan
332  C_OUTLINE_LIST outlines; // outlines in block
333  C_OUTLINE_IT out_it = &outlines;
334 
335  block_edges(pix, &(block->pdblk), &out_it);
336  ICOORD bleft; // block box
337  ICOORD tright;
338  block->pdblk.bounding_box(bleft, tright);
339  // make blobs
340  outlines_to_blobs(block, bleft, tright, &outlines);
341 }
integer coordinate
Definition: points.h:31
void block_edges(Pix *t_pix, PDBLK *block, C_OUTLINE_IT *outline_it)
Definition: scanedg.cpp:37
void bounding_box(ICOORD &bottom_left, ICOORD &top_right) const
get box
Definition: pdblock.h:60
void outlines_to_blobs(BLOCK *block, ICOORD bleft, ICOORD tright, C_OUTLINE_LIST *outlines)
Definition: edgblob.cpp:350
PDBLK pdblk
Page Description Block.
Definition: ocrblock.h:191
void fill_buckets ( C_OUTLINE_LIST *  outlines,
OL_BUCKETS buckets 
)

Definition at line 369 of file edgblob.cpp.

372  {
373  TBOX ol_box; // outline box
374  C_OUTLINE_IT out_it = outlines; // iterator
375  C_OUTLINE_IT bucket_it; // iterator in bucket
376  C_OUTLINE *outline; // current outline
377 
378  for (out_it.mark_cycle_pt(); !out_it.cycled_list(); out_it.forward()) {
379  outline = out_it.extract(); // take off list
380  // get box
381  ol_box = outline->bounding_box();
382  bucket_it.set_to_list((*buckets) (ol_box.left(), ol_box.bottom()));
383  bucket_it.add_to_end(outline);
384  }
385 }
Definition: rect.h:34
const TBOX & bounding_box() const
Definition: coutln.h:113
int16_t bottom() const
Definition: rect.h:65
int16_t left() const
Definition: rect.h:72
void outlines_to_blobs ( BLOCK block,
ICOORD  bleft,
ICOORD  tright,
C_OUTLINE_LIST *  outlines 
)

Definition at line 350 of file edgblob.cpp.

354  {
355  // make buckets
356  OL_BUCKETS buckets(bleft, tright);
357 
358  fill_buckets(outlines, &buckets);
359  empty_buckets(block, &buckets);
360 }
void empty_buckets(BLOCK *block, OL_BUCKETS *buckets)
Definition: edgblob.cpp:394
void fill_buckets(C_OUTLINE_LIST *outlines, OL_BUCKETS *buckets)
Definition: edgblob.cpp:369