Tesseract  3.02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
tesseract::CCNonTextDetect Class Reference

#include <ccnontextdetect.h>

Inheritance diagram for tesseract::CCNonTextDetect:
tesseract::BlobGrid tesseract::BBGrid< BLOBNBOX, BLOBNBOX_CLIST, BLOBNBOX_C_IT > tesseract::GridBase

Public Member Functions

 CCNonTextDetect (int gridsize, const ICOORD &bleft, const ICOORD &tright)
 
virtual ~CCNonTextDetect ()
 
Pix * ComputeNonTextMask (bool debug, Pix *photo_map, TO_BLOCK *blob_block)
 
- Public Member Functions inherited from tesseract::BlobGrid
 BlobGrid (int gridsize, const ICOORD &bleft, const ICOORD &tright)
 
virtual ~BlobGrid ()
 
void InsertBlobList (BLOBNBOX_LIST *blobs)
 
- Public Member Functions inherited from tesseract::BBGrid< BLOBNBOX, BLOBNBOX_CLIST, BLOBNBOX_C_IT >
 BBGrid ()
 
 BBGrid (int gridsize, const ICOORD &bleft, const ICOORD &tright)
 
virtual ~BBGrid ()
 
void Init (int gridsize, const ICOORD &bleft, const ICOORD &tright)
 
void Clear ()
 
void ClearGridData (void(*free_method)(BLOBNBOX *))
 
void InsertBBox (bool h_spread, bool v_spread, BLOBNBOX *bbox)
 
void InsertPixPtBBox (int left, int bottom, Pix *pix, BLOBNBOX *bbox)
 
void RemoveBBox (BLOBNBOX *bbox)
 
bool RectangleEmpty (const TBOX &rect)
 
IntGridCountCellElements ()
 
ScrollViewMakeWindow (int x, int y, const char *window_name)
 
void DisplayBoxes (ScrollView *window)
 
void AssertNoDuplicates ()
 
virtual void HandleClick (int x, int y)
 
- Public Member Functions inherited from tesseract::GridBase
 GridBase ()
 
 GridBase (int gridsize, const ICOORD &bleft, const ICOORD &tright)
 
virtual ~GridBase ()
 
void Init (int gridsize, const ICOORD &bleft, const ICOORD &tright)
 
int gridsize () const
 
int gridwidth () const
 
int gridheight () const
 
const ICOORDbleft () const
 
const ICOORDtright () const
 
void GridCoords (int x, int y, int *grid_x, int *grid_y) const
 
void ClipGridCoords (int *x, int *y) const
 

Additional Inherited Members

- Protected Attributes inherited from tesseract::BBGrid< BLOBNBOX, BLOBNBOX_CLIST, BLOBNBOX_C_IT >
BLOBNBOX_CLIST * grid_
 
- Protected Attributes inherited from tesseract::GridBase
int gridsize_
 
int gridwidth_
 
int gridheight_
 
int gridbuckets_
 
ICOORD bleft_
 
ICOORD tright_
 

Detailed Description

Definition at line 31 of file ccnontextdetect.h.

Constructor & Destructor Documentation

tesseract::CCNonTextDetect::CCNonTextDetect ( int  gridsize,
const ICOORD bleft,
const ICOORD tright 
)

Definition at line 58 of file ccnontextdetect.cpp.

60  : BlobGrid(gridsize, bleft, tright),
61  max_noise_count_(static_cast<int>(kMaxSmallNeighboursPerPix *
62  gridsize * gridsize)),
63  noise_density_(NULL) {
64  // TODO(rays) break max_noise_count_ out into an area-proportional
65  // value, as now plus an additive constant for the number of text blobs
66  // in the 3x3 neigbourhood - maybe 9.
67 }
BlobGrid(int gridsize, const ICOORD &bleft, const ICOORD &tright)
Definition: blobgrid.cpp:24
const double kMaxSmallNeighboursPerPix
int gridsize() const
Definition: bbgrid.h:68
#define NULL
Definition: host.h:144
tesseract::CCNonTextDetect::~CCNonTextDetect ( )
virtual

Definition at line 69 of file ccnontextdetect.cpp.

69  {
70  delete noise_density_;
71 }

Member Function Documentation

Pix * tesseract::CCNonTextDetect::ComputeNonTextMask ( bool  debug,
Pix *  photo_map,
TO_BLOCK blob_block 
)

Definition at line 82 of file ccnontextdetect.cpp.

