Tesseract  3.02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
blobbox.cpp File Reference
#include "mfcpch.h"
#include "blobbox.h"
#include "helpers.h"

Go to the source code of this file.

Macros

#define PROJECTION_MARGIN   10
 
#define EXTERN
 

Functions

 ELISTIZE (BLOBNBOX) ELIST2IZE(TO_ROW) ELISTIZE(TO_BLOCK) const double kCosSmallAngle=0.866
 
void find_cblob_limits (C_BLOB *blob, float leftx, float rightx, FCOORD rotation, float &ymin, float &ymax)
 
void find_cblob_vlimits (C_BLOB *blob, float leftx, float rightx, float &ymin, float &ymax)
 
void find_cblob_hlimits (C_BLOB *blob, float bottomy, float topy, float &xmin, float &xmax)
 
C_BLOBcrotate_cblob (C_BLOB *blob, FCOORD rotation)
 
TBOX box_next (BLOBNBOX_IT *it)
 
TBOX box_next_pre_chopped (BLOBNBOX_IT *it)
 
void vertical_cblob_projection (C_BLOB *blob, STATS *stats)
 
void vertical_coutline_projection (C_OUTLINE *outline, STATS *stats)
 
void plot_blob_list (ScrollView *win, BLOBNBOX_LIST *list, ScrollView::Color body_colour, ScrollView::Color child_colour)
 

Variables

const double kDefiniteAspectRatio = 2.0
 
const double kComplexShapePerimeterRatio = 1.5
 
const double kMinMediumSizeRatio = 0.25
 
const double kMaxMediumSizeRatio = 4.0
 

Macro Definition Documentation

#define EXTERN

Definition at line 30 of file blobbox.cpp.

#define PROJECTION_MARGIN   10

Definition at line 29 of file blobbox.cpp.

Function Documentation

TBOX box_next ( BLOBNBOX_IT *  it)

Definition at line 585 of file blobbox.cpp.

587  {
588  BLOBNBOX *blob; //current blob
589  TBOX result; //total box
590 
591  blob = it->data ();
592  result = blob->bounding_box ();
593  do {
594  it->forward ();
595  blob = it->data ();
596  if (blob->cblob() == NULL)
597  //was pre-chopped
598  result += blob->bounding_box ();
599  }
600  //until next real blob
601  while ((blob->cblob() == NULL) || blob->joined_to_prev());
602  return result;
603 }
C_BLOB * cblob() const
Definition: blobbox.h:245
const TBOX & bounding_box() const
Definition: blobbox.h:208
#define NULL
Definition: host.h:144
Definition: rect.h:29
bool joined_to_prev() const
Definition: blobbox.h:233
TBOX box_next_pre_chopped ( BLOBNBOX_IT *  it)

Definition at line 614 of file blobbox.cpp.

616  {
617  BLOBNBOX *blob; //current blob
618  TBOX result; //total box
619 
620  blob = it->data ();
621  result = blob->bounding_box ();
622  do {
623  it->forward ();
624  blob = it->data ();
625  }
626  //until next real blob
627  while (blob->joined_to_prev ());
628  return result;
629 }
const TBOX & bounding_box() const
Definition: blobbox.h:208
Definition: rect.h:29
bool joined_to_prev() const
Definition: blobbox.h:233
C_BLOB* crotate_cblob ( C_BLOB blob,
FCOORD  rotation 
)

Definition at line 560 of file blobbox.cpp.

563  {
564  C_OUTLINE_LIST out_list; //output outlines
565  //input outlines
566  C_OUTLINE_IT in_it = blob->out_list ();
567  //output outlines
568  C_OUTLINE_IT out_it = &out_list;
569 
570  for (in_it.mark_cycle_pt (); !in_it.cycled_list (); in_it.forward ()) {
571  out_it.add_after_then_move (new C_OUTLINE (in_it.data (), rotation));
572  }
573  return new C_BLOB (&out_list);
574 }
C_OUTLINE_LIST * out_list()
Definition: stepblob.h:42
ELISTIZE ( BLOBNBOX  ) const
pure virtual
void find_cblob_hlimits ( C_BLOB blob,
float  bottomy,
float  topy,
float &  xmin,
float &  xmax 
)

