我需要虹膜比较方面的帮助。
我已经对虹膜图像进行了分割和标准化。现在,我要提取特征,将其添加到数据库中,或者仅将其添加到特征 vector 列表中,然后将其与其他特征 vector 进行比较。我希望我的应用程序确定这种虹膜是否已在数据库中。当然图像是不同的,它们是在不同的光线, Angular 等条件下完成的。
我认为Gabor过滤器会有所帮助,因此我将它设置为12个不同的参数值:
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);
然后,我使用此函数计算12个汉明距离:
dist_ham = Core.norm(it1.next(), it2.next(), Core.NORM_HAMMING);
并获得平均值。
而且...它不起作用。当我比较两个相同虹膜或两个不同虹膜的不同图像时,汉明距离相似。
如何改善算法?也许我应该使用一些在openCV数学器中实现的方法以获得良好的结果?对我来说,使用哪种算法都没有关系,我只想取得好的结果。而且我有点初学者。
一些示例图片:
第一个人img1:
人一img1的标准化虹膜:
第一个人img2:
人img2的标准化虹膜:
对于此示例,汉明距离约为29000(这是我得到的最低距离,对于同一个人虹膜,大部分情况下,我得到的距离为30000-31000)
不同人的汉明距离约为31000(取决于测试图像)
最佳答案
我仅通过实现Daugman的论文等中的算法/数学就成功地做到了这一点。我的建议是实际可视化gabor内核以找到有意义的参数组合,例如sigma和lambda。我没有使用OpenCV的GetGaborKernel,而是使用了手工制作的。