Fifth month at Motorola
9 years, 8 months ago Posted in: Blog 0

Complete attention was given to the development of in this month albeit being futile. Initially decided to try classical details extraction to completely capture the details and store them the database.

Finger print recognition, the most prominent details extraction method, uses a simple but elegant algorithm. Once the image is acquired, borders are trimmed to get the core picture. Then histogram equalization is performed to increase the perceptional information. Then image is enhanced by taking FFT on a 32 x 32 region, multiplying by the determinant of the resulting matrix and taking Fourier inverse of it. Thus max frequency is enhanced and features are made consistent and any noises are suppressed. Then image is segmented for Region of Interest (ROI), thus proper orientation of the image is found and it is made erect.  Using SOBEL filters gradient along X (cosine) and Y (sine) direction are calculated and gradient of the image (tan) is obtained thereby. Finally image is binaraized along the right direction and ridges and joints are searched with proper filters.The initial part of finger print recognition is adapted for our use, but unlike the finger print, palm print contains multiple locations of interest, lines of various thicknesses and as the image is not taken closer to the object added noises through shining and shades exacerbated the situation.Secondly image details reduction was used and my work primarily consisted of research and development on adoption of PCA for palm print recognition.

Principle Component Analysis (PCA) is theoretically the optimum transform for a given data in least square terms and fundamental of Face recognition.  In pattern recognition it is primarily used to reduce the dimensions in a data set y retaining the characteristics that are prominent. Using Eigenfaces, which in turn used PCA we tried to find an algorithm.

The suggested method we followed was:

  1. Acquire the training set of images and calculate the eigenfaces that define face space.
  2. To get the match, project the new image onto each of the eigenfaces created before.
  3. Determine if the image is a face at all, by checking whether difference from the training set is within a threshold.
  4. If it is a face, enforce greater threshold to confirm that it belongs to the same face.

We, before testing its suitability for palm print recognition, tried on face samples where it showed a 0-9000 difference on 5 images from the same face (out of 20 used for training set) and  > 14000 for a different face (controlling set) which means for a threshold of 10000 it is likely to have 25% success rate in identifying the face and 100% success rate in rejecting the wrong one. However, when it was adapted for palm prints results were futile. In addition, I helped a colleague in extracting bit data from a bitmap (bmp) file and outputting it in an array defined in a header file so that any program could use it instantly and effortlessly.  Although initially it was written in Matlab, due to speed limitation, size and portability, it was later re written in C. As the picture could be presented in binary (black / white – 1 bit ) image or intensity (8bit or 16 bit gray scale) image, chosen to use Matlab to write the program as testing and debugging will be a lot easier. Following the BMP standard, file size, data size and data start, height (in pixels), width (in pixel), depth (bits) and compression were read from the header of the file. An odd behavior was noted. A file may contain extra bits at the end of each line, which is not included in width information. Hence to find offsets it was necessary to use (size – start) / height to find the actual length of the information of a row.  Another peculiar feature of BMP file is when height is specified in positive figure (which is the most common) the last row of the image is written first and the first row at the end. i.e. an inverted mirror image is stored. Hence to print the first row, it had to be read from (start + ( height -1) row_length ).

Further, in order to support both the endiness, a bit reversal operation needed, which was implemented in a macro, instead of a ‘for’ loop or function to save the additional over head that would have occurred otherwise.

Related Posts

Leave a Reply