# Evaluation of a Vein Biometric Recognition System on an Ordinary Smartphone
## 4 Implementation and Evaluation of the Recognition System
### Recognition Algorithms  
Feature extraction algorithms for veins can be classified into four groups according to the information extracted: minutiae of the vein patterns, features based on convolutional neural networks (CNNs), binary structure of the veins, and local texture descriptors [2]. The extraction of minutiae is not commonly employed for vein images because the number of minutiae located is small. The results obtained with CNNs are promising. However, the application of CNNs to vein recognition is very recent and is not yet well-established. The most extended feature extraction techniques belong to the last two groups. Therefore, we focused on evaluating MC (maximum curvature) [15] as an algorithm for the extraction of the binary structure of the veins and SIFT (scale-invariant feature transform) [16] as an algorithm for the extraction of local texture descriptors. MC aims to emphasize the center lines of the veins with different widths and levels of brightness. Four cross-sectional profiles are computed by the first and second derivatives in different directions (horizontal, vertical, and two diagonals). Concave profiles indicate vein  
Figure 2: Samples acquired from a wrist (**first row**) and a dorsal hand (**third row**) together with their extracted ROIs if applicable (**second** and **fourth rows**, respectively) for the conditions (from left to right): Outdoor, Indoor natural light 1, Indoor natural light 2, Indoor artificial light, and darkness. lines and the local maxima at each concave area indicate the center positions of the veins. Each center position gets a score based on the width and the curvature of the concave area. Once scores are calculated, a filter is applied to connect the vein centers and remove noise. To binarize the image, a median thresholding is applied. SIFT searches local maximum points through the space and frequency domains of the vein images, which reduces the probability of selecting noise points. A keypoint is selected attending to its neighborhood and applying Taylor series expansion. Each keypoint detected is described by horizontal and vertical locations, scales, and orientations. We employed the Matlab implementation of the MC-based recognition included in the OpenVein Toolkit [14]. The steps for feature extraction based on MC are: (1) image rescaling, (2) ROI (or foreground) extraction, and (3) MC extraction. MC extraction requires a parameter named as sigma to define the convolution kernel size for the computation of the derivatives. The value of sigma employed was 15, according to the vein images of the database acquired. The matching of the binary features given by MC was performed with the extended version of the approach proposed in [21], computing the correlation between the reference and the input features by shifting the reference features horizontally and vertically, as well as rotating them. The parameters employed were: cw = 50 and ch = 30, as the number of pixels to shift in, respectively, vertical and horizontal direction; cr = 45, as the rotation angle to search (from \(-\)45 to 45 degrees); and crs = 0.5, as the rotation degree to sweep within the search angle (\(-\)45, \(-\)44.5, \(-\)44, and so on until 45). Figure 3 shows MC features extracted from two samples of the same individual, from the wrist and from the dorsal hand. We employed the Python and OpenCV implementation of the SIFT-based recognition method available in [7]. The steps for feature extraction based on SIFT are: (1) image rescaling, (2) ROI (or foreground) extraction, (3) image enhancement, and (4) SIFT extraction. In [7], image enhancement is performed by firstly applying CLAHE (contrast adaptive limited histogram equalization) twice and subsequently Gaussian, median, and average filters. CLAHE works by improving the local contrast and enhancing the definitions of veins. However, since CLAHE generates high-frequency noise, Gaussian, median, and average filters are applied to smooth the result and remove most of the generated noise.