86 if (Length < 0) Length = 0;
93 if (Evidence < WorstEvidence)
94 WorstEvidence = Evidence;
105 if (Evidence < WorstEvidence)
106 WorstEvidence = Evidence;
113 return (WorstEvidence);
139 TotalWeight = w1 + w2;
143 MergedProto->
X = p1->
X * w1 + p2->
X * w2;
144 MergedProto->
Y = p1->
Y * w1 + p2->
Y * w2;
174 FLOAT32 Match, OldMatch, NewMatch;
180 for (Pid = 0; Pid < Class->
NumProtos; Pid++) {
183 (
FLOAT32) NumMerged[Pid], 1.0, &MergedProto);
186 Match =
MIN(OldMatch, NewMatch);
187 if (Match > BestMatch) {
227 if (Dangle < -0.5) Dangle += 1.0;
228 if (Dangle > 0.5) Dangle -= 1.0;
235 return (
EvidenceOf (Distance * Distance + Dangle * Dangle));
251 Similarity = Similarity * Similarity * Similarity;
253 Similarity = Similarity * Similarity;
257 return (1.0 / (1.0 + Similarity));
285 if (AngleError > 0.5)
286 AngleError = 1.0 - AngleError;
288 if (AngleError > MaxAngleError)
320 FLOAT32 CosOfAngle, SinOfAngle;
322 Length = Proto->
Length / 2.0 + TangentPad;
323 Angle = Proto->
Angle * 2.0 *
PI;
324 CosOfAngle = fabs(cos(Angle));
325 SinOfAngle = fabs(sin(Angle));
327 Pad =
MAX (CosOfAngle * Length, SinOfAngle * OrthogonalPad);
328 BoundingBox->
MinX = Proto->
X - Pad;
329 BoundingBox->
MaxX = Proto->
X + Pad;
331 Pad =
MAX(SinOfAngle * Length, CosOfAngle * OrthogonalPad);
332 BoundingBox->
MinY = Proto->
Y - Pad;
333 BoundingBox->
MaxY = Proto->
Y + Pad;
347 if (X < Rectangle->MinX)
return (
FALSE);
349 if (Y < Rectangle->MinY)
return (
FALSE);
double training_similarity_curl
double training_tangent_bbox_pad
double training_similarity_midpoint
BOOL8 DummyFastMatch(FEATURE Feature, PROTO Proto)
void FillABC(PROTO Proto)
void ComputeMergedProto(PROTO p1, PROTO p2, FLOAT32 w1, FLOAT32 w2, PROTO MergedProto)
BOOL8 PointInside(FRECT *Rectangle, FLOAT32 X, FLOAT32 Y)
double training_orthogonal_bbox_pad
double EvidenceOf(double Similarity)
FLOAT32 SubfeatureEvidence(FEATURE Feature, PROTO Proto)
void MakeNewFromOld(PROTO New, PROTOTYPE *Old)
#define double_VAR(name, val, comment)
double training_angle_match_scale
FEATURE NewFeature(const FEATURE_DESC_STRUCT *FeatureDesc)
void FreeFeature(FEATURE Feature)
void ComputePaddedBoundingBox(PROTO Proto, FLOAT32 TangentPad, FLOAT32 OrthogonalPad, FRECT *BoundingBox)
FLOAT32 CompareProtos(PROTO p1, PROTO p2)
#define MAX_LENGTH_MISMATCH
double training_angle_pad
#define GetPicoFeatureLength()
int FindClosestExistingProto(CLASS_TYPE Class, int NumMerged[], PROTOTYPE *Prototype)
#define ProtoIn(Class, Pid)
TESS_API const FEATURE_DESC_STRUCT PicoFeatDesc
#define WORST_MATCH_ALLOWED