How to make retinal identification fast?
    1 view (last 30 days)
  
       Show older comments
    
I have a project that does biometric identification of a person on the basis of retina. The identification accuracy is good. However, unlike the real systems as I increase the size of my data set the matching process takes so long and becomes so slow. Currently my data set has 120 images.
Features are extracted using crossing number technique. And for matching L2 norm is used as a similaity between query image feature matrix and feature matrix of images in database.
Feature matrix is formed by finding distance and angle between a candidate feature point and its four nearest neighbours. Feature matrix dimension is N x 8. where N is number of features. Please suggest me how can I reduce the matching time? And make identification process speed to match with the real identification systems. Below is the code for feature extraction.
Below is the code for matching process. It is implemented using following paper. https://www.researchgate.net/publication/241635834_Retinal_recognition_Personal_identification_using_blood_vessels
It comapres each row of test image(t) with all the rows of feature matrix stored in databse. The variable "count repitition" keeps the record of number of matches with images in databse. After all the images are compared the max of count repitition is taken. And that is the match. Below is the code for matching process. It comapres each row of test image(t) with all the rows of feature matrix stored in databse. The variable "count repitition" keeps the record of number of matches with images in databse. After all the images are compared the max of count repitition is taken. And that is the match.
          %%Matching Process
          count_repetition = zeros(1,size(S.Data,2)); % 
          for t = 1: size( Test_image_Featur_Matrix ,1) % Number of rows in 
          feature matrix of test 
          image
          dita =[];
          n = 1;
          for i = 1: size(S.Data,2)
          for j = 1:size(S.Data(i).Feature_Matrix,2)
          for m = 1:size(S.Data(i).Feature_Matrix(j).Img,1) %Image in Database
          dita(n,1) = norm (Test_image_Featur_Matrix(t,:)- S.Data(i).Feature_Matrix(j).Img(m,:)); % Distance between 
     row of test_image with every row of image
          dita(n,2) = i; %Person
          dita(n,3) = j; %image_number of specific person
          n = n+1;
          end
          end 
          end
          val = min(dita(:,1)); %Row with minimum Euclidean distance
          if val < 20
          in = find(dita(:,1) == val);
          % Threshold 1 will be on value. That if the value is greater
          % than this, then don't count it.
          Result(t).distance = dita(in(1),1); %Minimum_distance
          Result(t).Person_Num = dita(in(1),2); %Person Number
          Result(t).Image_Number = dita(in(1),3); %Image_Number
          count_repetition(Result(t).Person_Num) = count_repetition(Result(t).Person_Num) + 1;
          end
          end
          Matched = max(count_repetition);
          if Matched>(size(Test_image_Featur_Matrix,1)/2)
          ind_match = find (count_repetition == Matched);
          text_fin = ['Authorized Person。 Person is: ' S.Data(ind_match).Name ];
          else
          text_fin = 'No Match。Unauthorized Person。';
          end
          set(handles.text4,'string',text_fin);
          end
How to make retinal identification fast?.
1 Comment
  Jan
      
      
 on 21 Jul 2017
				Any improvement of speed start with identifying the bottleneck using the profiler. It is not worth to optimize code, which uses 1% of the computing time only.
Pre-allocate the output. Letting an array grow iteratively consumes a lot of resources. Search for "pre-allocate" in the forum.
Answers (0)
See Also
Categories
				Find more on GPU Computing in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