83  {
84  // Insert the smallest blobs into the grid.
85  InsertBlobList(&blob_block->small_blobs);
86  InsertBlobList(&blob_block->noise_blobs);
87  // Add the medium blobs that don't have a good strokewidth neighbour.
88  // Those that do go into good_grid as an antidote to spreading beyond the
89  // real reaches of a noise region.
90  BlobGrid good_grid(gridsize(), bleft(), tright());
91  BLOBNBOX_IT blob_it(&blob_block->blobs);
92  for (blob_it.mark_cycle_pt(); !blob_it.cycled_list(); blob_it.forward()) {
93  BLOBNBOX* blob = blob_it.data();
94  double perimeter_area_ratio = blob->cblob()->perimeter() / 4.0;
95  perimeter_area_ratio *= perimeter_area_ratio / blob->enclosed_area();
96  if (blob->GoodTextBlob() == 0 || perimeter_area_ratio < kMinGoodTextPARatio)
97  InsertBBox(true, true, blob);
98  else
99  good_grid.InsertBBox(true, true, blob);
100  }
101  noise_density_ = ComputeNoiseDensity(debug, photo_map, &good_grid);
102  good_grid.Clear(); // Not needed any more.
103  Pix* pix = noise_density_->ThresholdToPix(max_noise_count_);
104  if (debug) {
105  pixWrite("junknoisemask.png", pix, IFF_PNG);
106  }
107  ScrollView* win = NULL;
108  #ifndef GRAPHICS_DISABLED
109  if (debug) {
110  win = MakeWindow(0, 400, "Photo Mask Blobs");
111  }
112  #endif // GRAPHICS_DISABLED
113  // Large and medium blobs are not text if they overlap with "a lot" of small
114  // blobs.
115  MarkAndDeleteNonTextBlobs(&blob_block->large_blobs,
117  win, ScrollView::DARK_GREEN, pix);
118  MarkAndDeleteNonTextBlobs(&blob_block->blobs, kMaxMediumOverlapsWithSmall,
119  win, ScrollView::WHITE, pix);
120  // Clear the grid of small blobs and insert the medium blobs.
121  Clear();
122  InsertBlobList(&blob_block->blobs);
123  MarkAndDeleteNonTextBlobs(&blob_block->large_blobs,
125  win, ScrollView::DARK_GREEN, pix);
126  // Clear again before we start deleting the blobs in the grid.
127  Clear();
128  MarkAndDeleteNonTextBlobs(&blob_block->noise_blobs, -1,
129  win, ScrollView::CORAL, pix);
130  MarkAndDeleteNonTextBlobs(&blob_block->small_blobs, -1,
131  win, ScrollView::GOLDENROD, pix);
132  MarkAndDeleteNonTextBlobs(&blob_block->blobs, -1,
133  win, ScrollView::WHITE, pix);
134  if (debug) {
135  #ifndef GRAPHICS_DISABLED
136  win->Update();
137  #endif // GRAPHICS_DISABLED
138  pixWrite("junkccphotomask.png", pix, IFF_PNG);
139  #ifndef GRAPHICS_DISABLED
140  delete win->AwaitEvent(SVET_DESTROY);
141  delete win;
142  #endif // GRAPHICS_DISABLED
143  }
144  return pix;
145 }
BLOBNBOX_LIST noise_blobs
Definition: blobbox.h:737
inT32 enclosed_area() const
Definition: blobbox.h:230
SVEvent * AwaitEvent(SVEventType type)
Definition: scrollview.cpp:444
BLOBNBOX_LIST blobs
Definition: blobbox.h:735
BlobGrid(int gridsize, const ICOORD &bleft, const ICOORD &tright)
Definition: blobgrid.cpp:24
C_BLOB * cblob() const
Definition: blobbox.h:245
const int kMaxLargeOverlapsWithMedium
int gridsize() const
Definition: bbgrid.h:68
int GoodTextBlob() const
Definition: blobbox.cpp:217
#define NULL
Definition: host.h:144
const int kMaxMediumOverlapsWithSmall
static void Update()
Definition: scrollview.cpp:710
const double kMinGoodTextPARatio
Pix * ThresholdToPix(int threshold) const
Definition: bbgrid.cpp:194
BLOBNBOX_LIST small_blobs
Definition: blobbox.h:738
void InsertBlobList(BLOBNBOX_LIST *blobs)
Definition: blobgrid.cpp:34
const ICOORD & tright() const
Definition: bbgrid.h:80
inT32 perimeter()
Definition: stepblob.cpp:230
void InsertBBox(bool h_spread, bool v_spread, BLOBNBOX *bbox)
BLOBNBOX_LIST large_blobs
Definition: blobbox.h:739
const ICOORD & bleft() const
Definition: bbgrid.h:77
ScrollView * MakeWindow(int x, int y, const char *window_name)
const int kMaxLargeOverlapsWithSmall

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