tesseract v5.3.3.20231005
tesseract::LineFinder Class Reference

#include <linefind.h>

Static Public Member Functions

static void FindAndRemoveLines (int resolution, bool debug, Image pix, int *vertical_x, int *vertical_y, Image *pix_music_mask, TabVector_LIST *v_lines, TabVector_LIST *h_lines)
 

Detailed Description

The LineFinder class is a simple static function wrapper class that mainly exposes the FindVerticalLines function.

Definition at line 31 of file linefind.h.

Member Function Documentation

◆ FindAndRemoveLines()

void tesseract::LineFinder::FindAndRemoveLines ( int  resolution,
bool  debug,
Image  pix,
int *  vertical_x,
int *  vertical_y,
Image pix_music_mask,
TabVector_LIST *  v_lines,
TabVector_LIST *  h_lines 
)
static

Finds vertical and horizontal line objects in the given pix and removes them.

Uses the given resolution to determine size thresholds instead of any that may be present in the pix.

The output vertical_x and vertical_y contain a sum of the output vectors, thereby giving the mean vertical direction.

If pix_music_mask != nullptr, and music is detected, a mask of the staves and anything that is connected (bars, notes etc.) will be returned in pix_music_mask, the mask subtracted from pix, and the lines will not appear in v_lines or h_lines.

The output vectors are owned by the list and Frozen (cannot refit) by having no boxes, as there is no need to refit or merge separator lines.

The detected lines are removed from the pix.

Definition at line 691 of file linefind.cpp.

693 {
694 if (pix == nullptr || vertical_x == nullptr || vertical_y == nullptr) {
695 tprintf("Error in parameters for LineFinder::FindAndRemoveLines\n");
696 return;
697 }
698 Image pix_vline = nullptr;
699 Image pix_non_vline = nullptr;
700 Image pix_hline = nullptr;
701 Image pix_non_hline = nullptr;
702 Image pix_intersections = nullptr;
703 Pixa *pixa_display = debug ? pixaCreate(0) : nullptr;
704 GetLineMasks(resolution, pix, &pix_vline, &pix_non_vline, &pix_hline, &pix_non_hline,
705 &pix_intersections, pix_music_mask, pixa_display);
706 // Find lines, convert to TabVector_LIST and remove those that are used.
707 FindAndRemoveVLines(pix_intersections, vertical_x, vertical_y, &pix_vline,
708 pix_non_vline, pix, v_lines);
709 pix_intersections.destroy();
710 if (pix_hline != nullptr) {
711 // Recompute intersections and re-filter false positive h-lines.
712 if (pix_vline != nullptr) {
713 pix_intersections = pix_vline & pix_hline;
714 }
715 if (!FilterFalsePositives(resolution, pix_non_hline, pix_intersections, pix_hline)) {
716 pix_hline.destroy();
717 }
718 }
719 FindAndRemoveHLines(pix_intersections, *vertical_x, *vertical_y, &pix_hline,
720 pix_non_hline, pix, h_lines);
721 if (pixa_display != nullptr && pix_vline != nullptr) {
722 pixaAddPix(pixa_display, pix_vline, L_CLONE);
723 }
724 if (pixa_display != nullptr && pix_hline != nullptr) {
725 pixaAddPix(pixa_display, pix_hline, L_CLONE);
726 }
727 pix_intersections.destroy();
728 if (pix_vline != nullptr && pix_hline != nullptr) {
729 // Remove joins (intersections) where lines cross, and the residue.
730 // Recalculate the intersections, since some lines have been deleted.
731 pix_intersections = pix_vline & pix_hline;
732 // Fatten up the intersections and seed-fill to get the intersection
733 // residue.
734 Image pix_join_residue = pixDilateBrick(nullptr, pix_intersections, 5, 5);
735 pixSeedfillBinary(pix_join_residue, pix_join_residue, pix, 8);
736 // Now remove the intersection residue.
737 pixSubtract(pix, pix, pix_join_residue);
738 pix_join_residue.destroy();
739 }
740 // Remove any detected music.
741 if (pix_music_mask != nullptr && *pix_music_mask != nullptr) {
742 if (pixa_display != nullptr) {
743 pixaAddPix(pixa_display, *pix_music_mask, L_CLONE);
744 }
745 pixSubtract(pix, pix, *pix_music_mask);
746 }
747 if (pixa_display != nullptr) {
748 pixaAddPix(pixa_display, pix, L_CLONE);
749 }
750
751 pix_vline.destroy();
752 pix_non_vline.destroy();
753 pix_hline.destroy();
754 pix_non_hline.destroy();
755 pix_intersections.destroy();
756 if (pixa_display != nullptr) {
757 pixaConvertToPdf(pixa_display, resolution, 1.0f, 0, 0, "LineFinding", "vhlinefinding.pdf");
758 pixaDestroy(&pixa_display);
759 }
760}
void tprintf(const char *format,...)
Definition: tprintf.cpp:41

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