Friction Ridge Image and Features Technology Evaluations
API for participating in NIST's Friction Ridge Image and Features Technology Evaluations.
Loading...
Searching...
No Matches
efs.h
Go to the documentation of this file.
1/*
2 * This software was developed at the National Institute of Standards and
3 * Technology (NIST) by employees of the Federal Government in the course
4 * of their official duties. Pursuant to title 17 Section 105 of the
5 * United States Code, this software is not subject to copyright protection
6 * and is in the public domain. NIST assumes no responsibility whatsoever for
7 * its use by other parties, and makes no guarantees, expressed or implied,
8 * about its quality, reliability, or any other characteristic.
9 */
10
11#ifndef FRIF_EFS_H_
12#define FRIF_EFS_H_
13
14#include <unordered_map>
15#include <variant>
16
17#include <frifte/common.h>
18
20namespace FRIF::EFS
21{
23 enum class Impression
24 {
25 PlainContact = 0,
26 RolledContact = 1,
27 Latent = 4,
28 LiveScanSwipe = 8,
31 Other = 28,
32 Unknown = 29,
33 Contactless = 43
34 };
36 using IMP = Impression;
37
53 const std::underlying_type_t<Impression> i);
54
57 {
58 Unknown = 0,
61 OpticalDirect = 5,
62 Capacitive = 9,
64
66 LatentLift = 22
67 };
73
89 const std::underlying_type_t<FrictionRidgeCaptureTechnology> i);
90
93 {
94 UnknownFinger = 0,
95 RightThumb = 1,
96 RightIndex = 2,
97 RightMiddle = 3,
98 RightRing = 4,
99 RightLittle = 5,
100 LeftThumb = 6,
101 LeftIndex = 7,
102 LeftMiddle = 8,
103 LeftRing = 9,
104 LeftLittle = 10,
105 RightExtraDigit = 16,
106 LeftExtraDigit = 17,
107
108 RightFour = 13,
109 LeftFour = 14,
111
112 UnknownPalm = 20,
113 RightFullPalm = 21,
114 RightWritersPalm = 22,
115 LeftFullPalm = 23,
116 LeftWritersPalm = 24,
117 RightLowerPalm = 25,
118 RightUpperPalm = 26,
119 LeftLowerPalm = 27,
120 LeftUpperPalm = 28,
121 RightPalmOther = 29,
122 LeftPalmOther = 30,
124 RightThenar = 32,
125 RightHypothenar = 33,
126 LeftInterdigital = 34,
127 LeftThenar = 35,
128 LeftHypothenar = 36,
129 RightGrasp = 37,
130 LeftGrasp = 38,
137
139 EJIOrTip = 19
140 };
146
162 const std::underlying_type_t<FrictionRidgeGeneralizedPosition> i);
163
166 {
169 Other,
171 Laser,
172 RUVIS,
174 Visual,
176 };
182
198 const std::underlying_type_t<ProcessingMethod> i);
199
208 {
209 Arch,
210 Whorl,
211 RightLoop,
212 LeftLoop,
216 Scar,
218 };
224
240 const std::underlying_type_t<PatternGeneralClassification> i);
241
250 {
251 PlainArch,
253 };
254
270 const std::underlying_type_t<ArchPatternSubclassification> i);
271
286
302 const std::underlying_type_t<WhorlPatternSubclassification> i);
303
311 using PatternSubclassification = std::variant<
313
319
328 {
329 Inner,
330 Outer,
331 Meeting
332 };
333
349 const std::underlying_type_t<WhorlDeltaRelationship> i);
350
356
359 {
360 public:
368 const std::optional<PatternSubclassification> = {},
369 const std::optional<WhorlDeltaRelationship> = {});
370
376 void
379
390 void
393
400 void
403
410 const;
411
416 std::optional<PatternSubclassification>
418 const;
419
424 std::optional<WhorlDeltaRelationship>
426 const;
427
428 private:
430 std::optional<PatternSubclassification> sub{};
431 std::optional<WhorlDeltaRelationship> wdr{};
432 };
433
438 {
439 Value,
440 Limited,
441 NoValue,
443 };
449
465 const std::underlying_type_t<ValueAssessment> i);
466
468 enum class Substrate
469 {
470 Paper,
472
473 Plastic,
474 Glass,
479
482
483 Other,
484 Unknown
485 };
486
502 const std::underlying_type_t<Substrate> i);
503
505 enum class MinutiaType
506 {
509 Other,
510 Unknown
511 };
512
528 const std::underlying_type_t<MinutiaType> i);
529
531 struct Minutia
532 {
536 std::optional<uint16_t> coordinateUncertainty{};
537
542 uint16_t theta{};
544 std::optional<uint8_t> thetaUncertainty{};
545
548
565 Minutia(
566 const Coordinate &coordinate = {},
567 const uint16_t theta = {},
569 const std::optional<uint16_t> coordinateUncertainty = {},
570 const std::optional<uint8_t> thetaUncertainty = {});
571 };
572
574 struct Core
575 {
579 std::optional<uint16_t> coordinateUncertainty{};
580
586 std::optional<uint16_t> direction{};
588 std::optional<uint8_t> directionUncertainty{};
589
605 Core(
606 const Coordinate &coordinate = {},
607 const std::optional<uint16_t> &direction = {},
608 const std::optional<uint16_t> coordinateUncertainty = {},
609 const std::optional<uint8_t> directionUncertainty = {});
610 };
611
613 struct Delta
614 {
618 std::optional<uint16_t> coordinateUncertainty{};
619
626 std::optional<std::tuple<std::optional<uint16_t>,
627 std::optional<uint16_t>, std::optional<uint16_t>>>
630 std::optional<std::tuple<std::optional<uint8_t>,
631 std::optional<uint8_t>, std::optional<uint8_t>>>
633
649 Delta(
650 const Coordinate &coordinate = {},
651 const std::optional<std::tuple<std::optional<uint16_t>,
652 std::optional<uint16_t>, std::optional<uint16_t>>>
653 &direction = {},
654 std::optional<uint16_t> coordinateUncertainty = {},
655 const std::optional<std::tuple<std::optional<uint8_t>,
656 std::optional<uint8_t>, std::optional<uint8_t>>>
658 };
659
662 {
664 int16_t direction{0};
672 std::optional<uint8_t> uncertainty{15};
673
683 const int16_t direction = 0,
684 const std::optional<uint8_t> &uncertainty = 15);
685 };
686
695 {
697 Definite,
699 Possible,
722 };
724
740 const std::underlying_type_t<CorrespondenceType> i);
741
829
831 enum class RidgeQuality
832 {
834 Background = 0,
854 };
855
871 const std::underlying_type_t<RidgeQuality> i);
872
875 {
886 std::vector<Coordinate> region{};
889 };
890
901
917 const std::underlying_type_t<FingerCrease> i);
918
942
958 const std::underlying_type_t<PalmCrease> i);
959
962 {
964 Crack,
965 Cut,
967 /*
968 * XXX: Considered a distinctive area in ANSI/NIST-ITL 1-2011
969 * Update:2015, requiring a polygon, not a segment.
970 */
971// PermanentScar,
972 Other
973 };
974
990 const std::underlying_type_t<LinearDiscontinuity> i);
991
1001
1004 {
1005 public:
1024 Crease(
1026 const CreaseClassification cld,
1027 const std::vector<Segment> &segments);
1028
1035 const;
1036
1041 void
1044
1051 const;
1052
1061 void
1063 const CreaseClassification cld);
1064
1076 std::vector<Segment>
1077 getSegments()
1078 const;
1079
1084 void
1085 addSegment(
1086 const Segment &segment);
1087
1092 void
1094 const std::vector<Segment> &segments);
1095
1096 private:
1111 std::vector<Segment> segments{};
1112 };
1113
1116 {
1117 public:
1119 enum class Status : uint8_t
1120 {
1122 Success = 0,
1123
1125 NotComputed = 254,
1127 Error = 255
1128 };
1129
1132 {
1134 std::optional<ProductIdentifier> identifier{};
1136 std::optional<std::string> version{};
1138 std::optional<std::string> comment{};
1140 std::optional<std::string> modelSHA256{};
1141
1142 auto operator<=>(const Description&) const;
1143 bool operator==(const Description&) const;
1144 };
1145
1147 static const Description NFIQ2v23;
1148
1151 {
1152 std::size_t
1153 operator()(
1154 const Description &d)
1155 const;
1156 };
1157
1159
1165 const double value);
1166
1174 explicit operator bool()
1175 const
1176 noexcept;
1177
1183 bool
1184 hasValue()
1185 const
1186 noexcept;
1187
1199 double
1200 operator*()
1201 const;
1202
1209 double
1210 getValue()
1211 const;
1212
1213 Status
1214 getStatus()
1215 const;
1216
1217 std::optional<std::string>
1218 getMessage()
1219 const;
1220
1229 void
1230 setMessage(
1231 const std::string &message);
1232
1233 private:
1236
1244 std::optional<double> value{};
1245
1255 std::optional<std::string> message{};
1256 };
1257
1259 using QualityMeasureMap = std::unordered_map<
1262
1272 {
1277 uint8_t identifier{};
1278
1283 uint16_t ppi{};
1284
1294 std::optional<QualityMeasureMap> quality{};
1295
1304
1306 std::optional<Orientation> orientation{};
1308 std::optional<std::vector<ProcessingMethod>> lpm{};
1310 std::optional<ValueAssessment> valueAssessment{};
1312 std::optional<Substrate> lsb{};
1314 std::optional<PatternClassification> pat{};
1315
1319 std::optional<bool> plr{};
1324 std::optional<bool> trv{};
1325
1336 std::optional<std::vector<Core>> cores{};
1347 std::optional<std::vector<Delta>> deltas{};
1363 std::optional<std::vector<Minutia>> minutiae{};
1365 std::optional<std::vector<Crease>> creases{};
1377 std::optional<std::vector<Coordinate>> roi{};
1378
1393 std::optional<std::vector<RidgeQualityRegion>> rqm{};
1394
1404 std::optional<bool> complex{};
1405 };
1406}
1407
1408#endif /* FRIF_EFS_H_ */
Friction ridge linear flexion creases.
Definition efs.h:1004
std::vector< Segment > getSegments() const
void setFrictionRidgeGeneralizedPosition(const FrictionRidgeGeneralizedPosition fgp)
Crease(const FrictionRidgeGeneralizedPosition fgp, const CreaseClassification cld, const std::vector< Segment > &segments)
Crease constructor.
void addSegment(const Segment &segment)
void setCreaseClassification(const CreaseClassification cld)
void setSegments(const std::vector< Segment > &segments)
CreaseClassification getCreaseClassification() const
FrictionRidgeGeneralizedPosition getFrictionRidgeGeneralizedPosition() const
Classification of friction ridge structure.
Definition efs.h:359
std::optional< PatternSubclassification > getPatternSubclassification() const
void setPatternGeneralClassification(const PatternGeneralClassification)
void setWhorlDeltaRelationship(const WhorlDeltaRelationship)
PatternClassification(const PatternGeneralClassification, const std::optional< PatternSubclassification >={}, const std::optional< WhorlDeltaRelationship >={})
std::optional< WhorlDeltaRelationship > getWhorlDeltaRelationship() const
void setPatternSubclassification(const PatternSubclassification)
PatternGeneralClassification getPatternGeneralClassification() const
Measurement on the biometric sample.
Definition efs.h:1116
Status
Status of QualityMeasure value computation.
Definition efs.h:1120
@ NotComputed
No attempt made to compute value.
@ Success
Value computed successfully.
@ Error
Error occurred during computation of value.
void setMessage(const std::string &message)
bool hasValue() const noexcept
std::optional< std::string > getMessage() const
static const Description NFIQ2v23
Description for NFIQ 2 v2.3.
Definition efs.h:784
Types (mostly) mirroring the ANSI/NIST-ITL Type 9 Extended Feature Set.
Definition efs.h:21
std::unordered_map< QualityMeasure::Description, QualityMeasure, QualityMeasure::DescriptionHash > QualityMeasureMap
Convenience type for storing QualityMeasure.
Definition efs.h:1259
ArchPatternSubclassification toArchPatternSubclassification(const std::underlying_type_t< ArchPatternSubclassification > i)
Convert integer to enumerated type.
std::variant< FingerCrease, PalmCrease, LinearDiscontinuity > CreaseClassification
Collection of crease types.
Definition efs.h:999
Substrate toSubstrate(const std::underlying_type_t< Substrate > i)
Convert integer to enumerated type.
MinutiaType toMinutiaType(const std::underlying_type_t< MinutiaType > i)
Convert integer to enumerated type.
PatternGeneralClassification
General classification of friction ridge structure.
Definition efs.h:208
PatternGeneralClassification toPatternGeneralClassification(const std::underlying_type_t< PatternGeneralClassification > i)
Convert integer to enumerated type.
std::variant< ArchPatternSubclassification, WhorlPatternSubclassification > PatternSubclassification
Subclassification of PatternClassification.
Definition efs.h:311
PatternSubclassification SUB
Convenience PatternSubclassification type using ANSI/NIST-ITL mnemonic.
Definition efs.h:318
FingerCrease
Permanent flexion creases on fingers.
Definition efs.h:893
@ DistalInterphalangeal
Below distal phalanx.
@ ProximalDigital
Between proximal phalanx and palm.
@ ProximalInterphalangeal
Below medial phalanx.
RidgeQuality toRidgeQuality(const std::underlying_type_t< RidgeQuality > i)
Convert integer to enumerated type.
FrictionRidgeGeneralizedPosition
Friction positions codes from ANSI/NIST-ITL 1-2011 (2015).
Definition efs.h:93
LinearDiscontinuity
Linear discontinuities that are not named permanent creases.
Definition efs.h:962
WhorlPatternSubclassification
Subclassification when PatternClassification is Whorl.
Definition efs.h:280
FrictionRidgeCaptureTechnology
Capture device codes from ANSI/NIST-ITL 1-2011 (2015).
Definition efs.h:57
ProcessingMethod
Processing method codes from ANSI/NIST-ITL 1-2011 (2015).
Definition efs.h:166
WhorlDeltaRelationship toWhorlDeltaRelationship(const std::underlying_type_t< WhorlDeltaRelationship > i)
Convert integer to enumerated type.
WhorlPatternSubclassification toWhorlPatternSubclassification(const std::underlying_type_t< WhorlPatternSubclassification > i)
Convert integer to enumerated type.
ValueAssessment toValueAssessment(const std::underlying_type_t< ValueAssessment > i)
Convert integer to enumerated type.
FrictionRidgeGeneralizedPosition toFrictionRidgeGeneralizedPosition(const std::underlying_type_t< FrictionRidgeGeneralizedPosition > i)
Convert integer to enumerated type.
PalmCrease toPalmCrease(const std::underlying_type_t< PalmCrease > i)
Convert integer to enumerated type.
Impression
Friction ridge impression types from ANSI/NIST-ITL 1-202X.
Definition efs.h:24
ArchPatternSubclassification
Subclassification when PatternClassification is Arch.
Definition efs.h:250
CorrespondenceType toCorrespondenceType(const std::underlying_type_t< CorrespondenceType > i)
Convert integer to enumerated type.
ValueAssessment
Value assessment codes from ANSI/NIST-ITL 1-2011 (2015).
Definition efs.h:438
FingerCrease toFingerCrease(const std::underlying_type_t< FingerCrease > i)
Convert integer to enumerated type.
MinutiaType
Types of minutiae.
Definition efs.h:506
LinearDiscontinuity toLinearDiscontinuity(const std::underlying_type_t< LinearDiscontinuity > i)
Convert integer to enumerated type.
CorrespondenceType
Types of correspondence.
Definition efs.h:695
@ Definite
Probe feature definitely corresponds.
@ OutOfRegion
Probe feature lies outside the reference.
@ Possible
Probe feature possibly/debatably corresponds.
@ DoesNotExist
Probe feature definitely does not exist.
@ UnclearArea
Probe feature lies in an area experiencing quality issues in the reference.
ProcessingMethod toProcessingMethod(const std::underlying_type_t< ProcessingMethod > i)
Convert integer to enumerated type.
Impression toImpression(const std::underlying_type_t< Impression > i)
Convert integer to enumerated type.
PalmCrease
Permanent flexion creases on palms.
Definition efs.h:921
@ ProximalTransverse
Diagonal across palm.
@ Bottom
Colloquial definition for RadialLongitudinal.
@ WristBracelet
Colloquial definition for Wrist.
@ Wrist
Bottom of the palm at the wrist.
@ RadialLongitudinal
Around the base of thenar.
@ Top
Colloquial definition for DistalTransverse.
@ DistalTransverse
Bottom of the interdigital area.
@ Middle
Colloquial definition for ProximalTransverse.
RidgeQuality
Local ridge quality codes from ANSI/NIST-ITL 1-2011 (2015).
Definition efs.h:832
@ DebatableMinutiae
Continuity of ridge flow is certain; minutiae are debatable.
@ DebatableRidgeFlow
Continuity of ridge flow is uncertain.
@ DefinitiveRidgeEdges
Ridge edges, minutiae, and ridge flow are obvious and unambiguous; pores are either debatable or not ...
@ DefinitivePores
Pores and ridge edges are obvious and unambiguous.
@ Background
No ridge information.
@ DefinitiveMinutiae
Minutiae and ridge flow are obvious and unambiguous; ridge edges are debatable.
FrictionRidgeCaptureTechnology toFrictionRidgeCaptureTechnology(const std::underlying_type_t< FrictionRidgeCaptureTechnology > i)
Convert integer to enumerated type.
Substrate
Substrate codes from ANSI/NIST-ITL 1-2011 (2015).
Definition efs.h:469
WhorlDeltaRelationship
Whorl-Delta relationship.
Definition efs.h:328
std::tuple< Coordinate, Coordinate > Segment
Line segment.
Definition common.h:250
Pixel location in an image.
Definition common.h:226
Singular point of focus of innermost recurving ridge.
Definition efs.h:575
std::optional< uint16_t > direction
Direction pointing away from the center of the curve, in degrees [0,359] counterclockwise to the righ...
Definition efs.h:586
std::optional< uint8_t > directionUncertainty
Uncertainty of direction, in degrees [0, 180].
Definition efs.h:588
std::optional< uint16_t > coordinateUncertainty
Uncertainty of coordinate, radius, in pixels.
Definition efs.h:579
Coordinate coordinate
Location of the feature.
Definition efs.h:577
Core(const Coordinate &coordinate={}, const std::optional< uint16_t > &direction={}, const std::optional< uint16_t > coordinateUncertainty={}, const std::optional< uint8_t > directionUncertainty={})
Core constructor.
Relationship between probe and reference features.
Definition efs.h:744
CorrespondenceRelationship(const CorrespondenceType type={}, const std::string &probeIdentifier={}, const FrictionRidgeGeneralizedPosition probeFGP={}, const uint8_t probeInputIdentifier={}, const Minutia &probeMinutia={}, const std::string &referenceIdentifier={}, const FrictionRidgeGeneralizedPosition referenceFGP={}, const uint8_t referenceInputIdentifier={}, const Minutia &referenceMinutia={})
CorrespondenceRelationship constructor.
std::string probeIdentifier
Identifier from the probe template.
Definition efs.h:756
std::string referenceIdentifier
Identifier from the reference template.
Definition efs.h:775
FrictionRidgeGeneralizedPosition probeFGP
Probe finger position.
Definition efs.h:758
FrictionRidgeGeneralizedPosition referenceFGP
Reference finger position.
Definition efs.h:777
Minutia referenceMinutia
Location in the reference image of a probe image feature.
Definition efs.h:788
CorrespondenceType type
Type of correspondence seen at these points.
Definition efs.h:746
Minutia probeMinutia
Location in the probe image of a reference image feature.
Definition efs.h:765
uint8_t referenceInputIdentifier
Link to Image::identifier and/or Features::identifier for reference.
Definition efs.h:782
uint8_t probeInputIdentifier
Link to Image::identifier and/or Features::identifier for probe.
Definition efs.h:763
Singular point of ridge divergence.
Definition efs.h:614
std::optional< uint16_t > coordinateUncertainty
Uncertainty of coordinate, radius, in pixels.
Definition efs.h:618
Delta(const Coordinate &coordinate={}, const std::optional< std::tuple< std::optional< uint16_t >, std::optional< uint16_t >, std::optional< uint16_t > > > &direction={}, std::optional< uint16_t > coordinateUncertainty={}, const std::optional< std::tuple< std::optional< uint8_t >, std::optional< uint8_t >, std::optional< uint8_t > > > &directionUncertainty={})
Delta constructor.
Coordinate coordinate
Location of the feature.
Definition efs.h:616
std::optional< std::tuple< std::optional< uint8_t >, std::optional< uint8_t >, std::optional< uint8_t > > > directionUncertainty
Uncertainty of direction, in degrees [0, 180].
Definition efs.h:632
std::optional< std::tuple< std::optional< uint16_t >, std::optional< uint16_t >, std::optional< uint16_t > > > direction
Ridge directions of the feature (typically up, left, and right), in degrees [0,359] counterclockwise ...
Definition efs.h:628
Collection of ANSI/NIST-ITL 1-2011 (Update: 2015) Extended Feature Set fields understood by FRIF.
Definition efs.h:1272
std::optional< Substrate > lsb
Substrate from which the print was developed.
Definition efs.h:1312
std::optional< std::vector< Coordinate > > roi
Closed convex polygon forming region of interest.
Definition efs.h:1377
std::optional< std::vector< ProcessingMethod > > lpm
Methods used process the print.
Definition efs.h:1308
std::optional< std::vector< RidgeQualityRegion > > rqm
Assessment of ridge quality within local areas of an image.
Definition efs.h:1393
std::optional< bool > plr
Image is known to be or may possibly be laterally reversed.
Definition efs.h:1319
std::optional< Orientation > orientation
Deviation of the friction ridge from an upright position/.
Definition efs.h:1306
std::optional< std::vector< Delta > > deltas
Delta locations.
Definition efs.h:1347
std::optional< ValueAssessment > valueAssessment
Examiner/algorithmic value assessment for identification.
Definition efs.h:1310
std::optional< bool > complex
Whether or not feature extraction was complex.
Definition efs.h:1404
std::optional< std::vector< Minutia > > minutiae
Locations of minutiae.
Definition efs.h:1363
Impression imp
Impression type of the depicted region.
Definition efs.h:1297
std::optional< std::vector< Core > > cores
Core locations.
Definition efs.h:1336
uint16_t ppi
Resolution of the image used to derive these features in pixels per inch.
Definition efs.h:1283
FrictionRidgeGeneralizedPosition frgp
Description of the depicted region.
Definition efs.h:1302
std::optional< PatternClassification > pat
Observed pattern classification.
Definition efs.h:1314
std::optional< QualityMeasureMap > quality
Quality measures of the biometric sample.
Definition efs.h:1294
std::optional< bool > trv
Part or all of image is known to be or may possibly be tonally reversed.
Definition efs.h:1324
std::optional< std::vector< Crease > > creases
Creases and other linear discontinuities.
Definition efs.h:1365
uint8_t identifier
An identifier for this set of data.
Definition efs.h:1277
FrictionRidgeCaptureTechnology frct
Capture technology that created this image.
Definition efs.h:1299
Friction ridge feature details.
Definition efs.h:532
std::optional< uint8_t > thetaUncertainty
Uncertainty of theta, in degrees [0, 180].
Definition efs.h:544
uint16_t theta
Ridge direction of the feature, in degrees [0,359], following conventions from ANSI/NIST-ITL 1-2011 (...
Definition efs.h:542
MinutiaType type
Type of feature.
Definition efs.h:547
std::optional< uint16_t > coordinateUncertainty
Uncertainty of coordinate, radius, in pixels.
Definition efs.h:536
Coordinate coordinate
Location of the feature.
Definition efs.h:534
Minutia(const Coordinate &coordinate={}, const uint16_t theta={}, const MinutiaType type=MinutiaType::Unknown, const std::optional< uint16_t > coordinateUncertainty={}, const std::optional< uint8_t > thetaUncertainty={})
Minutia constructor.
Deviation of an image from upright.
Definition efs.h:662
std::optional< uint8_t > uncertainty
Uncertainty of direction in degrees [0,180].
Definition efs.h:672
Orientation(const int16_t direction=0, const std::optional< uint8_t > &uncertainty=15)
Orientation constructor.
int16_t direction
Degrees needed to rotate image upright.
Definition efs.h:664
Hash function for Description.
Definition efs.h:1151
std::size_t operator()(const Description &d) const
Description of algorithm that computed a QualityMeasure.
Definition efs.h:1132
std::optional< ProductIdentifier > identifier
Registered algorithm identifier (QAV, QAP)
Definition efs.h:1134
std::optional< std::string > comment
Other information (QCM)
Definition efs.h:1138
std::optional< std::string > modelSHA256
Model SHA-256 checksum (QCK)
Definition efs.h:1140
bool operator==(const Description &) const
std::optional< std::string > version
Algorithm product version (QPV)
Definition efs.h:1136
auto operator<=>(const Description &) const
Region defined in a map of ridge quality/confidence.
Definition efs.h:875
std::vector< Coordinate > region
Closed convex polygon whose contents is quality.
Definition efs.h:886
RidgeQuality quality
Clarity of ridge features enclosed within region.
Definition efs.h:888