How to make retinal identification fast?
6 views (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 Image Processing Toolbox 快速入门 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!