Definition at line 525 of file blobbox.cpp.

530  {
531  inT16 stepindex; //current point
532  ICOORD pos; //current coords
533  ICOORD vec; //rotated step
534  C_OUTLINE *outline; //current outline
535  //outlines
536  C_OUTLINE_IT out_it = blob->out_list ();
537 
538  xmin = (float) MAX_INT32;
539  xmax = (float) -MAX_INT32;
540  for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
541  outline = out_it.data ();
542  pos = outline->start_pos (); //get coords
543  for (stepindex = 0; stepindex < outline->pathlength (); stepindex++) {
544  //inside
545  if (pos.y () >= bottomy && pos.y () <= topy) {
546  UpdateRange(pos.x(), &xmin, &xmax);
547  }
548  vec = outline->step (stepindex);
549  pos += vec; //move to next
550  }
551  }
552 }
inT16 x() const
access function
Definition: points.h:52
const ICOORD & start_pos() const
Definition: coutln.h:108
C_OUTLINE_LIST * out_list()
Definition: stepblob.h:42
ICOORD step(inT16 index) const
Definition: coutln.h:120
inT16 y() const
access_function
Definition: points.h:56
#define MAX_INT32
Definition: host.h:120
inT32 pathlength() const
Definition: coutln.h:111
short inT16
Definition: host.h:100
integer coordinate
Definition: points.h:30
void UpdateRange(const T1 &x, T2 *lower_bound, T2 *upper_bound)
Definition: helpers.h:74
void find_cblob_limits ( C_BLOB blob,
float  leftx,
float  rightx,
FCOORD  rotation,
float &  ymin,
float &  ymax 
)

Definition at line 448 of file blobbox.cpp.

454  {
455  inT16 stepindex; //current point
456  ICOORD pos; //current coords
457  ICOORD vec; //rotated step
458  C_OUTLINE *outline; //current outline
459  //outlines
460  C_OUTLINE_IT out_it = blob->out_list ();
461 
462  ymin = (float) MAX_INT32;
463  ymax = (float) -MAX_INT32;
464  for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
465  outline = out_it.data ();
466  pos = outline->start_pos (); //get coords
467  pos.rotate (rotation);
468  for (stepindex = 0; stepindex < outline->pathlength (); stepindex++) {
469  //inside
470  if (pos.x () >= leftx && pos.x () <= rightx) {
471  UpdateRange(pos.y(), &ymin, &ymax);
472  }
473  vec = outline->step (stepindex);
474  vec.rotate (rotation);
475  pos += vec; //move to next
476  }
477  }
478 }
void rotate(const FCOORD &vec)
Definition: ipoints.h:241
inT16 x() const
access function
Definition: points.h:52
const ICOORD & start_pos() const
Definition: coutln.h:108
C_OUTLINE_LIST * out_list()
Definition: stepblob.h:42
ICOORD step(inT16 index) const
Definition: coutln.h:120
inT16 y() const
access_function
Definition: points.h:56
#define MAX_INT32
Definition: host.h:120
inT32 pathlength() const
Definition: coutln.h:111
short inT16
Definition: host.h:100
integer coordinate
Definition: points.h:30
void UpdateRange(const T1 &x, T2 *lower_bound, T2 *upper_bound)
Definition: helpers.h:74
void find_cblob_vlimits ( C_BLOB blob,
float  leftx,
float  rightx,
float &  ymin,
float &  ymax 
)

Definition at line 488 of file blobbox.cpp.

