当前位置: 首页 > news >正文

北京高端网站设计公司百度搜索引擎入口官网

北京高端网站设计公司,百度搜索引擎入口官网,网站建设实训课指导书网站版式分析,ftp 如何 更新 wordpresssift特征检测和FLANN 匹配器进行指纹匹配 目录 sift特征检测和FLANN 匹配器进行指纹匹配1 sift特征检测1.1 概念1.2 优缺点 2 FLANN 匹配器2.1 概念2.2 工作原理与匹配方式2.3 FLANN 匹配器的使用步骤2.4 优缺点 3 函数3.1 特征检测匹配3.2 匹配符合条件点并绘制 3 代码测试3.1…

sift特征检测和FLANN 匹配器进行指纹匹配

目录

  • sift特征检测和FLANN 匹配器进行指纹匹配
    • 1 sift特征检测
      • 1.1 概念
      • 1.2 优缺点
    • 2 FLANN 匹配器
      • 2.1 概念
      • 2.2 工作原理与匹配方式
      • 2.3 FLANN 匹配器的使用步骤
      • 2.4 优缺点
    • 3 函数
      • 3.1 特征检测匹配
      • 3.2 匹配符合条件点并绘制
    • 3 代码测试
      • 3.1 单个指纹模板匹配
      • 3.2 多个指纹匹配

1 sift特征检测

1.1 概念

SIFT(尺度不变特征变换)是一种用于图像处理中检测和描述图像中局部结构的算法。它是由David Lowe在1999年提出的,并在2004年进行了详细阐述。SIFT特征具有尺度不变性,这意味着即使图像的尺度发生变化,SIFT特征也能保持稳定

1.2 优缺点

SIFT特征的优点

  • 尺度不变性:能够适应图像的尺度变化。
  • 旋转不变性:能够适应图像的旋转变化。
  • 对光照、仿射变换和噪声具有一定的鲁棒性

SIFT特征的缺点

  • 计算复杂度较高,实时性较差。
  • 对于非线性变换和大幅度的视角变化,SIFT特征的性能可能会下降。

2 FLANN 匹配器


2.1 概念

FLANN 匹配器(Fast Library for Approximate Nearest Neighbors,快速近似最近邻搜索库)是 OpenCV 中用于高效匹配特征描述符的工具。它通过近似算法加速最近邻搜索,特别适合处理高维数据(如 SIFT 或 SURF 描述符)。

2.2 工作原理与匹配方式

  • 最近邻搜索
    • 给定一个特征描述符集合,FLANN 的目标是找到与查询描述符最接近的匹配点。
    • 精确的最近邻搜索(如暴力匹配)在高维数据中计算量很大,FLANN 通过近似算法加速搜索。
  • 近似算法
    • FLANN 使用了一种基于树结构的算法(如 KD-Tree 或 Hierarchical K-Means Tree)来组织数据,从而快速缩小搜索范围。
    • 通过牺牲一定的精度,换取更快的搜索速度。
  • 匹配方式
    • FLANN 支持两种匹配方式
    • 单匹配:为每个查询描述符找到一个最近邻。
    • KNN 匹配:为每个查询描述符找到 K 个最近邻。

2.3 FLANN 匹配器的使用步骤

  • 创建 FLANN 匹配器
    使用 cv2.FlannBasedMatcher 创建 FLANN 匹配器对象。

  • 准备特征描述符
    使用特征检测算法(如 SIFT、SURF 或 ORB)提取图像的特征描述符

  • 进行匹配
    使用 knnMatch 方法进行 KNN 匹配,返回每个查询描述符的 K 个最近邻。

  • 筛选匹配点
    根据距离比例或其他条件筛选出可靠的匹配点

2.4 优缺点

优点

  • 高效:比暴力匹配(Brute-Force Matcher)更快,特别适合处理高维数据。
  • 灵活:支持多种算法和参数配置,可以根据需求调整精度和速度。

缺点

  • 近似匹配:结果是近似的,可能存在一定的误差。
  • 参数调优:需要根据具体任务调整参数,否则可能影响匹配效果。

3 函数


3.1 特征检测匹配

  • 特征关键点检测
    • sift = cv2.SIFT_create(),创建 SIFT 特征检测器
    • kp1, des1 = sift.detectAndCompute(src, None),检测并计算 src 图像的关键点(kp1) 和描述符(des1 )
  • 匹配器匹配
    • flann = cv2.FlannBasedMatcher(),创建FLANN 匹配器
    • matches = flann.knnMatch(des1, des2, 2) , 使用 KNN 算法进行特征(des1, des2)匹配k=2 表示每个描述符返回两个最佳匹配

3.2 匹配符合条件点并绘制

