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 ]];
151 [[ fallthrough ]];
153 [[ fallthrough ]];
154
156 [[ fallthrough ]];
158 throw std::logic_error{"CreaseClassification = "
159 "PalmCrease, but FrictionRidgeGeneralizedPosition "
160 "is not from a palm"};
161
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 ]];
201 [[ fallthrough ]];
203 [[ fallthrough ]];
204 case FrictionRidgeGeneralizedPosition::
205 RightFullPalmAndWritersPalm:
206 [[ fallthrough ]];
207 case FrictionRidgeGeneralizedPosition::
208 LeftFullPalmAndWritersPalm:
209 [[ fallthrough ]];
211 [[ fallthrough ]];
213 break;
214 }
215 }
216
217 this->cld = cld_;
218}
219
220std::vector<FRIF::Segment>
222 const
223{
224 return (this->segments);
225}
226
227void
229 const FRIF::Segment &segment)
230{
231 this->segments.push_back(segment);
232}
233
234void
236 const std::vector<FRIF::Segment> &segments_)
237{
238 this->segments = segments_;
239}
240
243 const std::optional<PatternSubclassification> sub_,
244 const std::optional<WhorlDeltaRelationship> wdr_)
245{
247
248 if (sub_.has_value())
249 this->setPatternSubclassification(sub_.value());
250
251 if (wdr_.has_value())
252 this->setWhorlDeltaRelationship(wdr_.value());
253
254}
255
256void
259{
260 this->gcf = gcf_;
261
262 this->sub = std::nullopt;
263 this->wdr = std::nullopt;
264}
265
266void
268 const PatternSubclassification sub_)
269{
270 switch (this->gcf) {
272 if (std::get_if<ArchPatternSubclassification>(&sub_) == nullptr)
273 throw std::logic_error{"PatternGeneralClassification = "
274 "Arch, but PatternSubclassification is not an "
275 "ArchPatternSubclassification"};
276
277 break;
279 if (std::get_if<WhorlPatternSubclassification>(&sub_) ==
280 nullptr)
281 throw std::logic_error{"PatternGeneralClassification = "
282 "Whorl, but PatternSubclassification is not a "
283 "WhorlPatternSubclassification"};
284 break;
285 default:
286 throw std::logic_error{"PatternGeneralClassification is not "
287 "Arch or Whorl"};
288 }
289
290 this->sub = sub_;
291}
292
293void
295 const WhorlDeltaRelationship wdr_)
296{
298 throw std::logic_error{"PatternGeneralClassification is not "
299 "Whorl"};
300 if (!this->sub.has_value())
301 throw std::logic_error{"PatternSubClassification is not set"};
302 if (std::get_if<WhorlPatternSubclassification>(&this->sub.value()) ==
303 nullptr)
304 throw std::logic_error{"PatternGeneralClassification = Whorl, "
305 "but PatternSubclassification is not a "
306 "WhorlPatternSubclassification"};
307
308 this->wdr = wdr_;
309}
310
313 const
314{
315 return (this->gcf);
316}
317
318std::optional<FRIF::EFS::PatternSubclassification>
320 const
321{
322 return (this->sub);
323}
324
325std::optional<FRIF::EFS::WhorlDeltaRelationship>
327 const
328{
329 return (this->wdr);
330}
331
334 const std::underlying_type_t<Impression> i)
335{
336 switch (static_cast<Impression>(i)) {
338 [[fallthrough]];
340 [[fallthrough]];
342 [[fallthrough]];
344 [[fallthrough]];
346 [[fallthrough]];
348 [[fallthrough]];
350 [[fallthrough]];
352 [[fallthrough]];
354 return (static_cast<Impression>(i));
355 default:
356 throw std::runtime_error{"Invalid Impression value: " +
357 std::to_string(i)};
358 }
359}
360
363 const std::underlying_type_t<FrictionRidgeCaptureTechnology> i)
364{
365 switch (static_cast<FRIF::EFS::FrictionRidgeCaptureTechnology>(i)) {
367 [[fallthrough]];
369 [[fallthrough]];
371 [[fallthrough]];
373 [[fallthrough]];
375 [[fallthrough]];
377 [[fallthrough]];
379 [[fallthrough]];
381 return (static_cast<FrictionRidgeCaptureTechnology>(i));
382 default:
383 throw std::runtime_error{"Invalid FrictionRidgeCapture"
384 "Technology value: " + std::to_string(i)};
385 }
386}
387
390 const std::underlying_type_t<FrictionRidgeGeneralizedPosition> i)
391{
392 switch (static_cast<FRIF::EFS::FrictionRidgeGeneralizedPosition>(i)) {
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 [[fallthrough]];
476 [[fallthrough]];
478 return (static_cast<FrictionRidgeGeneralizedPosition>(i));
479 default:
480 throw std::runtime_error{"Invalid FrictionRidgeGeneralized"
481 "Position value: " + std::to_string(i)};
482 }
483}
484
486 const int16_t direction_,
487 const std::optional<uint8_t> &uncertainty_) :
488 direction{direction_},
489 uncertainty{uncertainty_}
490{
491
492}
493
496 const std::underlying_type_t<ProcessingMethod> i)
497{
498 switch (static_cast<ProcessingMethod>(i)) {
500 [[fallthrough]];
502 [[fallthrough]];
504 [[fallthrough]];
506 [[fallthrough]];
508 [[fallthrough]];
510 [[fallthrough]];
512 [[fallthrough]];
514 [[fallthrough]];
516 return (static_cast<ProcessingMethod>(i));
517 default:
518 throw std::runtime_error{"Invalid ProcessingMethod value: " +
519 std::to_string(i)};
520 }
521}
522
525 const std::underlying_type_t<PatternGeneralClassification> i)
526{
527 switch (static_cast<PatternGeneralClassification>(i)) {
529 [[fallthrough]];
531 [[fallthrough]];
533 [[fallthrough]];
535 [[fallthrough]];
537 [[fallthrough]];
539 [[fallthrough]];
541 [[fallthrough]];
543 [[fallthrough]];
545 return (static_cast<PatternGeneralClassification>(i));
546 default:
547 throw std::runtime_error{"Invalid PatternGeneralClassification "
548 "value: " + std::to_string(i)};
549 }
550}
551
554 const std::underlying_type_t<ArchPatternSubclassification> i)
555{
556 switch (static_cast<ArchPatternSubclassification>(i)) {
558 [[fallthrough]];
560 return (static_cast<ArchPatternSubclassification>(i));
561 default:
562 throw std::runtime_error{"Invalid ArchPatternSubclassification "
563 "value: " + std::to_string(i)};
564 }
565}
566
569 const std::underlying_type_t<WhorlPatternSubclassification> i)
570{
571 switch (static_cast<WhorlPatternSubclassification>(i)) {
573 [[fallthrough]];
575 [[fallthrough]];
577 [[fallthrough]];
579 return (static_cast<WhorlPatternSubclassification>(i));
580 default:
581 throw std::runtime_error{"Invalid WhorlPattern"
582 "Subclassification value: " + std::to_string(i)};
583 }
584}
585
588 const std::underlying_type_t<WhorlDeltaRelationship> i)
589{
590 switch (static_cast<WhorlDeltaRelationship>(i)) {
592 [[fallthrough]];
594 [[fallthrough]];
596 return (static_cast<WhorlDeltaRelationship>(i));
597 default:
598 throw std::runtime_error{"Invalid WhorlDeltaRelationship "
599 "value: " + std::to_string(i)};
600 }
601}
602
605 const std::underlying_type_t<ValueAssessment> i)
606{
607 switch (static_cast<ValueAssessment>(i)) {
609 [[fallthrough]];
611 [[fallthrough]];
613 [[fallthrough]];
615 return (static_cast<ValueAssessment>(i));
616 default:
617 throw std::runtime_error{"Invalid ValueAssessment value: " +
618 std::to_string(i)};
619 }
620}
621
624 const std::underlying_type_t<Substrate> i)
625{
626 switch (static_cast<Substrate>(i)) {
628 [[fallthrough]];
630 [[fallthrough]];
632 [[fallthrough]];
634 [[fallthrough]];
636 [[fallthrough]];
638 [[fallthrough]];
640 [[fallthrough]];
642 [[fallthrough]];
644 [[fallthrough]];
646 [[fallthrough]];
648 [[fallthrough]];
650 return (static_cast<Substrate>(i));
651 default:
652 throw std::runtime_error{"Invalid Substrate value: " +
653 std::to_string(i)};
654 }
655}
656
659 const std::underlying_type_t<MinutiaType> i)
660{
661 switch (static_cast<EFS::MinutiaType>(i)) {
663 [[fallthrough]];
665 [[fallthrough]];
667 [[fallthrough]];
669 return (static_cast<MinutiaType>(i));
670 default:
671 throw std::runtime_error{"Invalid MinutiaType value: " +
672 std::to_string(i)};
673 }
674}
675
678 const std::underlying_type_t<CorrespondenceType> i)
679{
680 switch (static_cast<CorrespondenceType>(i)) {
682 [[fallthrough]];
684 [[fallthrough]];
686 [[fallthrough]];
688 [[fallthrough]];
690 return (static_cast<CorrespondenceType>(i));
691 default:
692 throw std::runtime_error{"Invalid CorrespondenceType value: " +
693 std::to_string(i)};
694 }
695}
696
699 const std::underlying_type_t<RidgeQuality> i)
700{
701 switch (static_cast<EFS::RidgeQuality>(i)) {
703 [[fallthrough]];
705 [[fallthrough]];
707 [[fallthrough]];
709 [[fallthrough]];
711 [[fallthrough]];
713 return (static_cast<RidgeQuality>(i));
714 default:
715 throw std::runtime_error{"Invalid RidgeQuality value: " +
716 std::to_string(i)};
717 }
718}
719
722 const std::underlying_type_t<FingerCrease> i)
723{
724 switch (static_cast<EFS::FingerCrease>(i)) {
726 [[fallthrough]];
728 [[fallthrough]];
730 return (static_cast<FingerCrease>(i));
731 default:
732 throw std::runtime_error{"Invalid FingerCrease value: " +
733 std::to_string(i)};
734 }
735}
736
739 const std::underlying_type_t<PalmCrease> i)
740{
741 switch (static_cast<EFS::PalmCrease>(i)) {
743 [[fallthrough]];
745 [[fallthrough]];
747 [[fallthrough]];
749 return (static_cast<PalmCrease>(i));
750 default:
751 throw std::runtime_error{"Invalid PalmCrease value: " +
752 std::to_string(i)};
753 }
754}
755
758 const std::underlying_type_t<LinearDiscontinuity> i)
759{
760 switch (static_cast<EFS::LinearDiscontinuity>(i)) {
762 [[fallthrough]];
764 [[fallthrough]];
766 [[fallthrough]];
768 [[fallthrough]];
770 return (static_cast<LinearDiscontinuity>(i));
771 default:
772 throw std::runtime_error{"Invalid LinearDiscontinuity value: " +
773 std::to_string(i)};
774 }
775}
776
777std::strong_ordering
780 const = default;
781
782bool
785 const = default;
786
788{
789 ProductIdentifier{"NFIQ 2 v2.3",
791 "2.3",
792 std::nullopt,
793 "b4a1e7586b3be906f9770e4b77768038"
794};
795
796std::size_t
799 const
800{
801 static const std::string fs = "\x1C";
802 static const std::string us = "\x1F";
803 static const std::string gs = "\x1D";
804
805 std::string id{};
806 if (d.identifier.has_value()) {
807 id += d.identifier->marketing.value_or("") + us;
808
809 if (d.identifier->cbeff.has_value()) {
810 id += std::to_string(d.identifier->cbeff->owner) + us;
811
812 if (d.identifier->cbeff->algorithm.has_value())
813 id += std::to_string(
814 *d.identifier->cbeff->algorithm);
815 } else
816 id += us;
817 } else
818 id += us + us;
819
820 return (std::hash<std::string>{}(
821 id + gs +
822 d.version.value_or("") + gs +
823 d.comment.value_or("") + gs +
824 d.modelSHA256.value_or("") + fs
825 ));
826}
827
829
831 const double value_) :
832 status{EFS::QualityMeasure::Status::Success},
833 value{value_}
834{
835
836}
837
839 const std::string &errorMessage) :
840 status{EFS::QualityMeasure::Status::Error},
841 message{errorMessage}
842{
843
844}
845
846FRIF::EFS::QualityMeasure::operator bool()
847 const
848 noexcept
849{
850 return (this->hasValue());
851}
852
853bool
855 const
856 noexcept
857{
858 return ((this->status == Status::Success) &&
859 this->value.has_value());
860}
861
862double
864 const
865{
866 return (*this->value);
867}
868
869double
871 const
872{
873 return (this->value.value());
874}
875
878 const
879{
880 return (this->status);
881}
882
883std::optional<std::string>
885 const
886{
887 return (this->message);
888}
889
890void
892 const std::string &message_)
893{
894 this->message = message_;
895}
896
897void
899 const std::string &errorMessage)
900{
902 this->message = errorMessage;
903}
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:1124
@ Success
Value computed successfully.
Definition efs.h:1126
@ Error
Error occurred during computation of value.
Definition efs.h:1131
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:788
void setError(const std::string &errorMessage)
Communiate error in computation.
Types (mostly) mirroring the ANSI/NIST-ITL Type 9 Extended Feature Set.
Definition efs.h:21
ArchPatternSubclassification toArchPatternSubclassification(const std::underlying_type_t< ArchPatternSubclassification > i)
Convert integer to enumerated type.
std::variant< ArchPatternSubclassification, WhorlPatternSubclassification > PatternSubclassification
Subclassification of PatternClassification.
Definition efs.h:315
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:212
PatternGeneralClassification toPatternGeneralClassification(const std::underlying_type_t< PatternGeneralClassification > i)
Convert integer to enumerated type.
FingerCrease
Permanent flexion creases on fingers.
Definition efs.h:897
@ DistalInterphalangeal
Below distal phalanx.
Definition efs.h:899
@ ProximalDigital
Between proximal phalanx and palm.
Definition efs.h:903
@ ProximalInterphalangeal
Below medial phalanx.
Definition efs.h:901
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:966
WhorlPatternSubclassification
Subclassification when PatternClassification is Whorl.
Definition efs.h:284
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:170
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
@ PlainContactlessStationary
Definition efs.h:29
@ RolledContactlessStationary
Definition efs.h:30
ArchPatternSubclassification
Subclassification when PatternClassification is Arch.
Definition efs.h:254
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:442
FingerCrease toFingerCrease(const std::underlying_type_t< FingerCrease > i)
Convert integer to enumerated type.
MinutiaType
Types of minutiae.
Definition efs.h:510
LinearDiscontinuity toLinearDiscontinuity(const std::underlying_type_t< LinearDiscontinuity > i)
Convert integer to enumerated type.
CorrespondenceType
Types of correspondence.
Definition efs.h:699
@ Definite
Probe feature definitely corresponds.
Definition efs.h:701
@ OutOfRegion
Probe feature lies outside the reference.
Definition efs.h:717
@ Possible
Probe feature possibly/debatably corresponds.
Definition efs.h:703
@ DoesNotExist
Probe feature definitely does not exist.
Definition efs.h:710
@ UnclearArea
Probe feature lies in an area experiencing quality issues in the reference.
Definition efs.h:725
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:925
@ ProximalTransverse
Diagonal across palm.
Definition efs.h:932
@ Wrist
Bottom of the palm at the wrist.
Definition efs.h:942
@ RadialLongitudinal
Around the base of thenar.
Definition efs.h:937
@ DistalTransverse
Bottom of the interdigital area.
Definition efs.h:927
RidgeQuality
Local ridge quality codes from ANSI/NIST-ITL 1-2011 (2015).
Definition efs.h:836
@ DebatableMinutiae
Continuity of ridge flow is certain; minutiae are debatable.
Definition efs.h:845
@ DebatableRidgeFlow
Continuity of ridge flow is uncertain.
Definition efs.h:840
@ DefinitiveRidgeEdges
Ridge edges, minutiae, and ridge flow are obvious and unambiguous; pores are either debatable or not ...
Definition efs.h:855
@ DefinitivePores
Pores and ridge edges are obvious and unambiguous.
Definition efs.h:857
@ Background
No ridge information.
Definition efs.h:838
@ DefinitiveMinutiae
Minutiae and ridge flow are obvious and unambiguous; ridge edges are debatable.
Definition efs.h:850
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:473
WhorlDeltaRelationship
Whorl-Delta relationship.
Definition efs.h:332
std::variant< FingerCrease, PalmCrease, LinearDiscontinuity > CreaseClassification
Collection of crease types.
Definition efs.h:1003
std::tuple< Coordinate, Coordinate > Segment
Line segment.
Definition common.h:253
Pixel location in an image.
Definition common.h:226
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:590
std::optional< uint8_t > directionUncertainty
Uncertainty of direction, in degrees [0, 180].
Definition efs.h:592
std::optional< uint16_t > coordinateUncertainty
Uncertainty of coordinate, radius, in pixels.
Definition efs.h:583
Coordinate coordinate
Location of the feature.
Definition efs.h:581
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.
std::string probeIdentifier
Identifier from the probe template.
Definition efs.h:760
std::string referenceIdentifier
Identifier from the reference template.
Definition efs.h:779
FrictionRidgeGeneralizedPosition probeFGP
Probe finger position.
Definition efs.h:762
FrictionRidgeGeneralizedPosition referenceFGP
Reference finger position.
Definition efs.h:781
Minutia referenceMinutia
Location in the reference image of a probe image feature.
Definition efs.h:792
CorrespondenceType type
Type of correspondence seen at these points.
Definition efs.h:750
Minutia probeMinutia
Location in the probe image of a reference image feature.
Definition efs.h:769
uint8_t referenceInputIdentifier
Link to Image::identifier and/or Features::identifier for reference.
Definition efs.h:786
uint8_t probeInputIdentifier
Link to Image::identifier and/or Features::identifier for probe.
Definition efs.h:767
std::optional< uint16_t > coordinateUncertainty
Uncertainty of coordinate, radius, in pixels.
Definition efs.h:622
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:620
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:636
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:632
Friction ridge feature details.
Definition efs.h:536
std::optional< uint8_t > thetaUncertainty
Uncertainty of theta, in degrees [0, 180].
Definition efs.h:548
uint16_t theta
Ridge direction of the feature, in degrees [0,359], following conventions from ANSI/NIST-ITL 1-2011 (...
Definition efs.h:546
MinutiaType type
Type of feature.
Definition efs.h:551
std::optional< uint16_t > coordinateUncertainty
Uncertainty of coordinate, radius, in pixels.
Definition efs.h:540
Coordinate coordinate
Location of the feature.
Definition efs.h:538
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.
std::optional< uint8_t > uncertainty
Uncertainty of direction in degrees [0,180].
Definition efs.h:676
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:668
std::size_t operator()(const Description &d) const
Description of algorithm that computed a QualityMeasure.
Definition efs.h:1136
std::optional< ProductIdentifier > identifier
Registered algorithm identifier (QAV, QAP).
Definition efs.h:1138
std::optional< std::string > comment
Other information (QCM).
Definition efs.h:1142
std::optional< std::string > modelSHA256
Model SHA-256 checksum (QCK).
Definition efs.h:1144
std::strong_ordering operator<=>(const Description &) const
bool operator==(const Description &) const
std::optional< std::string > version
Algorithm product version (QPV).
Definition efs.h:1140
CBEFF information registered with and assigned by IBIA.
Definition common.h:260
Identifying details about algorithm components for documentation.
Definition common.h:257