-
Notifications
You must be signed in to change notification settings - Fork 57
/
Copy pathsvd_fingerprint.html
215 lines (183 loc) · 6 KB
/
svd_fingerprint.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
<html>
<head>
<title>
SVD_FINGERPRINT - SVD Compression of Fingerprint Images
</title>
</head>
<body bgcolor="#eeeeee" link="#cc0000" alink="#ff3300" vlink="#000055">
<h1 align = "center">
SVD_FINGERPRINT <br> SVD Compression of Fingerprint Images
</h1>
<hr>
<p>
<b>SVD_FINGERPRINT</b>
is a MATLAB program which
reads a file containing a fingerprint image and
uses the singular value decomposition (SVD) to
compute and display a series of low rank approximations to the image.
</p>
<p>
In MATLAB, images can be thought of as numeric arrays (although you
do have to convert them from the uint8 numeric format used for images
to the double format used for numeric arrays.)
</p>
<p>
Therefore, an MxN image A has an SVD decomposition A = U*S*V'.
</p>
<p>
For any 1 <= R <= min(M,N), a low rank approximation to A is formed by
<pre>
Ar = U(1:m,1:r) * S(1:r,1:r) * V(1:n,1:r)';
</pre>
Properties of the SVD guarantee that Ar is the best possible rank R approximation
to the data in A. This means it is often possible to get a good approximation
to A using much less data.
</p>
<p>
Regarding a fingerprint image as collection of column vectors, we can apply
this technique. Fingerprints can be difficult to compress, since they have
a great deal of fine variation and detail.
</p>
<h3 align = "center">
Licensing:
</h3>
<p>
The computer code and data files described and made available on this web page
are distributed under
<a href = "../../txt/gnu_lgpl.txt">the GNU LGPL license.</a>
</p>
<h3 align = "center">
Languages:
</h3>
<p>
<b>SVD_FINGERPRINT</b> is available in
<a href = "../../m_src/svd_fingerprint/svd_fingerprint.html">a MATLAB version</a>.
</p>
<h3 align = "center">
Related Data and Programs:
</h3>
<p>
<a href = "../../datasets/fingerprints/fingerprints.html">
FINGERPRINTS</a>,
a dataset directory which
contains some images of fingerprints.
</p>
<p>
<a href = "../../m_src/svd_basis/svd_basis.html">
SVD_BASIS</a>,
a MATLAB program which
applies the singular value decomposition (SVD) to a collection of data vectors,
extracting dominant modes;
</p>
<p>
<a href = "../../m_src/svd_demo/svd_demo.html">
SVD_DEMO</a>,
a MATLAB program which
demonstrates the singular value decomposition (SVD) for a simple example.
</p>
<p>
<a href = "../../m_src/svd_snowfall/svd_snowfall.html">
SVD_SNOWFALL</a>,
a MATLAB program which
reads a file containing historical snowfall data and
analyzes the data with the Singular Value Decomposition (SVD).
</p>
<p>
<a href = "../../m_src/svd_truncated/svd_truncated.html">
SVD_TRUNCATED</a>,
a MATLAB program which
demonstrates the computation of the reduced or truncated
Singular Value Decomposition (SVD) that is useful for cases when
one dimension of the matrix is much smaller than the other.
</p>
<h3 align = "center">
Reference:
</h3>
<p>
<ol>
<li>
Harry Andrews, Claude Patterson,<br>
Outer Product Expansions and Their Uses in Digital Image Processing,<br>
American Mathematical Monthly,<br>
Volume 82, Number 1, January 1975, pages 1-13.
</li>
<li>
David Kahaner, Cleve Moler, Steven Nash,<br>
Numerical Methods and Software,<br>
Prentice Hall, 1989,<br>
ISBN: 0-13-627258-4,<br>
LC: TA345.K34.
</li>
</ol>
</p>
<h3 align = "center">
Source Code:
</h3>
<p>
<ul>
<li>
<a href = "svd_bw.m">svd_bw.m</a>,
creates a low rank SVD approximation of a black and white image.
</li>
<li>
<a href = "svd_fingerprint.m">svd_fingerprint.m</a>,
compares a fingerprint to low rank SVD compressed versions.
</li>
</ul>
</p>
<h3 align = "center">
Examples and Tests:
</h3>
<p>
<b>FINGERPRINT_01</b> analyzes the data in the file "fingerprint_01.png".
Note that the PNG format can include a hidden form of compression,
which we are ignoring for this exercise. (Take a look at the size, in bytes,
of the original PNG file and the sequence of compressed versions.)
We are concerned about compressed representation of the image once it
has been read into memory and stored as an array of MxN black/white values.
<ul>
<li>
<a href = "fingerprint_01.png">fingerprint_01.png</a>,
a fingerprint image.
</li>
<li>
<a href = "singular_values_01.png">singular_values_01.png</a>,
a plot of the singular values shows how compressible the data is.
</li>
<li>
<a href = "fingerprint_01_r01.png">fingerprint_01_r01.png</a>,
the rank 1 approximation.
</li>
<li>
<a href = "fingerprint_01_r02.png">fingerprint_01_r02.png</a>,
the rank 2 approximation.
</li>
<li>
<a href = "fingerprint_01_r05.png">fingerprint_01_r05.png</a>,
the rank 5 approximation.
</li>
<li>
<a href = "fingerprint_01_r10.png">fingerprint_01_r10.png</a>,
the rank 10 approximation.
</li>
<li>
<a href = "fingerprint_01_r20.png">fingerprint_01_r20.png</a>,
the rank 20 approximation.
</li>
<li>
<a href = "fingerprint_01_r40.png">fingerprint_01_r40.png</a>,
the rank 40 approximation.
</li>
</ul>
</p>
<p>
You can go up one level to <a href = "../m_src.html">
the MATLAB source codes</a>.
</p>
<hr>
<i>
Last modified on 27 February 2012.
</i>
<!-- John Burkardt -->
</body>
</html>