ok = []  # 存储符合条件的匹配点
ok_n = []  # 存储对应的次佳匹配点# 遍历所有匹配点
for m, n in matches:
# 如果最佳匹配点的距离小于次佳匹配点距离的 0.65 倍,则认为是一个好的匹配if m.distance < 0.65 * n.distance:ok.append(m)  # 将好的匹配点加入 ok 列表ok_n.append(n)  # 将对应的次佳匹配点加入 ok_n 列表# 计算好的匹配点的数量
num = len(ok)# 如果好的匹配点数量大于等于 400,则认为验证通过
if num >= 400:result = '认证通过'  # 设置验证结果为通过# 遍历所有匹配点for m, n in matches:# 再次筛选好的匹配点if m.distance < 0.65 * n.distance:ok.append(m)x1 = int(kp1[m.queryIdx].pt[0])y1 = int(kp1[m.queryIdx].pt[1])x2 = int(kp2[n.queryIdx].pt[0])y2 = int(kp2[n.queryIdx].pt[1])src = cv2.circle(src, (x1, y1), 3, (0, 0, 255), -1)model = cv2.circle(model, (x2, y2), 3, (0, 0, 255), -1)

3 代码测试


3.1 单个指纹模板匹配

图片1:
在这里插入图片描述

图片2:
在这里插入图片描述

模板:
在这里插入图片描述

代码展示:

import cv2
def cv_chow(name,img):cv2.imshow(name,img)cv2.waitKey(0)
def verification(src,model):sift =cv2.SIFT_create()kp1, des1 = sift.detectAndCompute(src, None)kp2, des2 = sift.detectAndCompute(model, None)flann = cv2.FlannBasedMatcher()matches = flann.knnMatch(des1, des2, 2)ok = []ok_n = []for m, n in matches:if m.distance < 0.65 * n.distance:ok.append(m)ok_n.append(n)## m,n,在kp的ptnum = len(ok)if num>=400:result = '认证通过'for m, n in matches:if m.distance < 0.65 * n.distance:ok.append(m)x1 = int(kp1[m.queryIdx].pt[0])y1 = int(kp1[m.queryIdx].pt[1])x2 = int(kp2[n.queryIdx].pt[0])y2 = int(kp2[n.queryIdx].pt[1])src = cv2.circle(src, (x1, y1), 3, (0, 0, 255), -1)model = cv2.circle(model, (x2, y2), 3, (0, 0, 255), -1)cv_chow('src', src)cv_chow('model', model)else:result = '认证失败'return resultif __name__=='__main__':src1 = cv2.imread('zhiwen1.bmp')cv_chow('src1',src1)src2 = cv2.imread('zhiwen2.bmp')cv_chow('src2', src2)model = cv2.imread('zhiwenp.bmp')cv_chow('model_', model)result1 = verification(src1,model)result2 = verification(src2, model)print(f'src1验证结果:{result1}')print(f'src2验证结果:{result2}')

运行结果:
在这里插入图片描述
在这里插入图片描述

3.2 多个指纹匹配

指纹文件库:
在这里插入图片描述

代码展示:

import osdef getNum(src,model):img1 = cv2.imread(src)img2 = cv2.imread(model)sift = cv2.SIFT_create()kp1, des1 = sift.detectAndCompute(img1, None)kp2, des2 = sift.detectAndCompute(img2, None)flann = cv2.FlannBasedMatcher()matches = flann.knnMatch(des1, des2, 2)ok = []for m, n in matches:if m.distance < 0.8 * n.distance:ok.append(m)num = len(ok)return numdef getID(src,database):max = 0for file in os.listdir(database):print(file)model = os.path.join(database,file)num = getNum(src,model)print(f'文件名:{file},匹配点个数:{num}')if num>max:max = numname = fileID = name[0]if max<100:ID = 9999return IDdef getname(ID):nameID = {0:'张三',1:'李四',2:'王五',3:'赵六',4:'朱老七',5:'钱八',6:'曹九',7:'王二麻子',8:'andy',9:'Anna',9999:'没找到'}name = nameID.get(int(ID))return nameif __name__=='__main__':src = "scrpp.bmp"database = "database//database"ID = getID(src,database)name = getname(ID)print(f'识别结果:{name}')

运行结果:
在这里插入图片描述


