tesseract v5.3.3.20231005
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
17namespace tesseract {
18
19class DENORMTest : public testing::Test {
20protected:
21 void SetUp() override {
22 std::locale::global(std::locale(""));
23 }
24
25public:
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.
51TEST_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.
66TEST_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.
83TEST_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
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:2043
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:99
void NormTransform(const DENORM *first_norm, const TPOINT &pt, TPOINT *transformed) const
Definition: normalis.cpp:340
void DenormTransform(const DENORM *last_denorm, const TPOINT &pt, TPOINT *original) const
Definition: normalis.cpp:401
void LocalDenormTransform(const TPOINT &pt, TPOINT *original) const
Definition: normalis.cpp:362
void LocalNormTransform(const TPOINT &pt, TPOINT *transformed) const
Definition: normalis.cpp:310
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