OpenCV4特征匹配

news2024/11/15 9:23:32

目录

    • 一.特征检测的基本概念
    • 二.Harris角点检测
    • 三.Shi-Tomasi角点检测
    • 四.SIFT关键点检测
    • 五.SURF特征检测(属于opencv_contrib)
    • 六.ORB特征检测
    • 七.特征匹配方法
    • 八.FLANN特征匹配
  • 流程梳理

一.特征检测的基本概念

OpenCV特征的场景

  • 1.图像搜索,如以图搜图
  • 2.拼图游戏
  • 3.图像拼接,将两张有关联的图拼接到一起

特征点匹配就是在不同的图像中寻找同一个物体的同一个特征点。因为每个特征点都具有标志着唯一身份和特点的描述子,因此特征点匹配其实就是在两个图像中寻找具有相似描述子的两个特征点。根据描述子特点的不同,寻找两个相似描述子的方法也不尽相同,总体上可以总结为两类:
第一类是计算两个描述子之间的欧氏距离,这种匹配方式的特征点有SIFT特征点、SURF特征点等;
第二类是计算两个描述子之间的汉明距离,这种匹配方式的特征点有ORB特征点、BRJSK特征点等。

角点

  • 1.在特征中最重要的是角点
  • 2.灰度梯度的最大值对应的像素
  • 3.两条线的交点

二.Harris角点检测

Harris角点检测API

cornerHarris(img, dst, blockSize, kernel_size, k)
- blockSize: 检测窗口大小
- kernel_size: Sobel的卷积核
- k: 权重系数,经验值,一般取0.02~0.04之间

三.Shi-Tomasi角点检测

  • 1.Shi-Tomasi是Harris角点检测的改进
  • 2.Harris角点检测算法的稳定性和k有关,而k是一个经验值

四.SIFT关键点检测

SIFT(Scale-Invariant Feature Transform)

SIFT出现的原因
虽然Harris角点具有旋转不变的特征,但缩放后,原来的角点有可能就检测不到了

使用SIFT的步骤

  • 1.创建SIFT对象
  • 2.进行检测
  • 3.绘制关键点,drawKeypoints

五.SURF特征检测(属于opencv_contrib)

SURF(Speeded-Up Robust Features)

SIFT最大的问题是速度慢,因此才有了SURF

六.ORB特征检测

ORB(Oriented FAST and Rotated BRIEF)

ORB可以做到实时监测

七.特征匹配方法

模板匹配:模板匹配是一种最原始、最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配问题。它是图像处理中最基本、最常用的匹配方法。模板匹配具有自身的局限性,主要表现在它只能进行平行移动,若原图像中的匹配目标发生旋转或大小变化,该算法无效
特征匹配:所谓特征匹配FBM(Feature-Based Matching),就是指将从影像中提取的特征作为共轭实体,而将所提特征属性或描述参数(实际上是特征的特征,也可以认为是影像的特征)作为匹配实体,通过计算匹配实体之间的相似性测度以实现共轭实体配准的影像匹配方法。在匹配目标发生旋转或大小变化时,该算法依旧有效

  • 1.BF(Brute-Force):暴力特征匹配方法
  • 2.FLANN:最快邻近区特征匹配方法

类似于VisionMaster中的高精度匹配和快速匹配

暴力特征匹配原理
它使用第一组中的每个特征的描述子,与第二组中的所有特征描述子进行匹配,计算它们之间的差距,然后将最接近的一个匹配返回

OpenCV特征匹配步骤

  • 1.创建匹配器:BFMatcher(normType, crossCheck)
  • 2.进行特征匹配:bf.match(des1, des2)
  • 3.绘制匹配点:drawMatches()

八.FLANN特征匹配

FLANN优缺点

  • 1.在进行批量特征匹配时,FLANN速度更快
  • 2.由于它使用的是邻近近似值,所以精度较差

流程梳理

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2058041.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“论软件的可靠性评价”写作框架,软考高级,系统架构设计师

论文真题 软件可靠性评价是软件可靠性活动的重要组成部分,既适用于软件开发过程,也可针对最终软件系统。在软件开发过程中使用软件可靠性评价,可以使用软件可靠性模型,估计软件当前的可靠性,以确认是否可以终止测试并…

数据结构与算法(算法篇)

学数据结构与算法不是仅仅学算法本身(经验),而是学习思维(解决问题的能力)。 数据结构与算法(算法篇) 1、算法的性能分析1.1 时间复杂度1.2 空间复杂度1.3 小结 2、高精度2.1 高精度加法2.2 高精度减法2.3…

【鸿蒙学习】HarmonyOS应用开发者高级认证 - 一次开发,多端部署

