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

#include <normalis.h>

List of all members.

Public Member Functions

 DENORM ()
 DENORM (float x, float scaling, ROW *src)
 DENORM (float x, float scaling, double line_m, double line_c, inT16 seg_count, DENORM_SEG *seg_pts, BOOL8 using_row, ROW *src)
 DENORM (const DENORM &)
DENORMoperator= (const DENORM &)
 ~DENORM ()
void SetupBLNormalize (const BLOCK *block, const ROW *row, float x_height, const TBOX &word_box, int num_segs, const DENORM_SEG *segs)
void SetupNormalization (const BLOCK *block, const ROW *row, const FCOORD *rotation, const DENORM *predecessor, const DENORM_SEG *segs, int num_segs, float x_origin, float y_origin, float x_scale, float y_scale, float final_xshift, float final_yshift)
void LocalNormTransform (const TPOINT &pt, TPOINT *transformed) const
void LocalNormTransform (const FCOORD &pt, FCOORD *transformed) const
void NormTransform (const TPOINT &pt, TPOINT *transformed) const
void NormTransform (const FCOORD &pt, FCOORD *transformed) const
void LocalDenormTransform (const TPOINT &pt, TPOINT *original) const
void LocalDenormTransform (const FCOORD &pt, FCOORD *original) const
void DenormTransform (const TPOINT &pt, TPOINT *original) const
void DenormTransform (const FCOORD &pt, FCOORD *original) const
void LocalNormBlob (TBLOB *blob) const
bool XHeightRange (int unichar_id, const UNICHARSET &unicharset, const TBOX &bbox, inT16 *min_xht, inT16 *max_xht) const
Pix * pix () const
void set_pix (Pix *pix)
bool inverse () const
void set_inverse (bool value)
const DENORMRootDenorm () const
const DENORMpredecessor () const
float x_scale () const
float y_scale () const
const ROWrow () const
void set_row (ROW *row)
const BLOCKblock () const
void set_block (const BLOCK *block)

Detailed Description

Definition at line 59 of file normalis.h.


Constructor & Destructor Documentation

DENORM::DENORM ( )

Definition at line 33 of file normalis.cpp.

{
Init();
}
DENORM::DENORM ( float  x,
float  scaling,
ROW src 
)

Definition at line 38 of file normalis.cpp.

{
Init();
x_origin_ = x; // just copy
y_origin_ = 0.0f;
x_scale_ = y_scale_ = scaling;
row_ = src;
}
DENORM::DENORM ( float  x,
float  scaling,
double  line_m,
double  line_c,
inT16  seg_count,
DENORM_SEG seg_pts,
BOOL8  using_row,
ROW src 
)

Definition at line 46 of file normalis.cpp.

{
Init();
x_origin_ = x; // just copy
y_origin_ = line_c;
ASSERT_HOST(line_m == 0.0);
x_scale_ = y_scale_ = scaling;
SetSegments(seg_pts, seg_count);
}
DENORM::DENORM ( const DENORM src)

Definition at line 63 of file normalis.cpp.

{
num_segs_ = 0;
segs_ = NULL;
rotation_ = NULL;
*this = src;
}
DENORM::~DENORM ( )

Definition at line 92 of file normalis.cpp.

{
Clear();
}

Member Function Documentation

const BLOCK* DENORM::block ( ) const
inline

Definition at line 276 of file normalis.h.

{
return block_;
}
void DENORM::DenormTransform ( const TPOINT pt,
TPOINT original 
) const

Definition at line 233 of file normalis.cpp.

{
FCOORD src_pt(pt.x, pt.y);
FCOORD float_result;
DenormTransform(src_pt, &float_result);
original->x = IntCastRounded(float_result.x());
original->y = IntCastRounded(float_result.y());
}
void DENORM::DenormTransform ( const FCOORD pt,
FCOORD original 
) const

Definition at line 240 of file normalis.cpp.

{
LocalDenormTransform(pt, original);
if (predecessor_ != NULL) {
predecessor_->DenormTransform(*original, original);
} else if (block_ != NULL) {
original->rotate(block_->re_rotation());
}
}
bool DENORM::inverse ( ) const
inline

Definition at line 249 of file normalis.h.

{
return inverse_;
}
void DENORM::LocalDenormTransform ( const TPOINT pt,
TPOINT original 
) const

Definition at line 210 of file normalis.cpp.

