tesseract v5.3.3.20231005
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)
 
 ~CCNonTextDetect () override
 
Image ComputeNonTextMask (bool debug, Image photo_map, TO_BLOCK *blob_block)
 
- Public Member Functions inherited from tesseract::BlobGrid
 BlobGrid (int gridsize, const ICOORD &bleft, const ICOORD &tright)
 
 ~BlobGrid () override
 
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)
 
 ~BBGrid () override
 
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, Image 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 ()=default
 
 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

◆ CCNonTextDetect()

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

Definition at line 62 of file ccnontextdetect.cpp.

64 , max_noise_count_(static_cast<int>(kMaxSmallNeighboursPerPix * gridsize * gridsize))
65 , noise_density_(nullptr) {
66 // TODO(rays) break max_noise_count_ out into an area-proportional
67 // value, as now plus an additive constant for the number of text blobs
68 // in the 3x3 neighbourhood - maybe 9.
69}
const double kMaxSmallNeighboursPerPix
int gridsize() const
Definition: bbgrid.h:63
const ICOORD & bleft() const
Definition: bbgrid.h:72
const ICOORD & tright() const
Definition: bbgrid.h:75
BlobGrid(int gridsize, const ICOORD &bleft, const ICOORD &tright)
Definition: blobgrid.cpp:24

◆ ~CCNonTextDetect()

tesseract::CCNonTextDetect::~CCNonTextDetect ( )
override

Definition at line 71 of file ccnontextdetect.cpp.

71 {
72 delete noise_density_;
73}

Member Function Documentation

◆ ComputeNonTextMask()

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

Definition at line 84 of file ccnontextdetect.cpp.

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

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