首页 > 编程语言 >sift算法实现指纹验证

sift算法实现指纹验证

时间:2024-06-02 20:30:28浏览次数:25  
标签:匹配 cv2 算法 指纹 src2 sift src1 model 模板

  本代码将使用SIFT特征检测和FLANN匹配器来比较两枚指纹是否与模板指纹匹配。

模板指纹

需要匹配的指纹

1.定义显示图像的函数

import cv2

def cv_show(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)

2.定义计算匹配点个数的函数

def verification(src, model):
    sift = cv2.xfeatures2d.SIFT_create() # 创建一个SIFT检测器对象,用于检测图像中的关键点
    kp1,des1 = sift.detectAndCompute(src, None)
    kp2,des2 = sift.detectAndCompute(model, None)
# 对src和model图像分别检测关键点和计算描述符。关键点存储在kp1和kp2中,描述符存储在des1和des2中

    flann = cv2.FlannBasedMatcher() # 创建一个FLANN匹配器对象,用于高效地匹配描述符
    matches = flann.knnMatch(des1, des2, k = 2) 
# 使用FLANN匹配器对des1和des2进行K近邻匹配,k=2表示为每个描述符找到两个最近邻

    ok = []
    for m,n in matches:
        if m.distance < 0.8 * n.distance:
            ok.append(m)
#通过距离比率测试筛选匹配点,只有当最佳匹配的距离小于次佳匹配距离的0.8倍时,才认为是一个良好的匹配,并将这些匹配存储在列表ok中

    num = len(ok)
    if num >= 500:
        result = "认证通过"
    else:
        result = "认证失败"
# 计算好的匹配点的数量,并根据数量是否大于等于500来判断认证是否通过
    return result

3.调用函数

if __name__ == "__main__":
    src1 = cv2.imread('src1.bmp')
    cv_show('src1', src1)
    src2 = cv2.imread('src2.bmp')
    cv_show('src2', src2)
    model = cv2.imread('model.bmp')
    cv_show('model', model)

    result1 = verification(src1, model)
    print('模板1的结果:', result1)
    result2 = verification(src2, model)
    print('模板2的结果:', result2)
# 对每张源图像src1和src2与模板图像model调用verification函数,打印出匹配结果

4.运行结果

标签:匹配,cv2,算法,指纹,src2,sift,src1,model,模板
From: https://blog.csdn.net/2301_77444219/article/details/139396307

相关文章

  • 代码随想录算法训练营第二十天 | 654.最大二叉树 617.合并二叉树 二叉搜索树
    654.最大二叉树题目链接文章讲解视频讲解classSolution{public:TreeNode*constructMaximumBinaryTree(vector<int>&nums){returninorderTraversal(nums,0,nums.size()-1);}TreeNode*inorderTraversal(vector<int>&nums,intbegi......
  • python自然语言处理实战:核心技术与算法 (涂铭,刘祥,刘树春)高清电子版pdf下载百度云
    书:pan.baidu.com/s/1rOoEvizAhkQyF8xScVh51w?pwd=8onw提取码:8onw我的阅读笔记:Python基础:为了进行NLP任务,首先需要掌握Python编程语言的基础知识。文本预处理:这包括文本清洗(如去除标点、停用词、特殊字符等)、文本分词(如中文分词)、文本向量化(如词袋模型、TF-IDF、Word2Vec等)。......
  • 囚徒5.3_SSA_BP算法
    麻雀算法加上bp网络importnumpyasnpimporttensorflowastffromtensorflow.keras.datasetsimportmnistfromtensorflow.keras.utilsimportto_categoricalfromtensorflow.keras.modelsimportModelfromtensorflow.keras.layersimportInput,Conv2D,MaxPoolin......
  • 算法金 | 机器学习模型评价、模型与算法选择(综述)
    大侠幸会,在下全网同名[算法金]0基础转AI上岸,多个算法赛Top[日更万日,让更多人享受智能乐趣][SebastianRaschka2018]ModelEvaluation,ModelSelection,andAlgorithmSelectioninMachineLearning,https://arxiv.org/abs/1811.12808摘要:本文主要讨论了模型评估......
  • 开源代码分享(32)-基于改进多目标灰狼算法的冷热电联供型微电网运行优化
    参考文献:[1]戚艳,尚学军,聂靖宇,等.基于改进多目标灰狼算法的冷热电联供型微电网运行优化[J].电测与仪表,2022,59(06):12-19+52.DOI:10.19753/j.issn1001-1390.2022.06.002.1.问题背景        针对冷热电联供型微电网运行调度的优化问题,为实现节能减排的目标,以微电......
  • [排序算法]冒泡排序+快速排序全梳理!
    目录前言一、冒泡排序基本思路图解冒泡代码实现代码优化冒泡排序的特性总结:二、快速排序1.hoare版本图解演示代码实现特性总结2.挖坑法基本思路图解过程代码实现特性总结3.前后指针法基本步骤图解过程代码实现特性总结4.快速排序的优化三数取中小区间优化5.非递归实......
  • 机器学习笔记(1): 梯度下降算法
    本文作为我看过#吴恩达机器学习系列课程的产物,并不适用于一无所知的学习者。在机器学习中,有三个很重要的函数:\(h_\theta(x)\)表示预测数据\(J(\theta)\)代价函数,表示预测和实际的差距,\(J(\theta)\ge0\),且\(J(\theta)\)值越小,差距越小。\(\frac{\delta}{\delta\t......
  • 【vue源码】虚拟DOM和diff算法
    虚拟DOM与AST抽象语法树的区别虚拟DOM是表示页面状态的JavaScript对象,(虚拟DOM只有实现diff算法)而AST是表示代码语法结构的树形数据结构。虚拟DOM通常用于优化页面渲染性能,而AST通常用于进行代码静态分析、代码转换等操作。(AST主要执行compiler编译)什么是虚拟DOM?用JavaSc......
  • LCS算法 java
    最优子结构(OptimalSubstructure)最优子结构性质是指问题的最优解可以由其子问题的最优解构造而成。换句话说,如果一个问题可以分解成若干子问题,并且这些子问题的最优解能够组合成原问题的最优解,那么这个问题就具有最优子结构性质。最长公共子序列(LCS)最长公共子序列问题是一个......
  • 【会议征稿,中国算力大会分会】2024算法、高性能计算与人工智能国际学术会议(AHPCAI 202
    2024算法、高性能计算与人工智能国际学术会议(AHPCAI2024)定于2024年6月21-23日在中国郑州举行。会议主要围绕算法、高性能计算与人工智能等研究领域展开讨论。会议旨在为从事算法、高性能计算与人工智能研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和......