I need help with iris comparing.
I've already segment and normalize my iris images. Now I want to extraxt features, add it to database, or just simply in list of feature vector, and then compare it with other features vector. I want my application to decide if such iris is already in database or not. Of course images are diffenent, they were done in different light, angle etc.
I thought that Gabor filter would be helpful, so I it to 12 different parameters values:
Mat kernel = Imgproc.getGaborKernel(new Size(25, 25), sigma, theta, lambda, gamma, psi, CvType.CV_64F);
Scalar sum = Core.sumElems(kernel); //kerner normalization
Core.divide(kernel, sum, kernel);
Imgproc.filter2D(floatSource, dest, CvType.CV_64F, kernel);
Then I compute 12 Hamming distances using this function:
dist_ham = Core.norm(it1.next(), it2.next(), Core.NORM_HAMMING);
And get the average.
And... it does not work. Hamming distanse is similar when I am comparing 2 different images of the same iris or 2 different irises. How can I make my algorithm better? Maybe I should use some implemented in openCV mathers to obtain good results? For me it don't matter which algorithm I will use, I just want have good results. And I'm a little begginer.
Some sample pictures: Person one img1: Normalized iris for person one img1:
Person one img2: Normalized iris for person one img2:
Hamming distance for this example is about 29000 (and this is the lowest distance i got, in the most part i got about 30000 - 31000 for the same person iris) Hamming distance for different persons is about 31000 (depends on tested image)
I was successful in doing this just by implementing the algorithm/math in Daugman's paper, etc. My suggestion is to actually visualize the gabor kernels to find the meaningful combination of parameters such as sigma and lambda. I didn't use OpenCV's GetGaborKernel but used a hand-crafted one.