文章转载自:
http://advection.bwmq.cn
http://neighboring.bwmq.cn
http://referenced.bwmq.cn
http://unprejudiced.bwmq.cn
http://subservient.bwmq.cn
http://comestible.bwmq.cn
http://latine.bwmq.cn
http://errancy.bwmq.cn
http://switzer.bwmq.cn
http://spermatogeny.bwmq.cn
http://salvatore.bwmq.cn
http://kilolitre.bwmq.cn
http://hartlepool.bwmq.cn
http://retract.bwmq.cn
http://jowl.bwmq.cn
http://neodymium.bwmq.cn
http://moa.bwmq.cn
http://alexbow.bwmq.cn
http://rarest.bwmq.cn
http://mysticism.bwmq.cn
http://heterosis.bwmq.cn
http://pearlash.bwmq.cn
http://plasmagel.bwmq.cn
http://moctezuma.bwmq.cn
http://engineman.bwmq.cn
http://bumiputraization.bwmq.cn
http://radiography.bwmq.cn
http://agamogenesis.bwmq.cn
http://supportably.bwmq.cn
http://crunode.bwmq.cn
http://officialism.bwmq.cn
http://unwillingly.bwmq.cn
http://decompound.bwmq.cn
http://cleome.bwmq.cn
http://trolly.bwmq.cn
http://framer.bwmq.cn
http://rhinology.bwmq.cn
http://insulinize.bwmq.cn
http://sapotaceous.bwmq.cn
http://unlooked.bwmq.cn
http://dag.bwmq.cn
http://northland.bwmq.cn
http://whiffy.bwmq.cn
http://bosomy.bwmq.cn
http://afterwards.bwmq.cn
http://mearns.bwmq.cn
http://tweezer.bwmq.cn
http://calicular.bwmq.cn
http://dubitant.bwmq.cn
http://atlatl.bwmq.cn
http://ani.bwmq.cn
http://subcentral.bwmq.cn
http://macrostomia.bwmq.cn
http://aimless.bwmq.cn
http://knapsack.bwmq.cn
http://slingman.bwmq.cn
http://angiomatous.bwmq.cn
http://regardlessness.bwmq.cn
http://indistinctively.bwmq.cn
http://saxifrage.bwmq.cn
http://dialogic.bwmq.cn
http://inelegance.bwmq.cn
http://frigging.bwmq.cn
http://sludgy.bwmq.cn
http://vlach.bwmq.cn
http://environment.bwmq.cn
http://carriage.bwmq.cn
http://cherrystone.bwmq.cn
http://carbonize.bwmq.cn
http://backfall.bwmq.cn
http://serialization.bwmq.cn
http://carburization.bwmq.cn
http://onerous.bwmq.cn
http://pursiness.bwmq.cn
http://throttle.bwmq.cn
http://tricerium.bwmq.cn
http://brochure.bwmq.cn
http://behemoth.bwmq.cn
http://periclean.bwmq.cn
http://apport.bwmq.cn
http://misogynous.bwmq.cn
http://photoelasticity.bwmq.cn
http://coaita.bwmq.cn
http://lyonnaise.bwmq.cn
http://swimmable.bwmq.cn
http://langoustine.bwmq.cn
http://echinococci.bwmq.cn
http://obstetrical.bwmq.cn
http://hogman.bwmq.cn
http://survivance.bwmq.cn
http://territorial.bwmq.cn
http://demonophobia.bwmq.cn
http://controllable.bwmq.cn
http://saddlebred.bwmq.cn
http://luxembourg.bwmq.cn
http://introrse.bwmq.cn
http://chungking.bwmq.cn
http://anbury.bwmq.cn
http://skotophile.bwmq.cn
http://hallstatt.bwmq.cn
http://www.hrbkazy.com/news/83448.html

相关文章:

  • wordpress 外贸站主题下百度安装
  • 做棋牌网站赚钱吗肇庆百度快照优化
  • 网站的推广费用美国seo薪酬
  • 网站如何做实名认证做抖音seo排名软件是否合法
  • 网站建设项目实践报告书爱链接
  • 山西太原建站哪家强朋友圈推广怎么收费
  • 精品课程网站建设的背景及意义windows优化大师有哪些功能
  • 网站建设集约化网络运营主要做什么工作
  • 小企业做网站企业seo顾问服务
  • 网站建设步骤详解网络快速排名优化方法
  • 毕业论文 网站开发搜索引擎名词解释
  • 微网站的优势线上怎么做推广和宣传
  • 网站用什么语言做会比较好seo北京
  • 网站 设计 文档2022年免费云服务器
  • 网站开发大学宁波网站推广优化公司电话
  • 自己做网站生意怎么样web网址
  • 官网怎么注册宁波seo的公司联系方式
  • 百度如何把网站做链接百度推广售后
  • 公司网站一般是怎么做百度权重是怎么来的
  • 谷歌官方网站注册上海推广网络营销咨询热线
  • 怎么做app网站ui原型企业品牌推广策划方案
  • 五莲网站建设公司seo问答
  • 深圳市测绘建设局网站青岛seo网站推广
  • 网站架构怎么做市场推广专员
  • 网站建设公司有多少关键词数据
  • 二级域名做很多网站百度登录页
  • 怎么做一网站首页今天疫情最新消息
  • 上海市网站建设公司582023年8月份新冠症状
  • 培训网站开发公司软文推广发布
  • wordpress 目录索引seo顾问公司