Engauge Digitizer 2
Loading...
Searching...
No Matches
GridHealerAbstractBase.h
Go to the documentation of this file.
1/******************************************************************************************************
2 * (C) 2014 markummitchell@github.com. This file is part of Engauge Digitizer, which is released *
3 * under GNU General Public License version 2 (GPLv2) or (at your option) any later version. See file *
4 * LICENSE or go to gnu.org/licenses for details. Distribution requires prior written permission. *
5 ******************************************************************************************************/
6
7#ifndef GRID_HEALER_ABSTRACT_BASE_H
8#define GRID_HEALER_ABSTRACT_BASE_H
9
12#include <QImage>
13
14class GridLog;
15class QImage;
16class QTextStream;
17
18// Trick to discriminate horizontal and vertical pixels is to use different sizes
19const double HALFWIDTH_HORIZONTAL = 0.46;
20const double HALFWIDTH_VERTICAL = 0.54;
21
24
31{
32 public:
33
38
40 void addMutualPair (int x0,
41 int y0,
42 int x1,
43 int y1);
44
47
49 void healed (QImage &image);
50
51 protected:
52
54 virtual void applyMutualPairs (const QImage &image) = 0;
55
60 virtual void doHealingAcrossGaps (QImage &image) = 0;
61
63 void fillTrapezoid (QImage &image,
64 int xBL, int yBL,
65 int xBR, int yBR,
66 int xTR, int yTR,
67 int xTL, int yTL);
68
70 GridLog &gridLog ();
71
73 double maxPointSeparation () const;
74
77
80
83
85 bool pointsAreGood (const QImage &image,
86 int x0,
87 int y0,
88 int x1,
89 int y1) const;
90
92 void saveGapSeparation (double gapSeparation);
93
94 private:
96
104 bool blackPixelRegionIsBigEnough (const QImage &image,
105 int x,
106 int y) const;
107
109 void doHealingOnBelowAndAboveRangePair (QImage &image,
110 int xBelowStart,
111 int xBelowEnd,
112 int xAboveStart,
113 int xAboveEnd);
114
116 void doHealingOnBelowRange (QImage &image,
117 int xBelowStart,
118 int xBelowEnd,
119 int maxHorSep);
120
121 DocumentModelGridRemoval m_modelGridRemoval;
122
123 int m_maxPointSeparation; // Pixel distance between two connected points
124
125 // Store opposing mutual pair points as each grid line is removed, then after all removals are
126 // done (when complex vertical/horizontal interactions have finished) we heal
127 // across these mutual pairs
128 MutualPairHalves m_mutualPairHalvesBelow;
129 MutualPairHalves m_mutualPairHalvesAbove;
130
131 GridLog &m_gridLog;
132};
133
134#endif // GRID_HEALER_ABSTRACT_BASE_H
const int INNER_RADIUS_MIN
QList< QPoint > MutualPairHalves
Save one half of a mutual pair.
const double HALFWIDTH_HORIZONTAL
const double HALFWIDTH_VERTICAL
Model for DlgSettingsGridRemoval and CmdSettingsGridRemoval. The settings are unstable until the user...
Class that 'heals' the curves after one grid line has been removed.
DocumentModelGridRemoval & modelGridRemoval()
DocumentModelGridRemoval get method.
bool pointsAreGood(const QImage &image, int x0, int y0, int x1, int y1) const
Apply blackPixelRegionIsBigEnough to regions around each of two points.
void healed(QImage &image)
Return healed image after grid removal.
virtual void applyMutualPairs(const QImage &image)=0
Apply mutual pair points after all grid removal is done.
const MutualPairHalves & mutualPairHalvesAbove() const
Mutual pair halves for below grid line.
const MutualPairHalves & mutualPairHalvesBelow() const
Mutual pair halves for above grid line.
static int pixelCountInRegionThreshold(const DocumentModelGridRemoval &modelGridRemoval)
Threshold number of pixels in a region to be considered too-small or big-enough.
GridLog & gridLog()
Logging get method.
void addMutualPair(int x0, int y0, int x1, int y1)
Add two points on either side of a gap. Later, after removal, the black points will be processed.
virtual void doHealingAcrossGaps(QImage &image)=0
Guts of the algorithm in which sequences of black pixels across the gap from each other are filled in...
double maxPointSeparation() const
Max point separation get method.
void fillTrapezoid(QImage &image, int xBL, int yBL, int xBR, int yBR, int xTR, int yTR, int xTL, int yTL)
Fill trapezoid with bottom left, bottom right, top right, and top left points.
void saveGapSeparation(double gapSeparation)
Gap separation set method.
Class that does special logging for GridLog and GridRemoval classes.
Definition GridLog.h:17