tesseract v5.3.3.20231005
boxword.h
Go to the documentation of this file.
1
2// File: boxword.h
3// Description: Class to represent the bounding boxes of the output.
4// Author: Ray Smith
5//
6// (C) Copyright 2010, Google Inc.
7// Licensed under the Apache License, Version 2.0 (the "License");
8// you may not use this file except in compliance with the License.
9// You may obtain a copy of the License at
10// http://www.apache.org/licenses/LICENSE-2.0
11// Unless required by applicable law or agreed to in writing, software
12// distributed under the License is distributed on an "AS IS" BASIS,
13// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14// See the License for the specific language governing permissions and
15// limitations under the License.
16//
18
19#ifndef TESSERACT_CSTRUCT_BOXWORD_H_
20#define TESSERACT_CSTRUCT_BOXWORD_H_
21
22#include "rect.h" // for TBOX
23
24#include <functional> // for std::function
25
26namespace tesseract {
27
28class BLOCK;
29class WERD;
30struct TWERD;
31
32// Class to hold an array of bounding boxes for an output word and
33// the bounding box of the whole word.
34class BoxWord {
35public:
36 BoxWord();
37 explicit BoxWord(const BoxWord &src);
38 ~BoxWord() = default;
39
40 BoxWord &operator=(const BoxWord &src);
41
42 void CopyFrom(const BoxWord &src);
43
44 // Factory to build a BoxWord from a TWERD using the DENORMs on each blob to
45 // switch back to original image coordinates.
46 static BoxWord *CopyFromNormalized(TWERD *tessword);
47
48 // Clean up the bounding boxes from the polygonal approximation by
49 // expanding slightly, then clipping to the blobs from the original_word
50 // that overlap. If not null, the block provides the inverse rotation.
51 void ClipToOriginalWord(const BLOCK *block, WERD *original_word);
52
53 // Merges the boxes from start to end, not including end, and deletes
54 // the boxes between start and end.
55 void MergeBoxes(unsigned start, unsigned end);
56
57 // Inserts a new box before the given index.
58 // Recomputes the bounding box.
59 void InsertBox(unsigned index, const TBOX &box);
60
61 // Changes the box at the given index to the new box.
62 // Recomputes the bounding box.
63 void ChangeBox(unsigned index, const TBOX &box);
64
65 // Deletes the box with the given index, and shuffles up the rest.
66 // Recomputes the bounding box.
67 void DeleteBox(unsigned index);
68
69 // Deletes all the boxes stored in BoxWord.
70 void DeleteAllBoxes();
71
72 // This and other putatively are the same, so call the (permanent) callback
73 // for each blob index where the bounding boxes match.
74 // The callback is deleted on completion.
75 void ProcessMatchedBlobs(const TWERD &other,
76 const std::function<void(int)> &cb) const;
77
78 const TBOX &bounding_box() const {
79 return bbox_;
80 }
81 unsigned length() const {
82 return length_;
83 }
84 const TBOX &BlobBox(unsigned index) const {
85 return boxes_[index];
86 }
87
88private:
89 void ComputeBoundingBox();
90
91 TBOX bbox_;
92 unsigned length_;
93 std::vector<TBOX> boxes_;
94};
95
96} // namespace tesseract.
97
98#endif // TESSERACT_CSTRUCT_BOXWORD_H_
void MergeBoxes(unsigned start, unsigned end)
Definition: boxword.cpp:138
BoxWord & operator=(const BoxWord &src)
Definition: boxword.cpp:39
void ChangeBox(unsigned index, const TBOX &box)
Definition: boxword.cpp:169
void ProcessMatchedBlobs(const TWERD &other, const std::function< void(int)> &cb) const
Definition: boxword.cpp:201
static BoxWord * CopyFromNormalized(TWERD *tessword)
Definition: boxword.cpp:56
const TBOX & bounding_box() const
Definition: boxword.h:78
void DeleteBox(unsigned index)
Definition: boxword.cpp:176
unsigned length() const
Definition: boxword.h:81
const TBOX & BlobBox(unsigned index) const
Definition: boxword.h:84
void InsertBox(unsigned index, const TBOX &box)
Definition: boxword.cpp:157
void DeleteAllBoxes()
Definition: boxword.cpp:184
void ClipToOriginalWord(const BLOCK *block, WERD *original_word)
Definition: boxword.cpp:92
void CopyFrom(const BoxWord &src)
Definition: boxword.cpp:44