{
FCOORD src_pt(pt.x, pt.y);
FCOORD float_result;
LocalDenormTransform(src_pt, &float_result);
original->x = IntCastRounded(float_result.x());
original->y = IntCastRounded(float_result.y());
}
void DENORM::LocalDenormTransform ( const FCOORD pt,
FCOORD original 
) const

Definition at line 217 of file normalis.cpp.

{
FCOORD rotated(pt.x() - final_xshift_, pt.y() - final_yshift_);
if (rotation_ != NULL) {
FCOORD inverse_rotation(rotation_->x(), -rotation_->y());
rotated.rotate(inverse_rotation);
}
original->set_x(rotated.x() / x_scale_ + x_origin_);
float y_scale = y_scale_;
if (num_segs_ > 0)
y_scale = YScaleAtOrigX(original->x());
original->set_y(rotated.y() / y_scale + YOriginAtOrigX(original->x()));
}
void DENORM::LocalNormBlob ( TBLOB blob) const

Definition at line 251 of file normalis.cpp.

{
TBOX blob_box = blob->bounding_box();
float x_center = (blob_box.left() + blob_box.right()) / 2.0f;
ICOORD translation(-IntCastRounded(x_origin_),
-IntCastRounded(YOriginAtOrigX(x_center)));
blob->Move(translation);
// Note that the old way of scaling only allowed for a single
// scale factor.
float scale = YScaleAtOrigX(x_center);
if (scale != 1.0f)
blob->Scale(scale);
if (rotation_ != NULL)
blob->Rotate(*rotation_);
translation.set_x(IntCastRounded(final_xshift_));
translation.set_y(IntCastRounded(final_yshift_));
blob->Move(translation);
}
void DENORM::LocalNormTransform ( const TPOINT pt,
TPOINT transformed 
) const

Definition at line 170 of file normalis.cpp.

{
FCOORD src_pt(pt.x, pt.y);
FCOORD float_result;
LocalNormTransform(src_pt, &float_result);
transformed->x = IntCastRounded(float_result.x());
transformed->y = IntCastRounded(float_result.y());
}
void DENORM::LocalNormTransform ( const FCOORD pt,
FCOORD transformed 
) const

Definition at line 177 of file normalis.cpp.

{
FCOORD translated(pt.x() - x_origin_, pt.y() - YOriginAtOrigX(pt.x()));
translated.set_x(translated.x() * x_scale_);
translated.set_y(translated.y() * YScaleAtOrigX(pt.x()));
if (rotation_ != NULL)
translated.rotate(*rotation_);
transformed->set_x(translated.x() + final_xshift_);
transformed->set_y(translated.y() + final_yshift_);
}
void DENORM::NormTransform ( const TPOINT pt,
TPOINT transformed 
) const

Definition at line 190 of file normalis.cpp.

{
FCOORD src_pt(pt.x, pt.y);
FCOORD float_result;
NormTransform(src_pt, &float_result);
transformed->x = IntCastRounded(float_result.x());
transformed->y = IntCastRounded(float_result.y());
}
void DENORM::NormTransform ( const FCOORD pt,
FCOORD transformed 
) const

Definition at line 197 of file normalis.cpp.

{
FCOORD src_pt(pt);
if (predecessor_ != NULL) {
predecessor_->NormTransform(pt, &src_pt);
} else if (block_ != NULL) {
FCOORD fwd_rotation(block_->re_rotation().x(), -block_->re_rotation().y());
src_pt.rotate(fwd_rotation);
}
LocalNormTransform(src_pt, transformed);
}
DENORM & DENORM::operator= ( const DENORM src)

Definition at line 71 of file normalis.cpp.

{
Clear();
inverse_ = src.inverse_;
pix_ = src.pix_;
block_ = src.block_;
row_ = src.row_;
if (src.rotation_ == NULL)
rotation_ = NULL;
else
rotation_ = new FCOORD(*src.rotation_);
predecessor_ = src.predecessor_;
SetSegments(src.segs_, src.num_segs_);
x_origin_ = src.x_origin_;
y_origin_ = src.y_origin_;
x_scale_ = src.x_scale_;
y_scale_ = src.y_scale_;
final_xshift_ = src.final_xshift_;
final_yshift_ = src.final_yshift_;
return *this;
}
Pix* DENORM::pix ( ) const
inline

Definition at line 243 of file normalis.h.

{
return pix_;
}
const DENORM* DENORM::predecessor ( ) const
inline

Definition at line 260 of file normalis.h.

{
return predecessor_;
}
const DENORM* DENORM::RootDenorm ( ) const
inline

Definition at line 255 of file normalis.h.