一、学习目的 掌握鸿蒙的核心概念和端云一体化开发、数据、网络、媒体、并发、分布式、多设备协同等关键技术能力,具备独立设计和开发鸿蒙应用能力。 二、总体介绍 HarmonyOS 系统面向多终端提供了“一次开发,多端部署”(后文中简称为“一…

win双击运行jar文件

常规运行:java -jar xxx.jar 方法一、 1、jar包右键属性 2、更改打开方式,设置为默认 选择打开方式使用 javaw.exe C:\Program Files\Java\jdk1.8.0_201\bin\javaw.exe 3、修改注册表 winr 中 regedit 打开注册表 计算机\HKEY_CLASSES_ROOT\Appli…

同态加密及HElib

一、实验原理 1.同态加密概念 同态加密是密码学领域自1978年以来的经典难题,也是实现数据隐私计算的关键技术,在云计算、区块链、隐私计算等领域均存在着广泛的应用需求和一些可行的应用方案。 同态加密(Homomorphic Encryption)是很早之前密码学界就提出来的一个Open Pr…

Java Web —— 第七天(Mybatis案例1)

环境搭建 准备数据库表(dept、emp) -- 部门管理 create table dept(id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称,create_time datetime not null comment 创建时间,update_time datetime not null commen…

Ubuntu24.04安装MYSQL8.0

更新源 sudo apt update安装mysql服务 默认安装最新版本 sudo apt install mysql-server检查安装版本 mysql --version检查mysql运行状态 systemctl status mysql开启远程访问,在ubuntu下mysql默认是只允许本地访问 sudo vim /etc/mysql/mysql.conf.d/mysqld.…

jdbc连接池之C3P0

C3P0:JDBC 连接池概述 C3P0 是一个开源的 JDBC 连接池库,用于管理数据库连接的获取与释放。它提供了连接池的自动管理和高效复用,从而减少了创建数据库连接所需的时间和资源消耗。C3P0 的核心功能是优化和管理数据库连接,以提高应…

python : Requests请求库入门使用指南 + 简单爬取豆瓣影评

Requests 是一个用于发送 HTTP 请求的简单易用的 Python 库。它能够处理多种 HTTP 请求方法,如 GET、POST、PUT、DELETE 等,并简化了 HTTP 请求流程。对于想要进行网络爬虫或 API 调用的开发者来说,Requests 是一个非常有用的工具。在今天的博…

如何取消Excel表格的“打开密码”

在日常工作和学习中,Excel表格作为一种强大的数据处理工具,被广泛应用。而我们为了保护excel文件中的数据,会为Excel设置打开密码,但随着时间和需求的变化,当我们需要取消密码保护时要怎么做呢? 方法一&…

【前端基础篇】HTML零基础速通

文章目录 前言HTML结构认识HTML标签 HTML文件基本结构标签层次结构 快速生成代码框架HTML常见标签注释标签标题标签段落标签换行标签格式化标签图片标签超链接标签表格标签基本使用合并单元格 列表标签表单标签form标签input标签 label标签select标签textarea标签无语义标签 HT…

ESP RainMaker OTA 自动签名功能的安全启动

【如果您之前有关注乐鑫的博客和新闻,那么应该对 ESP RainMaker 及其各项功能有所了解。如果不曾关注,建议先查看相关信息,知晓本文背景。】 在物联网系统的建构中,安全性是一项核心要素。乐鑫科技对系统安全给予了极高的重视。ES…

AgileTC测试用例管理平台的基本使用

1. 背景 使用企业微信在线文档对测试用例进行管理,存在以下问题,比如新建版本,每次都要设置下执行测试用例那一栏,要提供通过、失败、阻塞等选项,操作异常繁琐,比如版本管理问题,多个版本之后&a…

【企业高性能web服务器】

目录 一、Nginx 介绍1、 Nginx 功能介绍2、基础特性3、Nginx 模块介绍 二、Nginx 编译安装1、编写systemd服务 三、平滑升级和回滚1、平滑升级的流程2、升级2、回滚 四、 Nginx 核心配置详解1、实现 nginx 的高并发配置2、Nginx 账户认证功能3、nginx作为下载服务器配置 五、re…

为了改善您的网络安全状况,请专注于数据

有效地融合、管理和使用企业数据是一项艰巨的任务。企业拥有大量的数据,但这些数据存在于各自为政的系统和应用程序中,需要高技能的数据科学家进行大量的手动操作。工程师和分析师从所有数据中提取价值。 数据准备是一项基本且必要的任务,但…

IOS 11 通用Base控制器封装

整体规划 BaseController:把viewDidLoad逻辑拆分为三个方法,方便管理。 BaseCommonController:不同项目可以复用的逻辑,例如:设置背景颜色方法等 BaseLogicController:本项目的通用逻辑,主要…

Spring的核心启动流程

前言 Spring启动时候整个入口是这么一个方法 AbstractApplicationContext#refresh 总共有12个方法,也就是启动时的核心步骤 AbstractApplicationContext有众多实现,这里我选择SpringBoot Web应用默认的实现来讲 AnnotationConfigServletWebServerAppli…

MySQL系列—MySQL编译安装常见问题(或缺少依赖)及解决方法,MySQL 编译安装时需要安装的依赖(全)

MySQL系列—MySQL编译安装常见问题(或缺少依赖)及解决方法 MySQL 编译安装时需要安装的依赖(全): yum install -y cmake yum install ncurses ncurses-devel -y yum install -y libarchive yum install -y gcc gcc-c yum install -y openssl openssl-devel yum inst…

Python.NET:打开Python与.NET世界互通的大门

Python.NET 是一个强大的工具,它为 Python 程序员提供了一种与 .NET 公共语言运行时 (CLR) 无缝集成的途径。它就像一座桥梁,将 Python 的灵活性与 .NET 的强大功能连接起来,为开发者提供了前所未有的自由和可能性。 1. Python.NET 的核心价值…

内核代码中的路障宏

路障宏包含: mb()/rmb()/wmb barrier() __asm__:GCC关键字,用来声明一个内联汇编表达式。 __volatile__:告诉编译器,不要优化后面表达式中的内联汇编代码。 内联汇编表达式中的(“memory”):告诉GCC如下两个条件 If your assembler ins…