文章目录
- 指纹验证
- 1. 验证原理
- 2. 读取图片
- 3. 计算特征匹配点
- 总结
指纹验证
指纹验证基于人类指纹的独特性和稳定性。每个人的指纹在图案、断点和交叉点上各不相同,这种唯一性和终生不变性使得指纹成为身份验证的可靠手段。指纹识别技术通过采集和分析指纹图像,提取指纹特征,并与预先存储的指纹特征进行比对,从而确认身份。
1. 验证原理
通过对比两个指纹之间的相似度,来确认两者是否匹配。其中,确认相似度是通过计算两个指纹之间的关键特征点数量,若是关键特征点数量匹配超过某个设定值,我们则认为他们是一个人的。
2. 读取图片
import cv2
def cv_show(name,img):cv2.imshow(name,img)cv2.waitKey(0)
if __name__ == '__main__':src1 = cv2.imread("zw1.bmp")cv_show("zw1",src1)src2 = cv2.imread("zw2.bmp")cv_show("zw2", src2)model = cv2.imread("model.bmp")cv_show("model",model)
3. 计算特征匹配点
通过SIFT特征提取方法,计算两者之间的特征匹配点数量,若是数量达到设定值(此处设定为500),则认证通过,反之,认证失败。
def verification(src,model):# 创建SIFT特征提取器sift = cv2.SIFT_create()# 检测关键点和计算描述符(特征向量) 源图像kp1,des1 = sift.detectAndCompute(src,None)# 检测关键点和计算描述符 模板图像kp2, des2 = sift.detectAndCompute(model, None)# 创建FLANN匹配器flann = cv2.FlannBasedMatcher()# 使用K近邻匹配(des1中的每个描述符与des2中的最近两个描述符进行匹配)matches = flann.knnMatch(des1,des2,k=2)ok = []for m,n in matches:# 根据Lowe's比率测试,选择最佳匹配if m.distance < 0.8 * n.distance:ok.append(m)# 统计通过筛选的匹配数量num = len(ok)if num >= 500:result = "认证通过"else:result = "认证失败"return result
result1 = verification(src1,model)
result2 = verification(src2,model)
print("src1验证结果为:",result1)
print("src2验证结果为:", result2)
----------------
src1验证结果为: 认证通过
src2验证结果为: 认证失败
总结
本篇介绍了,通过使用SIFT特征特征提取方法,统计两者之间的特征匹配点数量,来验证指纹是否匹配。