{
if (predecessor_ != NULL)
return predecessor_->RootDenorm();
return this;
}
const ROW* DENORM::row ( ) const
inline

Definition at line 270 of file normalis.h.

{
return row_;
}
void DENORM::set_block ( const BLOCK block)
inline

Definition at line 279 of file normalis.h.

{
block_ = block;
}
void DENORM::set_inverse ( bool  value)
inline

Definition at line 252 of file normalis.h.

{
inverse_ = value;
}
void DENORM::set_pix ( Pix *  pix)
inline

Definition at line 246 of file normalis.h.

{
pix_ = pix;
}
void DENORM::set_row ( ROW row)
inline

Definition at line 273 of file normalis.h.

{
row_ = row;
}
void DENORM::SetupBLNormalize ( const BLOCK block,
const ROW row,
float  x_height,
const TBOX word_box,
int  num_segs,
const DENORM_SEG segs 
)

Definition at line 99 of file normalis.cpp.

{
float scale = kBlnXHeight / x_height;
float x_origin = (word_box.left() + word_box.right()) / 2.0f;
float y_origin = 0.0f;
if (num_segs == 0 && row == NULL) {
y_origin = word_box.bottom();
}
SetupNormalization(block, row, NULL, NULL, segs, num_segs,
x_origin, y_origin, scale, scale,
0.0f, static_cast<float>(kBlnBaselineOffset));
}
void DENORM::SetupNormalization ( const BLOCK block,
const ROW row,
const FCOORD rotation,
const DENORM predecessor,
const DENORM_SEG segs,
int  num_segs,
float  x_origin,
float  y_origin,
float  x_scale,
float  y_scale,
float  final_xshift,
float  final_yshift 
)

Definition at line 143 of file normalis.cpp.

{
Clear();
block_ = block;
row_ = row;
if (rotation == NULL)
rotation_ = NULL;
else
rotation_ = new FCOORD(*rotation);
predecessor_ = predecessor;
SetSegments(segs, num_segs);
x_origin_ = x_origin;
y_origin_ = y_origin;
x_scale_ = x_scale;
y_scale_ = y_scale;
final_xshift_ = final_xshift;
final_yshift_ = final_yshift;
}
float DENORM::x_scale ( ) const
inline

Definition at line 264 of file normalis.h.

{
return x_scale_;
}
bool DENORM::XHeightRange ( int  unichar_id,
const UNICHARSET unicharset,
const TBOX bbox,
inT16 min_xht,
inT16 max_xht 
) const

Definition at line 275 of file normalis.cpp.

{
// Clip the top and bottom to the limit of normalized feature space.
int top = ClipToRange<int>(bbox.top(), 0, kBlnCellHeight - 1);
int bottom = ClipToRange<int>(bbox.bottom(), 0, kBlnCellHeight - 1);
// A tolerance of yscale corresponds to 1 pixel in the image.
double tolerance = y_scale();
int min_bottom, max_bottom, min_top, max_top;
unicharset.get_top_bottom(unichar_id, &min_bottom, &max_bottom,
&min_top, &max_top);
// Default returns indicate a mis-fit.
*min_xht = 0;
*max_xht = 0;
// Chars with a misfitting bottom might be sub/superscript/dropcap, or might
// just be wrongly classified. Return an empty range so they have to be
// good to be considered.
if (bottom < min_bottom - tolerance || bottom > max_bottom + tolerance) {
return false;
}
// To help very high cap/xheight ratio fonts accept the correct x-height,
// and to allow the large caps in small caps to accept the xheight of the
// small caps, add kBlnBaselineOffset to chars with a maximum max.
if (max_top == kBlnCellHeight - 1)
max_top += kBlnBaselineOffset;
int height = top - kBlnBaselineOffset;
double min_height = min_top - kBlnBaselineOffset - tolerance;
double max_height = max_top - kBlnBaselineOffset + tolerance;
if (min_height <= 0.0) {
if (height <= 0 || max_height > 0)
*max_xht = MAX_INT16; // Anything will do.
} else if (height > 0) {
int result = IntCastRounded(height * kBlnXHeight / y_scale() / min_height);
*max_xht = static_cast<inT16>(ClipToRange(result, 0, MAX_INT16));
}
if (max_height > 0.0 && height > 0) {
int result = IntCastRounded(height * kBlnXHeight / y_scale() / max_height);
*min_xht = static_cast<inT16>(ClipToRange(result, 0, MAX_INT16));
}
return true;
}
float DENORM::y_scale ( ) const
inline

Definition at line 267 of file normalis.h.

{
return y_scale_;
}

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