Friction Ridge Image and Features Technology Evaluations
API for participating in NIST's Friction Ridge Image and Features Technology Evaluations.
Loading...
Searching...
No Matches
libfrifte_efs.cpp
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#include <frifte/efs.h>
12
15 const std::string &probeIdentifier_,
17 const uint8_t probeInputIdentifier_,
18 const Minutia &probeMinutia_,
19 const std::string &referenceIdentifier_,
20 const FrictionRidgeGeneralizedPosition referenceFGP_,
21 const uint8_t referenceInputIdentifier_,
22 const Minutia &referenceMinutia_) :
23 type{type_},
24 probeIdentifier{probeIdentifier_},
25 probeFGP{probeFGP_},
26 probeInputIdentifier{probeInputIdentifier_},
27 probeMinutia{probeMinutia_},
28 referenceIdentifier{referenceIdentifier_},
29 referenceFGP{referenceFGP_},
30 referenceInputIdentifier{referenceInputIdentifier_},
31 referenceMinutia{referenceMinutia_}
32{
33
34}
35
37 const Coordinate &coordinate_,
38 const uint16_t theta_,
39 const MinutiaType type_,
40 const std::optional<uint16_t> coordinateUncertainty_,
41 const std::optional<uint8_t> thetaUncertainty_) :
42 coordinate{coordinate_},
43 coordinateUncertainty{coordinateUncertainty_},
44 theta{theta_},
45 thetaUncertainty{thetaUncertainty_},
46 type{type_}
47{
48
49}
50
52 const Coordinate &coordinate_,
53 const std::optional<uint16_t> &direction_,
54 const std::optional<uint16_t> coordinateUncertainty_,
55 const std::optional<uint8_t> directionUncertainty_) :
56 coordinate{coordinate_},
57 coordinateUncertainty{coordinateUncertainty_},
58 direction{direction_},
59 directionUncertainty{directionUncertainty_}
60{
61
62}
63
65 const Coordinate &coordinate_,
66 const std::optional<std::tuple<std::optional<uint16_t>,
67 std::optional<uint16_t>, std::optional<uint16_t>>> &direction_,
68 const std::optional<uint16_t> coordinateUncertainty_,
69 const std::optional<std::tuple<std::optional<uint8_t>,
70 std::optional<uint8_t>, std::optional<uint8_t>>>
71 &directionUncertainty_) :
72 coordinate{coordinate_},
73 coordinateUncertainty{coordinateUncertainty_},
74 direction{direction_},
75 directionUncertainty{directionUncertainty_}
76{
77
78}
79
82 const CreaseClassification cld_,
83 const std::vector<Segment> &segments_) :
84 fgp{fgp_},
85 segments{segments_}
86{
87 this->setCreaseClassification(cld_);
88}
89
92 const
93{
94 return (this->fgp);
95}
96
97void
103
106 const
107{
108 return (this->cld);
109}
110
111void
114{
115 if (std::get_if<PalmCrease>(&cld_) != nullptr) {
116 switch (this->fgp) {
118 [[ fallthrough ]];
120 [[ fallthrough ]];
122 [[ fallthrough ]];
124 [[ fallthrough ]];
126 [[ fallthrough ]];
128 [[ fallthrough ]];
130 [[ fallthrough ]];
132 [[ fallthrough ]];
134 [[ fallthrough ]];
136 [[ fallthrough ]];
138 [[ fallthrough ]];
140 [[ fallthrough ]];
142 [[ fallthrough ]];
143
145 [[ fallthrough ]];
147 [[ fallthrough ]];
149 [[ fallthrough ]];
150
152 [[ fallthrough ]];
154 throw std::logic_error{"CreaseClassification = "
155 "PalmCrease, but FrictionRidgeGeneralizedPosition "
156 "is not from a palm"};
157
159 [[ fallthrough ]];
161 [[ fallthrough ]];
163 [[ fallthrough ]];
165 [[ fallthrough ]];
167 [[ fallthrough ]];
169 [[ fallthrough ]];
171 [[ fallthrough ]];
173 [[ fallthrough ]];
175 [[ fallthrough ]];
177 [[ fallthrough ]];
179 [[ fallthrough ]];
181 [[ fallthrough ]];
183 [[ fallthrough ]];
185 [[ fallthrough ]];
187 [[ fallthrough ]];
189 [[ fallthrough ]];
191 [[ fallthrough ]];
193 [[ fallthrough ]];
195 [[ fallthrough ]];
197 [[ fallthrough ]];
199 [[ fallthrough ]];
202 [[ fallthrough ]];
205 [[ fallthrough ]];
207 [[ fallthrough ]];
209 break;
210 }
211 }
212
213 this->cld = cld_;
214}
215
216std::vector<FRIF::Segment>
218 const
219{
220 return (this->segments);
221}
222
223void
225 const FRIF::Segment &segment)
226{
227 this->segments.push_back(segment);
228}
229
230void
232 const std::vector<FRIF::Segment> &segments_)
233{
234 this->segments = segments_;
235}
236
239 const std::optional<PatternSubclassification> sub_,
240 const std::optional<WhorlDeltaRelationship> wdr_)
241{
242 this->setPatternGeneralClassification(gcf_);
243
244 if (sub_.has_value())
245 this->setPatternSubclassification(sub_.value());
246
247 if (wdr_.has_value())
248 this->setWhorlDeltaRelationship(wdr_.value());
249
250}
251
252void
255{
256 this->gcf = gcf_;
257
258 this->sub = std::nullopt;
259 this->wdr = std::nullopt;
260}
261
262void
264 const PatternSubclassification sub_)
265{
266 switch (this->gcf) {
268 if (std::get_if<ArchPatternSubclassification>(&sub_) == nullptr)
269 throw std::logic_error{"PatternGeneralClassification = "
270 "Arch, but PatternSubclassification is not an "
271 "ArchPatternSubclassification"};
272
273 break;
275 if (std::get_if<WhorlPatternSubclassification>(&sub_) ==
276 nullptr)
277 throw std::logic_error{"PatternGeneralClassification = "
278 "Whorl, but PatternSubclassification is not a "
279 "WhorlPatternSubclassification"};
280 break;
281 default:
282 throw std::logic_error{"PatternGeneralClassification is not "
283 "Arch or Whorl"};
284 }
285
286 this->sub = sub_;
287}
288
289void
291 const WhorlDeltaRelationship wdr_)
292{
294 throw std::logic_error{"PatternGeneralClassification is not "
295 "Whorl"};
296 if (!this->sub.has_value())
297 throw std::logic_error{"PatternSubClassification is not set"};
298 if (std::get_if<WhorlPatternSubclassification>(&this->sub.value()) ==
299 nullptr)
300 throw std::logic_error{"PatternGeneralClassification = Whorl, "
301 "but PatternSubclassification is not a "
302 "WhorlPatternSubclassification"};
303
304 this->wdr = wdr_;
305}
306
309 const
310{
311 return (this->gcf);
312}
313
314std::optional<FRIF::EFS::PatternSubclassification>
316 const
317{
318 return (this->sub);
319}
320
321std::optional<FRIF::EFS::WhorlDeltaRelationship>
323 const
324{
325 return (this->wdr);
326}
327
330 const std::underlying_type_t<Impression> i)
331{
332 switch (static_cast<Impression>(i)) {
334 [[fallthrough]];
336 [[fallthrough]];
338 [[fallthrough]];
340 [[fallthrough]];
342 [[fallthrough]];
344 [[fallthrough]];
346 [[fallthrough]];
348 [[fallthrough]];
350 return (static_cast<Impression>(i));
351 default:
352 throw std::runtime_error{"Invalid Impression value: " +
353 std::to_string(i)};
354 }
355}
356
359 const std::underlying_type_t<FrictionRidgeCaptureTechnology> i)
360{
361 switch (static_cast<FRIF::EFS::FrictionRidgeCaptureTechnology>(i)) {
363 [[fallthrough]];
365 [[fallthrough]];
367 [[fallthrough]];
369 [[fallthrough]];
371 [[fallthrough]];
373 [[fallthrough]];
375 [[fallthrough]];
377 return (static_cast<FrictionRidgeCaptureTechnology>(i));
378 default:
379 throw std::runtime_error{"Invalid FrictionRidgeCapture"
380 "Technology value: " + std::to_string(i)};
381 }
382}
383
386 const std::underlying_type_t<FrictionRidgeGeneralizedPosition> i)
387{
388 switch (static_cast<FRIF::EFS::FrictionRidgeGeneralizedPosition>(i)) {
390 [[fallthrough]];
392 [[fallthrough]];
394 [[fallthrough]];
396 [[fallthrough]];
398 [[fallthrough]];
400 [[fallthrough]];
402 [[fallthrough]];
404 [[fallthrough]];
406 [[fallthrough]];
408 [[fallthrough]];
410 [[fallthrough]];
412 [[fallthrough]];
414 [[fallthrough]];
416 [[fallthrough]];
418 [[fallthrough]];
420 [[fallthrough]];
422 [[fallthrough]];
424 [[fallthrough]];
426 [[fallthrough]];
428 [[fallthrough]];
430 [[fallthrough]];
432 [[fallthrough]];
434 [[fallthrough]];
436 [[fallthrough]];
438 [[fallthrough]];
440 [[fallthrough]];
442 [[fallthrough]];
444 [[fallthrough]];
446 [[fallthrough]];
448 [[fallthrough]];
450 [[fallthrough]];
452 [[fallthrough]];
454 [[fallthrough]];
456 [[fallthrough]];
458 [[fallthrough]];
460 [[fallthrough]];
462 [[fallthrough]];
464 [[fallthrough]];
466 [[fallthrough]];
468 [[fallthrough]];
470 [[fallthrough]];
472 [[fallthrough]];
474 return (static_cast<FrictionRidgeGeneralizedPosition>(i));
475 default:
476 throw std::runtime_error{"Invalid FrictionRidgeGeneralized"
477 "Position value: " + std::to_string(i)};
478 }
479}
480
482 const int16_t direction_,
483 const std::optional<uint8_t> &uncertainty_) :
484 direction{direction_},
485 uncertainty{uncertainty_}
486{
487
488}
489
492 const std::underlying_type_t<ProcessingMethod> i)
493{
494 switch (static_cast<ProcessingMethod>(i)) {
496 [[fallthrough]];
498 [[fallthrough]];
500 [[fallthrough]];
502 [[fallthrough]];
504 [[fallthrough]];
506 [[fallthrough]];
508 [[fallthrough]];
510 [[fallthrough]];
512 return (static_cast<ProcessingMethod>(i));
513 default:
514 throw std::runtime_error{"Invalid ProcessingMethod value: " +
515 std::to_string(i)};
516 }
517}
518
521 const std::underlying_type_t<PatternGeneralClassification> i)
522{
523 switch (static_cast<PatternGeneralClassification>(i)) {
525 [[fallthrough]];
527 [[fallthrough]];
529 [[fallthrough]];
531 [[fallthrough]];
533 [[fallthrough]];
535 [[fallthrough]];
537 [[fallthrough]];
539 [[fallthrough]];
541 return (static_cast<PatternGeneralClassification>(i));
542 default:
543 throw std::runtime_error{"Invalid PatternGeneralClassification "
544 "value: " + std::to_string(i)};
545 }
546}
547
550 const std::underlying_type_t<ArchPatternSubclassification> i)
551{
552 switch (static_cast<ArchPatternSubclassification>(i)) {
554 [[fallthrough]];
556 return (static_cast<ArchPatternSubclassification>(i));
557 default:
558 throw std::runtime_error{"Invalid ArchPatternSubclassification "
559 "value: " + std::to_string(i)};
560 }
561}
562
565 const std::underlying_type_t<WhorlPatternSubclassification> i)
566{
567 switch (static_cast<WhorlPatternSubclassification>(i)) {
569 [[fallthrough]];
571 [[fallthrough]];
573 [[fallthrough]];
575 return (static_cast<WhorlPatternSubclassification>(i));
576 default:
577 throw std::runtime_error{"Invalid WhorlPattern"
578 "Subclassification value: " + std::to_string(i)};
579 }
580}
581
584 const std::underlying_type_t<WhorlDeltaRelationship> i)
585{
586 switch (static_cast<WhorlDeltaRelationship>(i)) {
588 [[fallthrough]];
590 [[fallthrough]];
592 return (static_cast<WhorlDeltaRelationship>(i));
593 default:
594 throw std::runtime_error{"Invalid WhorlDeltaRelationship "
595 "value: " + std::to_string(i)};
596 }
597}
598
601 const std::underlying_type_t<ValueAssessment> i)
602{
603 switch (static_cast<ValueAssessment>(i)) {
605 [[fallthrough]];
607 [[fallthrough]];
609 [[fallthrough]];
611 return (static_cast<ValueAssessment>(i));
612 default:
613 throw std::runtime_error{"Invalid ValueAssessment value: " +
614 std::to_string(i)};
615 }
616}
617
620 const std::underlying_type_t<Substrate> i)
621{
622 switch (static_cast<Substrate>(i)) {
624 [[fallthrough]];
626 [[fallthrough]];
628 [[fallthrough]];
630 [[fallthrough]];
632 [[fallthrough]];
634 [[fallthrough]];
636 [[fallthrough]];
638 [[fallthrough]];
640 [[fallthrough]];
642 [[fallthrough]];
644 [[fallthrough]];
646 return (static_cast<Substrate>(i));
647 default:
648 throw std::runtime_error{"Invalid Substrate value: " +
649 std::to_string(i)};
650 }
651}
652
655 const std::underlying_type_t<MinutiaType> i)
656{
657 switch (static_cast<EFS::MinutiaType>(i)) {
659 [[fallthrough]];
661 [[fallthrough]];
663 [[fallthrough]];
665 return (static_cast<MinutiaType>(i));
666 default:
667 throw std::runtime_error{"Invalid MinutiaType value: " +
668 std::to_string(i)};
669 }
670}
671
674 const std::underlying_type_t<CorrespondenceType> i)
675{
676 switch (static_cast<CorrespondenceType>(i)) {
678 [[fallthrough]];
680 [[fallthrough]];
682 [[fallthrough]];
684 [[fallthrough]];
686 return (static_cast<CorrespondenceType>(i));
687 default:
688 throw std::runtime_error{"Invalid CorrespondenceType value: " +
689 std::to_string(i)};
690 }
691}
692
695 const std::underlying_type_t<RidgeQuality> i)
696{
697 switch (static_cast<EFS::RidgeQuality>(i)) {
699 [[fallthrough]];
701 [[fallthrough]];
703 [[fallthrough]];
705 [[fallthrough]];
707 [[fallthrough]];
709 return (static_cast<RidgeQuality>(i));
710 default:
711 throw std::runtime_error{"Invalid RidgeQuality value: " +
712 std::to_string(i)};
713 }
714}
715
718 const std::underlying_type_t<FingerCrease> i)
719{
720 switch (static_cast<EFS::FingerCrease>(i)) {
722 [[fallthrough]];
724 [[fallthrough]];
726 return (static_cast<FingerCrease>(i));
727 default:
728 throw std::runtime_error{"Invalid FingerCrease value: " +
729 std::to_string(i)};
730 }
731}
732
735 const std::underlying_type_t<PalmCrease> i)
736{
737 switch (static_cast<EFS::PalmCrease>(i)) {
739 [[fallthrough]];
741 [[fallthrough]];
743 [[fallthrough]];
745 return (static_cast<PalmCrease>(i));
746 default:
747 throw std::runtime_error{"Invalid PalmCrease value: " +
748 std::to_string(i)};
749 }
750}
751
754 const std::underlying_type_t<LinearDiscontinuity> i)
755{
756 switch (static_cast<EFS::LinearDiscontinuity>(i)) {
758 [[fallthrough]];
760 [[fallthrough]];
762 [[fallthrough]];
764 [[fallthrough]];
766 return (static_cast<LinearDiscontinuity>(i));
767 default:
768 throw std::runtime_error{"Invalid LinearDiscontinuity value: " +
769 std::to_string(i)};
770 }
771}
772
773auto
776 const = default;
777
778bool
781 const = default;
782
784{
785 ProductIdentifier{"NFIQ 2 v2.3",
787 "2.3",
788 std::nullopt,
789 "b4a1e7586b3be906f9770e4b77768038"
790};
791
792std::size_t
795 const
796{
797 static const std::string fs = "\x1C";
798 static const std::string us = "\x1F";
799 static const std::string gs = "\x1D";
800
801 std::string id{};
802 if (d.identifier.has_value()) {
803 id += d.identifier->marketing.value_or("") + us;
804
805 if (d.identifier->cbeff.has_value()) {
806 id += std::to_string(d.identifier->cbeff->owner) + us;
807
808 if (d.identifier->cbeff->algorithm.has_value())
809 id += std::to_string(
810 *d.identifier->cbeff->algorithm);
811 } else
812 id += us;
813 } else
814 id += us + us;
815
816 return (std::hash<std::string>{}(
817 id + gs +
818 d.version.value_or("") + gs +
819 d.comment.value_or("") + gs +
820 d.modelSHA256.value_or("") + fs
821 ));
822}
823
825
827 const double value_) :
828 value{value_}
829{
830
831}
832
833FRIF::EFS::QualityMeasure::operator bool()
834 const
835 noexcept
836{
837 return (this->hasValue());
838}
839
840bool
842 const
843 noexcept
844{
845 return ((this->status == Status::Success) &&
846 this->value.has_value());
847}
848
849double
851 const
852{
853 return (*this->value);
854}
855
856double
858 const
859{
860 return (this->value.value());
861}
862
865 const
866{
867 return (this->status);
868}
869
870std::optional<std::string>
872 const
873{
874 return (this->message);
875}
876
877void
879 const std::string &message_)
880{
881 this->message = message_;
882}
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
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
Status
Status of QualityMeasure value computation.
Definition efs.h:1120
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
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
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.
@ Wrist
Bottom of the palm at the wrist.
@ RadialLongitudinal
Around the base of thenar.
@ DistalTransverse
Bottom of the interdigital area.
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
Core(const Coordinate &coordinate={}, const std::optional< uint16_t > &direction={}, const std::optional< uint16_t > coordinateUncertainty={}, const std::optional< uint8_t > directionUncertainty={})
Core constructor.
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.
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.
Friction ridge feature details.
Definition efs.h:532
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.
Orientation(const int16_t direction=0, const std::optional< uint8_t > &uncertainty=15)
Orientation constructor.
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
CBEFF information registered with and assigned by IBIA.
Definition common.h:257
Identifying details about algorithm components for documentation.
Definition common.h:254