tesseract  5.0.0
denorm_test.cc
Go to the documentation of this file.
1 // (C) Copyright 2017, Google Inc.
2 // Licensed under the Apache License, Version 2.0 (the "License");
3 // you may not use this file except in compliance with the License.
4 // You may obtain a copy of the License at
5 // http://www.apache.org/licenses/LICENSE-2.0
6 // Unless required by applicable law or agreed to in writing, software
7 // distributed under the License is distributed on an "AS IS" BASIS,
8 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9 // See the License for the specific language governing permissions and
10 // limitations under the License.
11 
12 #include "blobs.h"
13 #include "normalis.h"
14 
15 #include "include_gunit.h"
16 
17 namespace tesseract {
18 
19 class DENORMTest : public testing::Test {
20 protected:
21  void SetUp() override {
22  std::locale::global(std::locale(""));
23  }
24 
25 public:
26  void TearDown() override {}
27 
28  void ExpectCorrectTransform(const DENORM &denorm, const TPOINT &src, const TPOINT &result,
29  bool local) {
30  TPOINT normed;
31  if (local) {
32  denorm.LocalNormTransform(src, &normed);
33  } else {
34  denorm.NormTransform(nullptr, src, &normed);
35  }
36  EXPECT_EQ(result.x, normed.x);
37  EXPECT_EQ(result.y, normed.y);
38  // Now undo
39  TPOINT denormed;
40  if (local) {
41  denorm.LocalDenormTransform(normed, &denormed);
42  } else {
43  denorm.DenormTransform(nullptr, normed, &denormed);
44  }
45  EXPECT_EQ(src.x, denormed.x);
46  EXPECT_EQ(src.y, denormed.y);
47  }
48 };
49 
50 // Tests a simple baseline-style normalization.
51 TEST_F(DENORMTest, NoRotations) {
52  DENORM denorm;
53  denorm.SetupNormalization(nullptr, nullptr, nullptr, 1000.0f, 2000.0f, 2.0f, 3.0f, 0.0f,
54  static_cast<float>(kBlnBaselineOffset));
55  TPOINT pt1(1100, 2000);
56  TPOINT result1(200, kBlnBaselineOffset);
57  ExpectCorrectTransform(denorm, pt1, result1, true);
58  ExpectCorrectTransform(denorm, pt1, result1, false);
59  TPOINT pt2(900, 2100);
60  TPOINT result2(-200, 300 + kBlnBaselineOffset);
61  ExpectCorrectTransform(denorm, pt2, result2, true);
62  ExpectCorrectTransform(denorm, pt2, result2, false);
63 }
64 
65 // Tests a simple baseline-style normalization with a rotation.
66 TEST_F(DENORMTest, WithRotations) {
67  DENORM denorm;
68  FCOORD rotation90(0.0f, 1.0f);
69  denorm.SetupNormalization(nullptr, &rotation90, nullptr, 1000.0f, 2000.0f, 2.0f, 3.0f, 0.0f,
70  static_cast<float>(kBlnBaselineOffset));
71 
72  TPOINT pt1(1100, 2000);
73  TPOINT result1(0, 200 + kBlnBaselineOffset);
74  ExpectCorrectTransform(denorm, pt1, result1, true);
75  ExpectCorrectTransform(denorm, pt1, result1, false);
76  TPOINT pt2(900, 2100);
77  TPOINT result2(-300, kBlnBaselineOffset - 200);
78  ExpectCorrectTransform(denorm, pt2, result2, true);
79  ExpectCorrectTransform(denorm, pt2, result2, false);
80 }
81 
82 // Tests a simple baseline-style normalization with a second rotation & scale.
83 TEST_F(DENORMTest, Multiple) {
84  DENORM denorm;
85  denorm.SetupNormalization(nullptr, nullptr, nullptr, 1000.0f, 2000.0f, 2.0f, 3.0f, 0.0f,
86  static_cast<float>(kBlnBaselineOffset));
87 
88  DENORM denorm2;
89  FCOORD rotation90(0.0f, 1.0f);
90  denorm2.SetupNormalization(nullptr, &rotation90, &denorm, 128.0f, 128.0f, 0.5f, 0.25f, 0.0f,
91  0.0f);
92  TPOINT pt1(1050, 2000);
93  TPOINT result1(100, kBlnBaselineOffset);
94  ExpectCorrectTransform(denorm, pt1, result1, true);
95  ExpectCorrectTransform(denorm, pt1, result1, false);
96  TPOINT result2(kBlnBaselineOffset / 4, -14);
97  ExpectCorrectTransform(denorm2, result1, result2, true);
98  ExpectCorrectTransform(denorm2, pt1, result2, false);
99 }
100 
101 } // namespace tesseract
TEST_F(EuroText, FastLatinOCR)
const int kBlnBaselineOffset
Definition: normalis.h:34
TDimension x
Definition: blobs.h:89
TDimension y
Definition: blobs.h:90
void SetupNormalization(const BLOCK *block, const FCOORD *rotation, const DENORM *predecessor, float x_origin, float y_origin, float x_scale, float y_scale, float final_xshift, float final_yshift)
Definition: normalis.cpp:97
void NormTransform(const DENORM *first_norm, const TPOINT &pt, TPOINT *transformed) const
Definition: normalis.cpp:338
void DenormTransform(const DENORM *last_denorm, const TPOINT &pt, TPOINT *original) const
Definition: normalis.cpp:399
void LocalDenormTransform(const TPOINT &pt, TPOINT *original) const
Definition: normalis.cpp:360
void LocalNormTransform(const TPOINT &pt, TPOINT *transformed) const
Definition: normalis.cpp:308
void TearDown() override
Definition: denorm_test.cc:26
void SetUp() override
Definition: denorm_test.cc:21
void ExpectCorrectTransform(const DENORM &denorm, const TPOINT &src, const TPOINT &result, bool local)
Definition: denorm_test.cc:28