2010-03-19
Other stuff
| Willy@94 | 1 | \chapter{Methodology} |
| francis@395 | 2 | To achieve automated iris recognition, there are three main tasks: first we must locate the iris in a given image. Secondly, it is necessary to encode the iris information into a format which is amenable to calculation and computation, for example a binary string. Finally, the data must be storable, to load and compare these encodings. |
| francis@318 | 3 | |
| Willy@330 | 4 | \section{Iris Location} |
| francis@357 | 5 | When locating the iris there are two potential options. The software could |
| francis@357 | 6 | require the user to select points on the image, which is both reliable and |
| francis@357 | 7 | fairly accurate, however it is also time consuming and implausible for any |
| francis@357 | 8 | real-world application. The other option is for the software to auto-detect the |
| Dragos@381 | 9 | iris within the image. This process is computationally complex and introduces a source of error due to the inherent complexities of computer vision. However, as the software will then require less user interaction it is a major step towards producing a system which is suitable for real-world deployment, and thus became a priority for extending the program specification. |
| francis@318 | 10 | |
| francis@357 | 11 | Locating the iris is not a trivial task since its intensity is close to that of |
| francis@357 | 12 | the sclera\footnote{The white part of the eye.} and is often obscured by |
| francis@357 | 13 | eyelashes and eyelids. However the pupil, due to its regular size and uniform |
| Dragos@381 | 14 | dark shade, is relatively easy to locate. The pupil and iris can be approximated as concentric and this provides a reliable entry point for autodetection. |
| francis@318 | 15 | |
| Tom@329 | 16 | \subsection{Pupil} |
| Willy@333 | 17 | |
| Tom@374 | 18 | The pupil's intensity and location are fairly consistent in most images and |
| Tom@374 | 19 | so it lends itself well to auto-detection. Detection of the pupil can be |
| Tom@374 | 20 | carried out by: removing noise by applying a median blur, thresholding the image |
| francis@357 | 21 | to obtain the pupil, performing edge detection to obtain the pupil boundary and |
| francis@357 | 22 | then identifying circles. |
| Willy@333 | 23 | |
| Dragos@381 | 24 | A median filter is an kernel based, convolution filter which blurs an image by setting a pixel value to the median of itself with its neighbours. A na\"ive approach to applying a median filter would be to simply find the median for a given area around each |
| francis@357 | 25 | pixel by sorting an array and finding the median to replace the current pixel |
| Tom@361 | 26 | with. This could be implemented with a sorting algorithm which would have runtime |
| francis@357 | 27 | $\mathcal{O}(n \log n)$ on average. However, since the software requires |
| francis@357 | 28 | several median blurs on different images we require a more efficient solution. |
| francis@318 | 29 | |
| francis@364 | 30 | For an improved algorithm we consult Perreault's paper \cite{median2007}, which |
| francis@357 | 31 | describes an algorithm to create a median filter in linear time. The process |
| francis@357 | 32 | (see algorithm \ref{medianfilteralgor}) involves constructing individual column |
| francis@357 | 33 | histograms and combining them to form histograms centred around a pixel, known |
| francis@357 | 34 | as a kernel histogram. |
| francis@318 | 35 | |
| francis@357 | 36 | The significant speed increase comes from the way in which the column |
| francis@357 | 37 | histograms are updated and combined. For each pixel we remove an old column |
| francis@357 | 38 | histogram from the kernel, shift a new column histogram down one pixel so it is |
| francis@357 | 39 | centred on the required row and then add this new histogram to the kernel |
| francis@357 | 40 | histogram. While this radically reduces the number of operations which need to |
| francis@357 | 41 | be performed for each pixel, there is an initialisation step for each row which |
| francis@357 | 42 | has runtime linear in the size of the kernel histogram $ \mathcal{O}(r)$. This |
| francis@357 | 43 | enabled the entire median filter to be applied in a matter of milliseconds. |
| francis@318 | 44 | |
| francis@318 | 45 | \begin{algorithm} |
| francis@318 | 46 | \caption{Median filtering algorithm as proposed in \cite{median2007}} |
| francis@318 | 47 | \label{medianfilteralgor} |
| francis@318 | 48 | \begin{algorithmic} |
| francis@318 | 49 | \STATE \textbf{Input:} Image X of size $m \times n$, kernel radius $r$. |
| francis@318 | 50 | \STATE \textbf{Output:} Image Y of size $m \times n$. |
| francis@318 | 51 | \STATE Initalize each column histogram $h_0, \ldots, h_{n-1}$ as if centred on row $-1$. |
| francis@318 | 52 | \FOR{$i=1$ to $m$} |
| francis@318 | 53 | \STATE Shift the first $r$ column histograms $h_0, \ldots, h_{r-1}$ down 1 pixel. |
| francis@318 | 54 | \STATE Combine these $r$ column histograms to form the kernel histogram $H$. |
| francis@318 | 55 | \FOR{$j=1$ to $n$} |
| francis@318 | 56 | \STATE Set pixel $Y_{i,j}$ equal to the median of $H$. |
| francis@318 | 57 | \STATE Shift column histogram $h_{j+r}$ down 1 pixel. |
| francis@318 | 58 | \STATE Remove column histogram $h_{j-r-1}$. |
| francis@318 | 59 | \STATE Add column histogram $h_{j+r}$. |
| francis@318 | 60 | \ENDFOR |
| francis@318 | 61 | \ENDFOR |
| francis@318 | 62 | \end{algorithmic} |
| francis@318 | 63 | \end{algorithm} |
| francis@318 | 64 | |
| Willy@363 | 65 | \begin{figure} |
| francis@318 | 66 | \centering |
| Dragos@355 | 67 | \includegraphics[width=0.35\textwidth]{pupil_step_1_start} |
| Dragos@355 | 68 | \label{pupil_step_1_start} |
| Willy@326 | 69 | \hspace{1cm} |
| Dragos@355 | 70 | \includegraphics[width=0.35\textwidth]{pupil_step_2_median} |
| Willy@328 | 71 | \caption{Image before and after a median filter.} |
| Dragos@362 | 72 | \label{pupil_step_2_median} |
| francis@318 | 73 | \end{figure} |
| francis@318 | 74 | |
| francis@357 | 75 | The overall effect of the median blur is to reduce the noise and pixel |
| francis@357 | 76 | intensity complexity of the iris image without perturbing the edge fidelity of |
| francis@357 | 77 | the original image. This results in a stronger clustering of pixel values in |
| francis@357 | 78 | the resultant pixel data histogram; this permits a largely noise-free, dynamic |
| francis@357 | 79 | analysis of features which occupy discrete pixel ranges, such as the pupil (see |
| francis@357 | 80 | figure \ref{example_histogram}). |
| Dragos@355 | 81 | |
| Willy@363 | 82 | \begin{figure} |
| Dragos@355 | 83 | \centering |
| Dragos@355 | 84 | \includegraphics[width=0.35\textwidth]{example_histogram} |
| Dragos@362 | 85 | \caption{Histogram generated in the application following a median blur of a database image. Note the distinct, left-most (darkest pixel values) peak as a typical pupil's pixel signature on the image.} |
| Dragos@355 | 86 | \label{example_histogram} |
| Dragos@355 | 87 | \end{figure} |
| Dragos@355 | 88 | |
| francis@357 | 89 | Upon application of a dynamic threshold to our median blurred image the |
| francis@357 | 90 | leftmost image in figure \ref{pupil_step_3_thresh} is obtained. The location of |
| francis@357 | 91 | the pupil is well defined, and edge detection can extract this information to |
| francis@357 | 92 | form a single bit depth image which can be searched for circles. |
| Willy@336 | 93 | |
| francis@357 | 94 | The Sobel filter is an edge detection technique which calculates the gradients |
| francis@357 | 95 | (in both the $x$ and $y$ direction) of the image intensity for each pixel and |
| francis@357 | 96 | then combines them to give a gradient magnitude. This indicates how sharp the |
| francis@357 | 97 | boundary is, which is itself an indication of whether an edge is present. |
| francis@318 | 98 | |
| Willy@363 | 99 | \begin{figure} |
| francis@318 | 100 | \centering |
| Dragos@355 | 101 | \includegraphics[width=0.35\textwidth]{pupil_step_3_thresh} |
| Dragos@355 | 102 | \label{pupil_step_3_thresh} |
| Willy@326 | 103 | \hspace{1cm} |
| Dragos@355 | 104 | \includegraphics[width=0.35\textwidth]{pupil_step_4_sobel} |
| Dragos@362 | 105 | \caption{Thresholded image before and after edge detection with a 2D Sobel convolution filter.} |
| Dragos@355 | 106 | \label{pupil_step_4_sobel} |
| francis@318 | 107 | \end{figure} |
| francis@318 | 108 | |
| francis@357 | 109 | As can be seen in \ref{pupil_step_4_sobel} the result of this process of |
| francis@357 | 110 | filtering is a circular artifact denoting the extremeties of the pupil in the |
| francis@357 | 111 | image. This data requires further analysis for the presence of circular |
| francis@357 | 112 | artifacts to acquire a "best-fit" representation of the potentially elliptical |
| francis@357 | 113 | pupil. |
| Willy@336 | 114 | |
| Willy@336 | 115 | %TODO: make this not logbook styleeee |
| Willy@336 | 116 | %TODO: make this focused towards pupils |
| francis@357 | 117 | The Hough Transform is implemented to locate the pupil (and subsequently the |
| francis@357 | 118 | iris). Given a regular curve -- in this case a circle -- and a suitable range |
| francis@357 | 119 | of parameters -- $x$ centre, $y$ centre and radius -- the generalised Hough |
| francis@357 | 120 | transform can query individual pixels in an image for their contribution to a |
| francis@357 | 121 | globally consistent solution for any parameters within the valid range. |
| francis@318 | 122 | |
| francis@357 | 123 | Due to the high computational complexity of the Hough transform technique (the |
| francis@357 | 124 | parameter space for a simple circle is in three dimensions and depending on |
| francis@357 | 125 | valid ranges this can quickly grow to millions of computations) and previous |
| francis@357 | 126 | considerations for application performance, a number of elements were |
| francis@357 | 127 | streamlined to accelerate the computation. |
| francis@346 | 128 | |
| francis@357 | 129 | Thresholding the input image has the inherent benefit of changing the virtual |
| francis@395 | 130 | bit-depth of the image to 1 (black or white). Furthermore, the implemented algorithm saves |
| francis@357 | 131 | time by only operating on black pixels -- a greyscale implementation would |
| francis@357 | 132 | significantly add to the processing time. Additionally a search on the |
| francis@357 | 133 | threshold result (figure \ref{pupil_step_3_thresh}) gives confident parameter |
| francis@357 | 134 | estimations for centre and radius which can be used to constrain and guide the |
| francis@357 | 135 | Hough algorithm. |
| Dragos@355 | 136 | |
| Willy@363 | 137 | \begin{figure} |
| Dragos@355 | 138 | \centering |
| Dragos@355 | 139 | \includegraphics[width=0.35\textwidth]{pupil_step_5_hough} |
| Dragos@362 | 140 | % \label{pupil_step_5_hough} |
| Dragos@355 | 141 | \hspace{1cm} |
| Dragos@355 | 142 | \includegraphics[width=0.35\textwidth]{pupil_step_6_finish} |
| Dragos@362 | 143 | \caption{Hough transform solution for a circle (red), given edge detected pupil image.} |
| Dragos@355 | 144 | \label{pupil_step_6_finish} |
| Dragos@355 | 145 | \end{figure} |
| Dragos@355 | 146 | |
| Dragos@362 | 147 | |
| francis@357 | 148 | As can be seen in figure \ref{pupil_step_6_finish}, this process gives fast, |
| francis@357 | 149 | accurate and reliable solutions for circular artefacts in the thresholded and |
| francis@357 | 150 | edge detected pupil image. The basis of iris auto-detection relies on this |
| francis@357 | 151 | process. |
| francis@318 | 152 | |
| Tom@329 | 153 | \subsection{Iris} |
| Willy@338 | 154 | |
| francis@346 | 155 | Once we have the location of the pupil clearly defined, the complexity of |
| francis@346 | 156 | locating the iris is somewhat reduced due to the relative concentricity of the |
| Tom@373 | 157 | pupil and iris. |
| francis@318 | 158 | |
| francis@354 | 159 | In contrast to pupil detection, efficiently locating the iris is somewhat more |
| francis@354 | 160 | complicated due to (i) the obstruction of the iris by the eyelids for most |
| francis@354 | 161 | eyes, (ii) its irregular pattern and (iii) because of the relative similarity with the iris |
| francis@354 | 162 | boundary and the sclera. |
| francis@354 | 163 | |
| Tom@366 | 164 | Nevertheless, following a similar method to that of locating the pupil generally provides good results. |
| Tom@373 | 165 | Again, a median filter is applied to the original image in order to remove noise from the image and to |
| Tom@373 | 166 | strengthen the clustering in the pixel histogram. The resultant histogram is used to identify a point |
| Tom@373 | 167 | that can be used to threshold the image to produce an image similar to figure \ref{iris-threshold}. |
| Tom@366 | 168 | |
| Tom@373 | 169 | The method involves finding the peaks of the histogram (excluding the left-most peak that represents the pupil) |
| Tom@373 | 170 | and choosing a treshold value between these points. Although not always optimum, this method generally creates |
| Tom@373 | 171 | an image that the Hough Transform can use to find an approximate match for the iris; other, potentially better, |
| Tom@375 | 172 | methods for achieving this threshold are discussed in the future work section (\ref{furtherwork}). |
| Tom@366 | 173 | |
| Willy@368 | 174 | \begin{figure} |
| Tom@366 | 175 | \centering |
| Tom@366 | 176 | \includegraphics[width=0.4\textwidth]{iris-threshold} |
| Tom@392 | 177 | \caption{ An example of an image that is obtained by intelligently thresholding the original input image and then using Sobel to edge detect. |
| Tom@392 | 178 | This image represents the data that is used to locate the iris; the data is used by the Hough Transform to decide |
| Tom@392 | 179 | on a best-fit circle to represent the location of the iris. A rough semi-circle can be made out by the human eye; this is what |
| Tom@392 | 180 | allows the Hough Transform to accurately locate the iris. } |
| Tom@366 | 181 | \label{iris-threshold} |
| Tom@366 | 182 | \end{figure} |
| francis@354 | 183 | |
| Tom@373 | 184 | The Hough transform is very efficient for the task of finding the iris from an image such |
| Tom@373 | 185 | as this because it is resilient to noise |
| francis@346 | 186 | and performs well even when a large amount of the circle is hidden. For |
| Tom@373 | 187 | example, when two eyelids are covering a large portion of the iris, such |
| Tom@373 | 188 | as in figure \ref{hough-eyelids}. This provides us with a circle that defines the iris, although |
| Tom@373 | 189 | portions of this are still obscured by the eyelids, meaning that these also need to be defined. |
| francis@318 | 190 | |
| francis@354 | 191 | |
| Willy@363 | 192 | \begin{figure} |
| francis@318 | 193 | \centering |
| francis@318 | 194 | \includegraphics[width=0.5\textwidth]{hough-eyelids} |
| Tom@373 | 195 | \caption{ A demonstration of the results obtained by applying the Hough Transform to an image such as that in figure |
| Tom@373 | 196 | \ref{iris-threshold}. The chosen circle is shown in red, which is an average of all of the circles with the |
| Tom@373 | 197 | maximum number of votes (in green). The blue circles represent those with the second most votes.} |
| Willy@328 | 198 | \label{hough-eyelids} |
| francis@318 | 199 | \end{figure} |
| francis@318 | 200 | |
| Willy@339 | 201 | |
| Tom@329 | 202 | \subsection{Eyelids} |
| francis@354 | 203 | We note that an image of an eye roughly has three intensities, from darkest to |
| francis@354 | 204 | lightest: pupil, iris and sclera, and eyelids. Hence a suitable thresholding |
| francis@354 | 205 | method should be able to separate the eyelids from the rest of the image. Otsu |
| francis@354 | 206 | gives a method in \cite{otsu1975} for appropriately thresholding grey level |
| francis@354 | 207 | images; the algorithm works as follows. |
| francis@318 | 208 | |
| francis@354 | 209 | Assume we have an image with $L$ possible intensities for each pixel and $n_i$ |
| francis@354 | 210 | is the number of pixels of intensity $i$. We first normalize the histogram into |
| francis@354 | 211 | a probability distribution, that is $p_i = n_i / \sum_{i=1}^{L} n_i$. We assume |
| francis@354 | 212 | that we threshold the image at level $k$ into two classes, $C_0$ containing |
| francis@354 | 213 | levels less than or equal to $k$ and $C_1$ containing the rest. We then define |
| Willy@367 | 214 | $$\omega(k) := \sum_{i=1}^{k} p_i \text{ and } \mu(k) := \sum_{i=1}^{k} ip_i,$$ |
| Willy@336 | 215 | which are the probability of a pixel picked at random being in $C_0$ and the expected (mean) intensity for $C_0$ respectively. |
| Willy@321 | 216 | |
| francis@322 | 217 | It is clear to see that that $1-\omega(k)$ is the probability of a pixel being in $C_1$ and $\mu(L)$ is the mean intensity of the entire image. We then calculate |
| Willy@338 | 218 | $$\sigma^2 = \frac{\left[\mu(L)\omega(k) - \mu(k)\right]^2}{\omega(k)[1 - \omega(k)},$$ |
| Willy@341 | 219 | which is shown to be measure of the variance between the two classes $C_0$ and $C_1$ by Otsu in \cite{otsu1975}. We calculate this between-class variance for each $k$ and finally threshold on the $k$ where $\sigma^2$ maximized. |
| Willy@341 | 220 | |
| francis@354 | 221 | To get any useful information from Otsu thresholding we must first ignore the |
| francis@354 | 222 | pupil to ensure that the result does not only consist of two classes (the pupil |
| francis@354 | 223 | and then everything else). |
| francis@354 | 224 | Once we have ignored the pupil in class calculations we find that Otsu thresholding |
| francis@354 | 225 | gives us two classes: one containing the iris, sclera and the pupil (since it |
| francis@354 | 226 | has lowest intensity), and the other class containing the eyelids, see figure |
| francis@354 | 227 | \ref{otsu-eyelids}. |
| Tom@377 | 228 | With the iris located within the image we must now begin the task of extracting information from it. |
| francis@318 | 229 | |
| Willy@363 | 230 | \begin{figure} |
| Willy@320 | 231 | \centering |
| Willy@320 | 232 | \includegraphics[width=0.35\textwidth]{anothereye} |
| Willy@326 | 233 | \hspace{1cm} |
| Willy@320 | 234 | \includegraphics[width=0.35\textwidth]{otsue} |
| Willy@338 | 235 | \caption{Image before and after a median blur and Otsu threshold.} |
| Willy@320 | 236 | \label{otsu-eyelids} |
| Willy@320 | 237 | \end{figure} |
| Willy@120 | 238 | |
| Willy@338 | 239 | |
| Tom@329 | 240 | \section{Encoding the Iris} |
| Tom@329 | 241 | %TODO: Reasons for unwrapping the iris for the filters. Polar coords. |
| mike@340 | 242 | |
| francis@372 | 243 | The iris is encoded to a unique set of 2048 bits which serve as the fundamental |
| francis@383 | 244 | identification of that person's particular iris. These iris bit codes can be |
| francis@372 | 245 | stored in a database and then compared to uniquely identify a person. The size |
| francis@372 | 246 | of 2048 is sufficiently large to store the data of several particular filters |
| francis@372 | 247 | on most angles of the iris, while also being sufficiently small to be easily |
| francis@383 | 248 | stored in a database and manipulated quickly. We wish to extract phase |
| francis@383 | 249 | information from the iris as opposed to amplitude information since phase |
| francis@383 | 250 | information is not skewed by pupil deformation. We use Gabor filters to extract |
| Tom@385 | 251 | this phase information as suggested by Daugman \cite{daugman2004}. |
| francis@372 | 252 | |
| francis@372 | 253 | %One of the main problems with this kind of approach is the way in which we |
| francis@372 | 254 | %target the iris boundary in order for it to be |
| francis@354 | 255 | |
| francis@354 | 256 | The Gabor filter is an application of the Gabor wavelet (see equation |
| francis@354 | 257 | \ref{gaborEquation}) \cite{daugman2004}. This will return two bits depending on |
| francis@354 | 258 | which quadrant (see figure \ref{quadrants}) the normalised resulting imaginary |
| francis@354 | 259 | number from this lies in. This equation can be simplified for computation by |
| francis@354 | 260 | considering it as a combination of two filters: one filter representing the |
| francis@354 | 261 | real part of the integral and the other representing the imaginary part. Each |
| francis@376 | 262 | of these filters consist of a combination of a Gaussian and a sinusoidal |
| francis@354 | 263 | filter (see figure \ref{gabor-combo}). The parameters $\alpha$, $\beta$ and |
| francis@354 | 264 | $\omega$ are then tuned by constraining the Gaussian filter to range over one |
| francis@354 | 265 | standard deviation and the sinusoidal filter to range from $-\pi$ to $\pi$. |
| Willy@191 | 266 | |
| francis@318 | 267 | \begin{equation} |
| francis@318 | 268 | \label{gaborEquation} |
| mike@342 | 269 | h_{\{Re,Im\}} = sgn_{\{Re,Im\}}\int _{\rho} \int _{\phi} I(\rho, \phi) e^{-i\omega(\theta _{0} - \phi)} e^{-(r_{0}-\rho)^{2}/\alpha^{2}} e^{-(\theta_{0}-\phi)^{2}/\beta^{2}} \rho d\rho d\phi |
| francis@318 | 270 | \end{equation} |
| Willy@191 | 271 | |
| Willy@363 | 272 | \begin{figure} |
| mike@342 | 273 | \centering |
| mike@342 | 274 | \includegraphics[width=0.35\textwidth]{quadrants} |
| mike@342 | 275 | \caption{The four phase quadrants and the corresponding bit sequences they represent} |
| mike@342 | 276 | \label{quadrants} |
| mike@342 | 277 | \end{figure} |
| mike@342 | 278 | |
| Willy@363 | 279 | \begin{figure} |
| francis@318 | 280 | \centering |
| francis@318 | 281 | \includegraphics[width=0.8\textwidth]{gabor-combo} |
| Willy@336 | 282 | \caption{The real (left) and imaginary (right) parts of the Gabor wavelets} |
| francis@318 | 283 | \label{gabor-combo} |
| francis@318 | 284 | \end{figure} |
| francis@318 | 285 | |
| francis@376 | 286 | %\subsection{Heatmaps} |
| francis@376 | 287 | %A heatmap is created by applying a fixed size Gabor filter to every pixel in an |
| francis@376 | 288 | %unwrapped iris. Then the 2 bit code for each pixel is represented as a colour |
| francis@376 | 289 | %on the heatmap. By doing this we were able to see clearly which size filters |
| francis@376 | 290 | %would give us the most informative data when doing comparisons. As shown by |
| francis@376 | 291 | %figure \ref{heatmaps}, smaller filters produce a largely varying heatmap, and |
| francis@376 | 292 | %much larger filters give significantly less useful information for comparisons. |
| francis@376 | 293 | %We will therefore try to use small filters across the area closest to the pupil |
| francis@376 | 294 | %to capture the large amount of detail seen here. We will then increase the |
| francis@376 | 295 | %sizes of filters further out in the iris to make sure that we cover a |
| francis@376 | 296 | %sufficient proportion of the iris in our comparisons, but will try to balance |
| francis@376 | 297 | %this so that we don't use uninformative filters as in figure \ref{heatmaps} |
| francis@318 | 298 | |
| mike@324 | 299 | \subsection{Filter Placement and Size} |
| francis@376 | 300 | The Gabor filters need to be placed so that they take account for a large |
| francis@376 | 301 | enough range of data without missing out the fine detail within the iris. As we |
| francis@376 | 302 | require 2 bits to uniquely identify each quadrature, we have the additional |
| francis@376 | 303 | constraint that 1024 filters must be used, allowing a manageable bit code |
| francis@376 | 304 | length of 256B for each iris which can be split into sections of 4B. To |
| francis@376 | 305 | simplify the calculations involved in applying the filters to the unwrapped iris they |
| francis@376 | 306 | can also be considered to all be placed at a uniform rotation of 0. Since it |
| francis@376 | 307 | can be observed that there is consistent amounts of information at points |
| francis@376 | 308 | varying in the angular direction in the iris, it is also a good idea to place |
| francis@376 | 309 | the filters uniformly in this direction. In this implementation 256 angular |
| francis@376 | 310 | directions were considered because it divides our |
| francis@376 | 311 | required number of filters evenly and includes a large spread of data across |
| francis@376 | 312 | the iris. However, in many cases, in the radial direction there is more |
| francis@372 | 313 | distinct information observed closer to the pupil. |
| mike@323 | 314 | |
| francis@372 | 315 | To include the more important data close to the pupil the filters can be |
| francis@372 | 316 | positioned so that a larger proportion of them have their centres in this |
| francis@372 | 317 | range. With the 256 angular directions there are 4 radial filter locations left |
| francis@372 | 318 | to position. These can be placed uniformly between the bottom of the iris and |
| francis@376 | 319 | half-way across the iris to allow the data around the pupil to be explored. |
| francis@372 | 320 | Finally, to make sure that filters are always large enough to represent enough |
| francis@372 | 321 | data, the constraint that a filter centre cannot be placed on the 3 pixels |
| francis@372 | 322 | nearest the top and bottom of the image is added. This means that useless |
| francis@376 | 323 | filters of sizes 1 and 3 will never be included when encoding the iris, and we |
| francis@376 | 324 | avoid including additional pupil debris that may have been incorporated into |
| francis@376 | 325 | the iris section. The final set of filter locations across an unwrapped iris is |
| francis@376 | 326 | represented in figure \ref{filterpos}. |
| mike@323 | 327 | |
| francis@376 | 328 | \begin{figure}[h!] |
| mike@325 | 329 | \centering |
| mike@325 | 330 | \includegraphics[width=0.8\textwidth]{filterpos} |
| mike@340 | 331 | \caption{Filter positions for an iris of radius 40 between $\theta$=0 and $\theta$=45 } |
| mike@325 | 332 | \label{filterpos} |
| mike@325 | 333 | \end{figure} |
| mike@323 | 334 | |
| francis@372 | 335 | The final consideration with the filters is their size. Two schemes for doing |
| francis@372 | 336 | this are demonstrated in figure \ref{filter-size}. The first (left) aims to |
| francis@372 | 337 | position the largest possible filter at every filter location. This means that |
| francis@372 | 338 | the filters fulfil one of the original requirements; that the filters should |
| francis@372 | 339 | capture as much information as they can. The issue which this scheme suffers |
| francis@372 | 340 | from is that the filters with their centres in the middle of the iris can be so |
| francis@372 | 341 | large that they aren't really able to represent some of the finer detail in the |
| francis@376 | 342 | image. The second scheme (right) tackles this problem |
| francis@372 | 343 | by capping all filters in the image at a maximum size. This maximum size can be |
| francis@372 | 344 | tuned in the implementation to get more distinct bitcodes, which is why it is |
| francis@376 | 345 | favourable and consequently the one we use. |
| Willy@363 | 346 | \begin{figure} |
| mike@342 | 347 | \centering |
| mike@342 | 348 | \includegraphics[width=0.9\textwidth]{filter-size} |
| mike@342 | 349 | \caption{Two schemes for filter sizes and placements at a fixed point in the angular direction in an iris of radius 40. Left: maximum size filter placed. Right: filter sizes capped at 25} |
| mike@342 | 350 | \label{filter-size} |
| mike@342 | 351 | \end{figure} |
| mike@324 | 352 | |
| Tom@329 | 353 | \section{Comparisons} |
| Tom@374 | 354 | Iris encodings can be compared by computing a Hamming distance between them. |
| Tom@374 | 355 | The Hamming distance between two iris codes is calculated as given in \cite{daugman2004}. |
| Tom@374 | 356 | Assume we have two iris codes, $codeA$ and $codeB$, with corresponding bit masks, |
| Tom@374 | 357 | $maskA$ and $maskB$ (where a 0 in the bit mask corresponds to a bad bit in that position |
| Tom@374 | 358 | in the iris code). Then we calculate the hamming distance $H$ as: |
| francis@318 | 359 | |
| francis@318 | 360 | $$H = \frac{\|(codeA \otimes codeB) \cap maskA \cap maskB\|}{\|maskA \cap maskB\|}. $$ |
| francis@318 | 361 | |
| francis@318 | 362 | Where $\otimes$ is the bitwise XOR operator and $\cap$ is the bitwise AND operator. |
| francis@318 | 363 | |
| Tom@382 | 364 | We can see that the numerator will be the number of differences between the |
| francis@354 | 365 | mutually non-bad bits of $codeA$ and $codeB$ and that the denominator will be |
| francis@354 | 366 | the number of mutually non-bad bits. However an astute reader may observe that |
| Tom@382 | 367 | this measure can fail if there is an exceedingly low number of mutually non-bad bits |
| Tom@382 | 368 | causing the numerator to be zero even though there may actually be large differences |
| Tom@382 | 369 | between $codeA$ and $codeB$. However, this is a simple case to handle and will rarely |
| Tom@382 | 370 | occur when comparing iris images. |
| francis@318 | 371 | |
| Tom@374 | 372 | This comparison is performed for various shifts in the codes to check for |
| francis@354 | 373 | rotation of the image, as it is very possible that a subject's eye in the image |
| francis@354 | 374 | is rotated if the camera or their head is tilted slightly. |
| francis@318 | 375 | |
| francis@378 | 376 | This statistical independence test is the key to iris recognition. It provides |
| francis@378 | 377 | sufficiently many degrees-of-freedom to fail in every case where the iris |
| francis@378 | 378 | bitcodes of two different eyes are compared, but uniquely passed when the same |
| francis@378 | 379 | iris is compared with itself. |
| francis@378 | 380 | |
| Tom@329 | 381 | \subsection{Iris Database} |
| francis@358 | 382 | Since we are able to generate the code and the iris mask directly, these are |
| francis@358 | 383 | the only two items that are required to be stored in a database, the image |
| francis@358 | 384 | bitmaps themselves are no longer required. |
| francis@318 | 385 | |
| francis@358 | 386 | We are currently using a basic text file as our database as this was simple to |
| francis@358 | 387 | implement and for the small number of eyes we have as test subjects this is |
| francis@358 | 388 | perfectly adequate and proves to be able to compare iris bitcodes extremely |
| francis@358 | 389 | fast. |
| Tom@329 | 390 | |
| Tom@329 | 391 | \section{Graphical User Interface} |
| francis@358 | 392 | Since the software was built in Qt, a cross-platform toolkit, the final product |
| francis@358 | 393 | runs on Linux, Windows, and Mac desktops, adopting the operating system's |
| francis@358 | 394 | native toolkit and giving it an integrated feel on all platforms. |
| Tom@329 | 395 | |
| Willy@363 | 396 | \begin{figure} |
| francis@318 | 397 | \centering |
| Tom@329 | 398 | \includegraphics[width=0.8\textwidth]{kde} |
| Tom@329 | 399 | \caption{Linux with Open File view.} |
| Tom@329 | 400 | \end{figure} |
| Willy@363 | 401 | \begin{figure} |
| Tom@329 | 402 | \centering |
| Tom@329 | 403 | \includegraphics[width=0.45\textwidth]{windows} |
| Tom@329 | 404 | \includegraphics[width=0.45\textwidth]{mac} |
| Tom@329 | 405 | \caption{Windows and Mac OS X.} |
| francis@318 | 406 | \end{figure} |
| Willy@120 | 407 | |
| Tom@329 | 408 | |
| francis@358 | 409 | Usability is an important consideration when creating an application, and |
| francis@358 | 410 | throughout development the aim was to provide a clean and intuitive interface |
| francis@358 | 411 | whilst still providing full usability and advanced features. The key |
| francis@358 | 412 | intellectual challenges for the user interface have been primarily to provide a |
| francis@358 | 413 | straight-forward and informative access point for the user, but also to provide |
| francis@358 | 414 | relevant extra data when required with a fall-back mechanism for difficulties |
| francis@358 | 415 | in auto-detection. |
| Tom@329 | 416 | |
| Willy@363 | 417 | \begin{figure} |
| Tom@329 | 418 | \centering |
| Tom@329 | 419 | \includegraphics[width=0.5\textwidth]{heatmapapp} |
| Tom@329 | 420 | \caption{Application with heatmap tab.} |
| Tom@329 | 421 | \end{figure} |
| Tom@329 | 422 | |
| francis@358 | 423 | The final product includes relevant data and feedback behaviour such as |
| francis@358 | 424 | histogram information from the image to allow the advanced user to track-down |
| francis@358 | 425 | and diagnose auto-detection failures. This information is placed into a tabbed |
| francis@358 | 426 | interface below the primary image so that it is easily accessible without |
| francis@358 | 427 | encroaching on our clean interface which allows the average user |
| francis@358 | 428 | point-and-click refinement (if necessary) of the iris parameters with real-time |
| francis@358 | 429 | visual feedback without overloading them with this more advanced information. |