Friction Ridge Image and Features
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 <variant>
15
16#include <frif/common.h>
17
19namespace FRIF::EFS
20{
22 enum class Impression
23 {
24 PlainContact = 0,
25 RolledContact = 1,
26 Latent = 4,
27 LiveScanSwipe = 8,
30 Other = 28,
31 Unknown = 29,
32 Contactless = 43
33 };
35 using IMP = Impression;
36
39 {
40 Unknown = 0,
43 OpticalDirect = 5,
44 Capacitive = 9,
46
48 LatentLift = 22
49 };
55
58 {
59 UnknownFinger = 0,
60 RightThumb = 1,
61 RightIndex = 2,
62 RightMiddle = 3,
63 RightRing = 4,
64 RightLittle = 5,
65 LeftThumb = 6,
66 LeftIndex = 7,
67 LeftMiddle = 8,
68 LeftRing = 9,
69 LeftLittle = 10,
70 RightExtraDigit = 16,
71 LeftExtraDigit = 17,
72
73 RightFour = 13,
74 LeftFour = 14,
76
77 UnknownPalm = 20,
78 RightFullPalm = 21,
80 LeftFullPalm = 23,
81 LeftWritersPalm = 24,
82 RightLowerPalm = 25,
83 RightUpperPalm = 26,
84 LeftLowerPalm = 27,
85 LeftUpperPalm = 28,
86 RightPalmOther = 29,
87 LeftPalmOther = 30,
89 RightThenar = 32,
90 RightHypothenar = 33,
92 LeftThenar = 35,
93 LeftHypothenar = 36,
94 RightGrasp = 37,
95 LeftGrasp = 38,
102
104 EJIOrTip = 19
105 };
111
114 {
117 Other,
119 Laser,
120 RUVIS,
122 Visual,
124 };
130
139 {
140 Arch,
141 Whorl,
142 RightLoop,
143 LeftLoop,
147 Scar,
149 };
155
164 {
165 PlainArch,
167 };
168
183
191 using PatternSubclassification = std::variant<
193
199
208 {
209 Inner,
210 Outer,
211 Meeting
212 };
213
219
222 {
223 public:
231 const std::optional<PatternSubclassification> = {},
232 const std::optional<WhorlDeltaRelationship> = {});
233
239 void
242
253 void
256
263 void
266
273 const;
274
279 std::optional<PatternSubclassification>
281 const;
282
287 std::optional<WhorlDeltaRelationship>
289 const;
290
291 private:
293 std::optional<PatternSubclassification> sub{};
294 std::optional<WhorlDeltaRelationship> wdr{};
295 };
296
301 {
302 Value,
303 Limited,
304 NoValue,
306 };
312
314 enum class Substrate
315 {
316 Paper,
318
319 Plastic,
320 Glass,
325
328
329 Other,
330 Unknown
331 };
332
334 enum class MinutiaType
335 {
338 Other,
339 Unknown
340 };
341
343 struct Minutia
344 {
348 std::optional<uint16_t> coordinateUncertainty{};
349
354 uint16_t theta{};
356 std::optional<uint8_t> thetaUncertainty{};
357
360
377 Minutia(
378 const Coordinate &coordinate = {},
379 const uint16_t theta = {},
381 const std::optional<uint16_t> coordinateUncertainty = {},
382 const std::optional<uint8_t> thetaUncertainty = {});
383 };
384
386 struct Core
387 {
391 std::optional<uint16_t> coordinateUncertainty{};
392
398 std::optional<uint16_t> direction{};
400 std::optional<uint8_t> directionUncertainty{};
401
417 Core(
418 const Coordinate &coordinate = {},
419 const std::optional<uint16_t> &direction = {},
420 const std::optional<uint16_t> coordinateUncertainty = {},
421 const std::optional<uint8_t> directionUncertainty = {});
422 };
423
425 struct Delta
426 {
430 std::optional<uint16_t> coordinateUncertainty{};
431
438 std::optional<std::tuple<std::optional<uint16_t>,
439 std::optional<uint16_t>, std::optional<uint16_t>>>
442 std::optional<std::tuple<std::optional<uint8_t>,
443 std::optional<uint8_t>, std::optional<uint8_t>>>
445
461 Delta(
462 const Coordinate &coordinate = {},
463 const std::optional<std::tuple<std::optional<uint16_t>,
464 std::optional<uint16_t>, std::optional<uint16_t>>>
465 &direction = {},
466 std::optional<uint16_t> coordinateUncertainty = {},
467 const std::optional<std::tuple<std::optional<uint8_t>,
468 std::optional<uint8_t>, std::optional<uint8_t>>>
470 };
471
480 {
482 Definite,
484 Possible,
507 };
509
512 {
515
524 std::string probeIdentifier{};
532
541 std::string referenceIdentifier{};
553
577 const CorrespondenceType type = {},
578 const std::string &probeIdentifier = {},
579 const uint8_t probeInputIdentifier = {},
580 const Minutia &probeMinutia = {},
581 const std::string &referenceIdentifier = {},
582 const uint8_t referenceInputIdentifier = {},
583 const Minutia &referenceMinutia = {});
584 };
585
587 enum class RidgeQuality
588 {
590 Background = 0,
610 };
611
614 {
625 std::vector<Coordinate> region{};
628 };
629
640
664
667 {
669 Crack,
670 Cut,
672 /*
673 * XXX: Considered a distinctive area in ANSI/NIST-ITL 1-2011
674 * Update:2015, requiring a polygon, not a segment.
675 */
676// PermanentScar,
677 Other
678 };
679
689
691 class Crease
692 {
693 public:
712 Crease(
714 const CreaseClassification cld,
715 const std::vector<Segment> &segments);
716
723 const;
724
729 void
732
739 const;
740
749 void
751 const CreaseClassification cld);
752
764 std::vector<Segment>
766 const;
767
772 void
774 const Segment &segment);
775
780 void
782 const std::vector<Segment> &segments);
783
784 private:
799 std::vector<Segment> segments{};
800 };
801
810 struct Features
811 {
816 uint8_t identifier{};
817
822 uint16_t ppi{};
823
832
834 std::optional<int16_t> orientation{};
839 std::optional<uint8_t> orientationUncertainty{};
841 std::optional<std::vector<ProcessingMethod>> lpm{};
843 std::optional<ValueAssessment> valueAssessment{};
845 std::optional<Substrate> lsb{};
847 std::optional<PatternClassification> pat{};
848
852 std::optional<bool> plr{};
857 std::optional<bool> trv{};
858
869 std::optional<std::vector<Core>> cores{};
880 std::optional<std::vector<Delta>> deltas{};
896 std::optional<std::vector<Minutia>> minutiae{};
898 std::optional<std::vector<Crease>> creases{};
910 std::optional<std::vector<Coordinate>> roi{};
911
926 std::optional<std::vector<RidgeQualityRegion>> rqm{};
927
937 std::optional<bool> complex{};
938 };
939}
940
941#endif /* FRIF_EFS_H_ */
Friction ridge linear flexion creases.
Definition efs.h:692
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:222
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
Types (mostly) mirroring the ANSI/NIST-ITL Type 9 Extended Feature Set.
Definition efs.h:20
std::variant< FingerCrease, PalmCrease, LinearDiscontinuity > CreaseClassification
Collection of crease types.
Definition efs.h:687
PatternGeneralClassification
General classification of friction ridge structure.
Definition efs.h:139
std::variant< ArchPatternSubclassification, WhorlPatternSubclassification > PatternSubclassification
Subclassification of PatternClassification.
Definition efs.h:191
PatternSubclassification SUB
Convenience PatternSubclassification type using ANSI/NIST-ITL mnemonic.
Definition efs.h:198
FingerCrease
Permanent flexion creases on fingers.
Definition efs.h:632
@ DistalInterphalangeal
Below distal phalanx.
@ ProximalDigital
Between proximal phalanx and palm.
@ ProximalInterphalangeal
Below medial phalanx.
FrictionRidgeGeneralizedPosition
Friction positions codes from ANSI/NIST-ITL 1-2011 (2015).
Definition efs.h:58
LinearDiscontinuity
Linear discontinuities that are not named permanent creases.
Definition efs.h:667
WhorlPatternSubclassification
Subclassification when PatternClassification is Whorl.
Definition efs.h:177
FrictionRidgeCaptureTechnology
Capture device codes from ANSI/NIST-ITL 1-2011 (2015).
Definition efs.h:39
ProcessingMethod
Processing method codes from ANSI/NIST-ITL 1-2011 (2015).
Definition efs.h:114
Impression
Friction ridge impression types from ANSI/NIST-ITL 1-202X.
Definition efs.h:23
ArchPatternSubclassification
Subclassification when PatternClassification is Arch.
Definition efs.h:164
ValueAssessment
Value assessment codes from ANSI/NIST-ITL 1-2011 (2015).
Definition efs.h:301
MinutiaType
Types of minutiae.
Definition efs.h:335
CorrespondenceType
Types of correspondence.
Definition efs.h:480
@ 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.
PalmCrease
Permanent flexion creases on palms.
Definition efs.h:643
@ 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:588
@ 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.
Substrate
Substrate codes from ANSI/NIST-ITL 1-2011 (2015).
Definition efs.h:315
WhorlDeltaRelationship
Whorl-Delta relationship.
Definition efs.h:208
std::tuple< Coordinate, Coordinate > Segment
Line segment.
Definition common.h:216
Pixel location in an image.
Definition common.h:192
Singular point of focus of innermost recurving ridge.
Definition efs.h:387
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:398
std::optional< uint8_t > directionUncertainty
Uncertainty of direction, in degrees [0, 180].
Definition efs.h:400
std::optional< uint16_t > coordinateUncertainty
Uncertainty of coordinate, radius, in pixels.
Definition efs.h:391
Coordinate coordinate
Location of the feature.
Definition efs.h:389
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:512
CorrespondenceRelationship(const CorrespondenceType type={}, const std::string &probeIdentifier={}, const uint8_t probeInputIdentifier={}, const Minutia &probeMinutia={}, const std::string &referenceIdentifier={}, const uint8_t referenceInputIdentifier={}, const Minutia &referenceMinutia={})
CorrespondenceRelationship constructor.
std::string probeIdentifier
Identifier from the probe template.
Definition efs.h:524
std::string referenceIdentifier
Identifier from the reference template.
Definition efs.h:541
Minutia referenceMinutia
Location in the reference image of a probe image feature.
Definition efs.h:552
CorrespondenceType type
Type of correspondence seen at these points.
Definition efs.h:514
Minutia probeMinutia
Location in the probe image of a reference image feature.
Definition efs.h:531
uint8_t referenceInputIdentifier
Link to Image::identifier and/or Features::identifier for reference.
Definition efs.h:546
uint8_t probeInputIdentifier
Link to Image::identifier and/or Features::identifier for probe.
Definition efs.h:529
Singular point of ridge divergence.
Definition efs.h:426
std::optional< uint16_t > coordinateUncertainty
Uncertainty of coordinate, radius, in pixels.
Definition efs.h:430
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:428
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:444
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:440
Collection of ANSI/NIST-ITL 1-2011 (Update: 2015) Extended Feature Set fields understood by FRIF.
Definition efs.h:811
std::optional< Substrate > lsb
Substrate from which the print was developed.
Definition efs.h:845
std::optional< std::vector< Coordinate > > roi
Closed convex polygon forming region of interest.
Definition efs.h:910
std::optional< std::vector< ProcessingMethod > > lpm
Methods used process the print.
Definition efs.h:841
std::optional< std::vector< RidgeQualityRegion > > rqm
Assessment of ridge quality within local areas of an image.
Definition efs.h:926
std::optional< bool > plr
Image is known to be or may possibly be laterally reversed.
Definition efs.h:852
std::optional< std::vector< Delta > > deltas
Delta locations.
Definition efs.h:880
std::optional< ValueAssessment > valueAssessment
Examiner/algorithmic value assessment for identification.
Definition efs.h:843
std::optional< bool > complex
Whether or not feature extraction was complex.
Definition efs.h:937
std::optional< std::vector< Minutia > > minutiae
Locations of minutiae.
Definition efs.h:896
Impression imp
Impression type of the depicted region.
Definition efs.h:825
std::optional< std::vector< Core > > cores
Core locations.
Definition efs.h:869
uint16_t ppi
Resolution of the image used to derive these features in pixels per inch.
Definition efs.h:822
std::optional< int16_t > orientation
Degrees to rotate image upright.
Definition efs.h:834
FrictionRidgeGeneralizedPosition frgp
Description of the depicted region.
Definition efs.h:830
std::optional< PatternClassification > pat
Observed pattern classification.
Definition efs.h:847
std::optional< bool > trv
Part or all of image is known to be or may possibly be tonally reversed.
Definition efs.h:857
std::optional< std::vector< Crease > > creases
Creases and other linear discontinuities.
Definition efs.h:898
uint8_t identifier
An identifier for this set of data.
Definition efs.h:816
std::optional< uint8_t > orientationUncertainty
Uncertainty of orientation, resulting in the orientation to be orientation +/- orientationUncertainty...
Definition efs.h:839
FrictionRidgeCaptureTechnology frct
Capture technology that created this image.
Definition efs.h:827
Friction ridge feature details.
Definition efs.h:344
std::optional< uint8_t > thetaUncertainty
Uncertainty of theta, in degrees [0, 180].
Definition efs.h:356
uint16_t theta
Ridge direction of the feature, in degrees [0,359], following conventions from ANSI/NIST-ITL 1-2011 (...
Definition efs.h:354
MinutiaType type
Type of feature.
Definition efs.h:359
std::optional< uint16_t > coordinateUncertainty
Uncertainty of coordinate, radius, in pixels.
Definition efs.h:348
Coordinate coordinate
Location of the feature.
Definition efs.h:346
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.
Region defined in a map of ridge quality/confidence.
Definition efs.h:614
std::vector< Coordinate > region
Closed convex polygon whose contents is quality.
Definition efs.h:625
RidgeQuality quality
Clarity of ridge features enclosed within region.
Definition efs.h:627