493  {
494  inT16 stepindex; //current point
495  ICOORD pos; //current coords
496  ICOORD vec; //rotated step
497  C_OUTLINE *outline; //current outline
498  //outlines
499  C_OUTLINE_IT out_it = blob->out_list ();
500 
501  ymin = (float) MAX_INT32;
502  ymax = (float) -MAX_INT32;
503  for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
504  outline = out_it.data ();
505  pos = outline->start_pos (); //get coords
506  for (stepindex = 0; stepindex < outline->pathlength (); stepindex++) {
507  //inside
508  if (pos.x () >= leftx && pos.x () <= rightx) {
509  UpdateRange(pos.y(), &ymin, &ymax);
510  }
511  vec = outline->step (stepindex);
512  pos += vec; //move to next
513  }
514  }
515 }
inT16 x() const
access function
Definition: points.h:52
const ICOORD & start_pos() const
Definition: coutln.h:108
C_OUTLINE_LIST * out_list()
Definition: stepblob.h:42
ICOORD step(inT16 index) const
Definition: coutln.h:120
inT16 y() const
access_function
Definition: points.h:56
#define MAX_INT32
Definition: host.h:120
inT32 pathlength() const
Definition: coutln.h:111
short inT16
Definition: host.h:100
integer coordinate
Definition: points.h:30
void UpdateRange(const T1 &x, T2 *lower_bound, T2 *upper_bound)
Definition: helpers.h:74
void plot_blob_list ( ScrollView win,
BLOBNBOX_LIST *  list,
ScrollView::Color  body_colour,
ScrollView::Color  child_colour 
)

Definition at line 1014 of file blobbox.cpp.

1017  { // colour of child
1018  BLOBNBOX_IT it = list;
1019  for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) {
1020  it.data()->plot(win, body_colour, child_colour);
1021  }
1022 }
void vertical_cblob_projection ( C_BLOB blob,
STATS stats 
)

Definition at line 808 of file blobbox.cpp.

811  {
812  //outlines of blob
813  C_OUTLINE_IT out_it = blob->out_list ();
814 
815  for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
816  vertical_coutline_projection (out_it.data (), stats);
817  }
818 }
void vertical_coutline_projection(C_OUTLINE *outline, STATS *stats)
Definition: blobbox.cpp:828
C_OUTLINE_LIST * out_list()
Definition: stepblob.h:42
void vertical_coutline_projection ( C_OUTLINE outline,
STATS stats 
)

Definition at line 828 of file blobbox.cpp.

831  {
832  ICOORD pos; //current point
833  ICOORD step; //edge step
834  inT32 length; //of outline
835  inT16 stepindex; //current step
836  C_OUTLINE_IT out_it = outline->child ();
837 
838  pos = outline->start_pos ();
839  length = outline->pathlength ();
840  for (stepindex = 0; stepindex < length; stepindex++) {
841  step = outline->step (stepindex);
842  if (step.x () > 0) {
843  stats->add (pos.x (), -pos.y ());
844  } else if (step.x () < 0) {
845  stats->add (pos.x () - 1, pos.y ());
846  }
847  pos += step;
848  }
849 
850  for (out_it.mark_cycle_pt (); !out_it.cycled_list (); out_it.forward ()) {
851  vertical_coutline_projection (out_it.data (), stats);
852  }
853 }
void vertical_coutline_projection(C_OUTLINE *outline, STATS *stats)
Definition: blobbox.cpp:828
inT16 x() const
access function
Definition: points.h:52
const ICOORD & start_pos() const
Definition: coutln.h:108
ICOORD step(inT16 index) const
Definition: coutln.h:120
int inT32
Definition: host.h:102
void add(inT32 value, inT32 count)
Definition: statistc.cpp:103
inT16 y() const
access_function
Definition: points.h:56
inT32 pathlength() const
Definition: coutln.h:111
short inT16
Definition: host.h:100
integer coordinate
Definition: points.h:30
C_OUTLINE_LIST * child()
Definition: coutln.h:80

Variable Documentation

const double kComplexShapePerimeterRatio = 1.5

Definition at line 39 of file blobbox.cpp.

const double kDefiniteAspectRatio = 2.0

Definition at line 37 of file blobbox.cpp.

const double kMaxMediumSizeRatio = 4.0

Definition at line 43 of file blobbox.cpp.

const double kMinMediumSizeRatio = 0.25

Definition at line 41 of file blobbox.cpp.