#include <baselinedetect.h>
|
static double | SpacingModelError (double perp_disp, double line_spacing, double line_offset) |
|
Definition at line 125 of file baselinedetect.h.
◆ BaselineBlock()
tesseract::BaselineBlock::BaselineBlock |
( |
int |
debug_level, |
|
|
bool |
non_text, |
|
|
TO_BLOCK * |
block |
|
) |
| |
Definition at line 418 of file baselinedetect.cpp.
420 debug_level_(debug_level),
421 non_text_block_(non_text),
422 good_skew_angle_(
false),
427 TO_ROW_IT row_it(block_->
get_rows());
428 for (row_it.mark_cycle_pt(); !row_it.cycled_list(); row_it.forward()) {
int blob_x_order(const void *item1, const void *item2)
◆ ~BaselineBlock()
tesseract::BaselineBlock::~BaselineBlock |
( |
| ) |
|
|
inline |
◆ block()
TO_BLOCK* tesseract::BaselineBlock::block |
( |
| ) |
const |
|
inline |
◆ DrawFinalRows()
void tesseract::BaselineBlock::DrawFinalRows |
( |
const ICOORD & |
page_tr | ) |
|
Definition at line 606 of file baselinedetect.cpp.
607 if (non_text_block_) {
610 double gradient = tan(skew_angle_);
611 FCOORD rotation(1.0f, 0.0f);
615 TO_ROW_IT row_it = block_->
get_rows();
616 for (row_it.mark_cycle_pt(); !row_it.cycled_list(); row_it.forward()) {
627 if (block_->
blobs.length() > 0) {
628 tprintf(
"%d blobs discarded as noise\n", block_->
blobs.length());
void tprintf(const char *format,...)
void plot_blob_list(ScrollView *win, BLOBNBOX_LIST *list, ScrollView::Color body_colour, ScrollView::Color child_colour)
void plot_parallel_row(TO_ROW *row, float gradient, int32_t left, ScrollView::Color colour, FCOORD rotation)
void draw_meanlines(TO_BLOCK *block, float gradient, int32_t left, ScrollView::Color colour, FCOORD rotation)
ScrollView * create_to_win(ICOORD page_tr)
PDBLK pdblk
Page Description Block.
void bounding_box(ICOORD &bottom_left, ICOORD &top_right) const
get box
◆ DrawPixSpline()
void tesseract::BaselineBlock::DrawPixSpline |
( |
Image |
pix_in | ) |
|
Definition at line 635 of file baselinedetect.cpp.
636 if (non_text_block_) {
639 TO_ROW_IT row_it = block_->
get_rows();
640 for (row_it.mark_cycle_pt(); !row_it.cycled_list(); row_it.forward()) {
641 row_it.data()->baseline.plot(pix_in);
◆ FitBaselinesAndFindSkew()
bool tesseract::BaselineBlock::FitBaselinesAndFindSkew |
( |
bool |
use_box_bottoms | ) |
|
Definition at line 449 of file baselinedetect.cpp.
450 if (non_text_block_) {
453 std::vector<double> angles;
454 for (
auto row : rows_) {
455 if (row->FitBaseline(use_box_bottoms)) {
456 double angle = row->BaselineAngle();
457 angles.push_back(angle);
459 if (debug_level_ > 1) {
464 if (!angles.empty()) {
466 good_skew_angle_ =
true;
469 good_skew_angle_ =
false;
471 if (debug_level_ > 0) {
472 tprintf(
"Initial block skew angle = %g, good = %d\n", skew_angle_,
475 return good_skew_angle_;
T MedianOfCircularValues(T modulus, std::vector< T > &v)
◆ FitBaselineSplines()
void tesseract::BaselineBlock::FitBaselineSplines |
( |
bool |
enable_splines, |
|
|
bool |
show_final_rows, |
|
|
Textord * |
textord |
|
) |
| |
Definition at line 575 of file baselinedetect.cpp.
577 double gradient = tan(skew_angle_);
578 FCOORD rotation(1.0f, 0.0f);
580 if (enable_splines) {
581 textord->make_spline_rows(block_, gradient, show_final_rows);
585 TO_ROW_IT row_it = block_->
get_rows();
586 for (row_it.mark_cycle_pt(); !row_it.cycled_list(); row_it.forward()) {
587 TO_ROW *row = row_it.data();
588 int32_t xstarts[2] = {block_box.left(), block_box.right()};
589 double coeffs[3] = {0.0, row->line_m(), row->line_c()};
590 row->baseline = QSPLINE(1, xstarts, coeffs);
595 textord->compute_block_xheight(block_, gradient);
bool textord_restore_underlines
void restore_underlined_blobs(TO_BLOCK *block)
FCOORD classify_rotation() const
void set_xheight(int32_t height)
set char size
◆ ParallelizeBaselines()
void tesseract::BaselineBlock::ParallelizeBaselines |
( |
double |
default_block_skew | ) |
|
Definition at line 480 of file baselinedetect.cpp.
481 if (non_text_block_) {
484 if (!good_skew_angle_) {
485 skew_angle_ = default_block_skew;
487 if (debug_level_ > 0) {
488 tprintf(
"Adjusting block to skew angle %g\n", skew_angle_);
490 FCOORD direction(cos(skew_angle_), sin(skew_angle_));
491 for (
auto row : rows_) {
492 row->AdjustBaselineToParallel(debug_level_, direction);
493 if (debug_level_ > 1) {
497 if (rows_.size() < 3 || !ComputeLineSpacing()) {
503 unsigned best_row = 0;
505 line_spacing_, line_offset_);
506 for (
unsigned r = 1; r < rows_.size(); ++r) {
508 line_spacing_, line_offset_);
509 if (error < best_error) {
515 double offset = line_offset_;
516 for (
auto r = best_row + 1; r < rows_.size(); ++r) {
517 offset = rows_[r]->AdjustBaselineToGrid(debug_level_, direction,
518 line_spacing_, offset);
520 offset = line_offset_;
521 for (
int r = best_row - 1; r >= 0; --r) {
522 offset = rows_[r]->AdjustBaselineToGrid(debug_level_, direction,
523 line_spacing_, offset);
static double SpacingModelError(double perp_disp, double line_spacing, double line_offset)
◆ PrepareForSplineFitting()
void tesseract::BaselineBlock::PrepareForSplineFitting |
( |
ICOORD |
page_tr, |
|
|
bool |
remove_noise |
|
) |
| |
Definition at line 557 of file baselinedetect.cpp.
558 if (non_text_block_) {
564 FCOORD rotation(1.0f, 0.0f);
565 double gradient = tan(skew_angle_);
void pre_associate_blobs(ICOORD page_tr, TO_BLOCK *block, FCOORD rotation, bool testing_on)
void vigorous_noise_removal(TO_BLOCK *block)
void separate_underlines(TO_BLOCK *block, float gradient, FCOORD rotation, bool testing_on)
◆ SetupBlockParameters()
void tesseract::BaselineBlock::SetupBlockParameters |
( |
| ) |
const |
Definition at line 528 of file baselinedetect.cpp.
529 if (line_spacing_ > 0.0) {
532 std::min(block_->
line_spacing,
static_cast<float>(line_spacing_));
533 if (min_spacing < block_->line_size) {
541 TO_ROW_IT row_it(block_->
get_rows());
542 for (
unsigned r = 0; r < rows_.size(); ++r, row_it.forward()) {
543 BaselineRow *row = rows_[r];
544 TO_ROW *to_row = row_it.data();
545 row->SetupOldLineParameters(to_row);
const double kMaxBlobSizeMultiple
◆ skew_angle()
double tesseract::BaselineBlock::skew_angle |
( |
| ) |
const |
|
inline |
◆ SpacingModelError()
double tesseract::BaselineBlock::SpacingModelError |
( |
double |
perp_disp, |
|
|
double |
line_spacing, |
|
|
double |
line_offset |
|
) |
| |
|
static |
Definition at line 437 of file baselinedetect.cpp.
440 int multiple =
IntCastRounded((perp_disp - line_offset) / line_spacing);
441 double model_y = line_spacing * multiple + line_offset;
442 return fabs(perp_disp - model_y);
int IntCastRounded(double x)
The documentation for this class was generated from the following files: