Enrollment 28.2.0
Loading...
Searching...
No Matches
Minutia.h
Go to the documentation of this file.
1
9
10#pragma once
11
15
16namespace inno
17{
23 */
24 class Minutia : public Serializable
25 {
26 public:
29 /// @image latex bifurcation_ending.png "Minutia types" width = 5cm
30 enum class Type : uint8_t
31 {
33 BIFURCATION = 0,
35 RIDGE_ENDING = 1
36 };
40 Type type;
46 uint8_t quality;
47
51 */
52 void WriteTo(Writer& writer) const final
53 {
54 writer.Write("c", center);
55 writer.Write("t", static_cast<uint8_t>(type));
56 writer.Write("a", angle);
57 writer.Write("q", quality);
58 }
59
68 */
69 Minutia(Point pointArg, Type typeArg, Angle angleArg, uint8_t qualityArg)
70 : center(std::move(pointArg))
71 , type(typeArg)
72 , angle(angleArg)
73 , quality(qualityArg)
74 {
75 }
76 bool operator==(const Minutia& m) const
77 {
78 auto isAngleEqual = std::abs(angle - m.angle) < std::numeric_limits<Angle>::epsilon();
79 return center == m.center && type == m.type && isAngleEqual && quality == m.quality;
80 }
81 bool operator!=(const Minutia& m) const
82 {
83 return !(*this == m);
84 }
85
86 Minutia()
87 : type(Type::BIFURCATION)
88 , angle(0)
89 , quality(0)
90 {
91 }
92
93 virtual ~Minutia() = default;
94
95 Minutia(const Minutia& m) = default;
96 Minutia(Minutia&& m) = delete;
97 Minutia& operator=(const Minutia& m) = default;
98 Minutia& operator=(Minutia&& m) = delete;
99 };
100
107 */
108 class MinutiaShape : public ImageShape
109 {
110 public:
114 */
115 void DrawIn(ImageShapeDrawer& drawer) const final
116 {
117 // Draw minutia shape according https://www.nist.gov/system/files/documents/srd/nistsd27.pdf
118 if (m->type == Minutia::Type::BIFURCATION)
119 {
120 auto rect = Rectangle{ { m->center.x - static_cast<int>(r), m->center.y - static_cast<int>(r) },
121 { m->center.x + static_cast<int>(r), m->center.y - static_cast<int>(r) },
122 { m->center.x + static_cast<int>(r), m->center.y + static_cast<int>(r) },
123 { m->center.x - static_cast<int>(r), m->center.y + static_cast<int>(r) } };
124 auto rs = RectangleShape(rect, a);
125 rs.DrawIn(drawer);
126 }
127 else
128 {
129 drawer.DrawCircle(Circle{ { m->center.x, m->center.y }, r }, a);
130 }
131 auto angleLine = Line{ { m->center.x, m->center.y }, m->angle, al };
132 drawer.DrawLine(angleLine, a);
133 }
134
142 */
143 MinutiaShape(std::shared_ptr<Minutia> minutia,
144 Radius radius,
146 unsigned int angleLength)
147 : m(std::move(minutia))
148 , r(radius)
149 , a(std::move(attr))
150 , al(angleLength)
151 {
152 }
153
159 */
160 MinutiaShape(std::shared_ptr<Minutia> minutia, ImageShapeAttributes attr)
161 : m(std::move(minutia))
162 , r(DefaultRadius)
163 , a(std::move(attr))
164 , al(DefaultAngleLength)
165 {
166 }
167
168 MinutiaShape() = delete;
169 virtual ~MinutiaShape() = default;
170 MinutiaShape(const MinutiaShape&) = delete;
171 MinutiaShape(MinutiaShape&&) = delete;
172 MinutiaShape& operator=(const MinutiaShape&) = delete;
173 MinutiaShape& operator=(MinutiaShape&&) = delete;
174
175 private:
176 std::shared_ptr<Minutia> m;
177 static constexpr Radius DefaultRadius = 5;
178 Radius r;
180 static constexpr unsigned int DefaultAngleLength = 10;
181 unsigned int al;
182 };
183
187 */
188 class MinutiaeShape : public ImageShape
189 {
190 public:
194 */
195 void DrawIn(ImageShapeDrawer& drawer) const final
196 {
197 for (const auto& mi : m)
198 {
199 auto ms = MinutiaShape(mi, r, a, al);
200 ms.DrawIn(drawer);
201 }
202 }
203
211 */
212 MinutiaeShape(const std::vector<std::shared_ptr<Minutia>>& minutia,
213 Radius radius,
215 unsigned int angleLength)
216 : m(minutia)
217 , r(radius)
218 , a(std::move(attr))
219 , al(angleLength)
220 {
221 }
222
228 */
229 MinutiaeShape(const std::vector<std::shared_ptr<Minutia>>& minutia, ImageShapeAttributes attr)
230 : m(minutia)
231 , r(DefaultRadius)
232 , a(std::move(attr))
233 , al(DefaultAngleLength)
234 {
235 }
236 MinutiaeShape() = delete;
237 virtual ~MinutiaeShape() = default;
238 MinutiaeShape(const MinutiaeShape&) = delete;
239 MinutiaeShape(MinutiaeShape&&) = delete;
240 MinutiaeShape& operator=(const MinutiaeShape&) = delete;
241 MinutiaeShape& operator=(MinutiaeShape&&) = delete;
242
243 private:
244 std::vector<std::shared_ptr<Minutia>> m;
245 static constexpr Radius DefaultRadius = 5;
246 Radius r;
248 static constexpr unsigned int DefaultAngleLength = 10;
249 unsigned int al;
250 };
251} // namespace inno
It holds circle dimensions.
Definition ImageAttribute.h:691
It holds shape attributes such as color and line width.
Definition ImageShape.h:22
It is used by ImageShape to draw its shape.
Definition ImageShape.h:108
It holds line points.
Definition ImageAttribute.h:615
It draws Minutia into image.
Definition Minutia.h:108
MinutiaShape(std::shared_ptr< Minutia > minutia, ImageShapeAttributes attr)
Create Minutia shape.
Definition Minutia.h:159
void DrawIn(ImageShapeDrawer &drawer) const final
It draws Minutia into image.
Definition Minutia.h:114
MinutiaShape(std::shared_ptr< Minutia > minutia, Radius radius, ImageShapeAttributes attr, unsigned int angleLength)
Create Minutia shape.
Definition Minutia.h:142
It represents a particular Minutia (distinctive fingerprint feature point found in fingerprint skelet...
Definition Minutia.h:24
uint8_t quality
Minutia quality in range 0-100.
Definition Minutia.h:45
void WriteTo(Writer &writer) const final
Write itself into writer.
Definition Minutia.h:51
Point center
Minutia point.
Definition Minutia.h:37
Type
Type of Minutia.
Definition Minutia.h:30
@ RIDGE_ENDING
End of ridge.
Definition Minutia.h:34
@ BIFURCATION
Bifurcation Point where a friction ridge forks and becomes two separate ridges.
Definition Minutia.h:32
Minutia(Point pointArg, Type typeArg, Angle angleArg, uint8_t qualityArg)
It creates Minutia with given parameters.
Definition Minutia.h:68
Type type
Minutia type (bifurcation/ending).
Definition Minutia.h:39
Angle angle
The orientation of the minutia is represented in degrees, with zero degrees pointing horizontally and...
Definition Minutia.h:42
It draws Minutia into image.
Definition Minutia.h:188
MinutiaeShape(const std::vector< std::shared_ptr< Minutia > > &minutia, ImageShapeAttributes attr)
Create Minutia shape.
Definition Minutia.h:228
MinutiaeShape(const std::vector< std::shared_ptr< Minutia > > &minutia, Radius radius, ImageShapeAttributes attr, unsigned int angleLength)
Create Minutia shape.
Definition Minutia.h:211
void DrawIn(ImageShapeDrawer &drawer) const final
It draws all Minutia into image.
Definition Minutia.h:194
It holds X and Y coordinates of point.
Definition ImageAttribute.h:312
It holds rectangle and draws it.
Definition ImageShape.h:163
It holds rectangle vertexes, width, height.
Definition ImageAttribute.h:357
Provides interface for serialization of all classes.
Definition Writer.h:164
float Angle
Angle in degrees.
Definition ImageAttribute.h:122
unsigned int Radius
Radius.
Definition ImageAttribute.h:127