文章目录

  • Brute-Force暴力匹配
  • 随机抽样一致算法

Brute-Force暴力匹配

  • 我们准备两张图像,我们想知道图像中有哪些关键点是比较类似的。需要对两张图像的特征点进行匹配。暴力匹配就是对两张图像的特征向量进行比对,最接近的也就是最相似的。我们可以通过欧式距离来实现向量相似的比对,默认使用归一化的欧氏距离。
  • 这里依旧使用之前所讲的sift算法,代码如下:
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#读取图像
img1 = cv2.imread('box.png', 0)
img2 = cv2.imread('box_in_scene.png', 0)
#使用sift算法,计算特征向量与特征点
sift = cv2.xfeatures2d.SIFT_create()
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)
# crossCheck表示两个特征点要互相匹,例如A中的第i个特征点与B中的第j个特征点最近的,并且B中的第j个特征点到A中的第i个特征点也是
#NORM_L2: 归一化数组的(欧几里德距离),如果其他特征计算方法需要考虑不同的匹配计算方式
bf = cv2.BFMatcher(crossCheck=True)
  • 一对一匹配
matches = bf.match(des1, des2)
#对点的距离的排序
matches = sorted(matches, key=lambda x: x.distance)
img3 = cv2.drawMatches(img1, kp1, img2, kp2, matches[:10], None,flags=2)
#图片展示
cv_show('img3',img3)

  • k对最佳匹配(1对多)
bf = cv2.BFMatcher()
#添加knn算法
matches = bf.knnMatch(des1, des2, k=2)
good = []
for m, n in matches:if m.distance < 0.75 * n.distance:good.append([m])
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=2)
#图片展示
cv_show('img3',img3)

  • 如果需要更快速完成操作,可以尝试使用cv2.FlannBasedMatcher。

随机抽样一致算法

  • 随机抽样一致算法(Random sample consensus),也叫作RANSAC算法。在上节中使用KNN展示结果时会出现一些我们不需要的边界点。我们需要把这些局外点去掉。

  • 通常来说使用的KNN最小二乘法,会受到一些局外点的干扰,导致最终结果没有那么好,这是我们会使用RANSAC算法,不会受到局外点的干扰,归一化之后的结果要比最小二乘法效果好。如下图所示:

  • 选择初始样本点进行拟合,给定一个容忍范围,不断进行迭代

  • 每一次拟合后,容差范围内都有对应的数据点数,找出数据点个数最多的情况,就是最终的拟合结果。

  • 单应性矩阵
    OpenCV中过滤掉误匹配对采用RANSAC算法寻找一个最佳单应性矩阵H。矩阵为3x3即可。RANSAC目的是找到最优的参数矩阵使得满足该矩阵的数据点个数最多,通常最后一个参数设置为h33=1来进行归一化操作,其余会有8个未知参数,我们需要构建8个线性方程来进行求解。对应到点位置信息上,1组点对可以列出2个方程,则至少需要4组匹配点对。

OpenCV图像特征匹配相关推荐

  1. Python+OpenCV:特征匹配(Feature Matching)

    Python+OpenCV:特征匹配(Feature Matching) Basics of Brute-Force Matcher Brute-Force matcher is simple. It ...

  2. 光流 | 图像特征匹配:特征光流与角点特征

    /********************************************************** github:https://github.com/MichaelBeechan ...

  3. OpenCV + CPP 系列(卌二)图像特征匹配( KAZE/AKAZE)

    文章目录 一.KAZE简介 二.代码演示 特征检测效果对比 演示匹配 一.KAZE简介 ECCV2012中出现了一种比SIFT更稳定的特征检测算法KAZE ([1]).KAZE的取名是为了纪念尺度空间 ...

  4. OpenCV + CPP 系列(卌一)图像特征匹配( FLANN 匹配)

    文章目录 一.FLANN简介 演示SURF--Flann 二.单应性矩阵 一.FLANN简介 FLANN库全称是Fast Library for Approximate Nearest Neighbo ...

  5. OpenCV—python 模板匹配与图像特征匹配

    文章目录 一.理论介绍与算法 二.算法代码 单目标匹配 多目标匹配 三 多尺度模板匹配 一.理论介绍与算法 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个 ...

  6. opencv4 图像特征匹配_概述 | 全景图像拼接技术全解析

    点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 前言 图像/视频拼接的主要目的是为了解决相机视野(FOV-Field Of View)限制,生成更宽的FOV图 ...

  7. 图像处理之图像特征匹配

    在本章中, - 我们将看到如何将一个图像中的特征与其他图像进行匹配. - 我们将在OpenCV中使用Brute-Force匹配器和FLANN匹配器 一.Brute-Force匹配器 它使用第一组中一个 ...

  8. opencv4 图像特征匹配_openCV - 图像特征匹配

    目标 本章节中 我们将实现如何不同图像之间匹配特征. 将使用两种匹配器,openCV提供了Brute-Force 和 FLANN Brute-Force 匹配器的基本原理 Brute-Force匹配器 ...

  9. Opencv图像特征点提取(

    目录 特征点分类 1 ORB ①特征点检测 ②计算特征描述 2 SIFT 1 SIFT特征检测的步骤 ①.在DOG尺度空间中获取极值点,即关键点. ②.特征点方向估计 ③生成特征描述 ④.代码实现 3 ...

最新文章

  1. Ubuntu 查看磁盘空间大小命令转
  2. nginx css 304 导致图片丢失_Nginx 从入门到实战
  3. 华为发布面向2025十大趋势
  4. 动态规划 BZOJ1584 [Usaco2009 Mar] Cleaning Up 打扫卫生
  5. CodeForces509F Progress Monitoring
  6. 解决服务器上 w3wp.exe 和 sqlservr.exe 的内存占用率居高不下的方案
  7. 网络 http服务器-v1-多线程版本
  8. C++ STL vector的操作
  9. c++opencv显示中文_图像处理入门 100 题,有人把它翻译成了中文版!
  10. 以太网头数据和802.3的区别
  11. [技巧心得] 嵌套选择器优先级
  12. 基于python 爬虫_基于python的爬虫(一)
  13. 如何在电脑表格中用计算机,如何制表(如何使用电脑制作表格)
  14. c语言延时跑马灯实验报告,跑马灯实验C语言程序
  15. ViewPage实现一屏多页面显示(进阶版)
  16. 干货 | 系统润滑,定时清理内存了解一下
  17. perfmon 端口修改_Jmeter插件之PerfMon监控插件使用说明
  18. 吉首大学校赛 K 白山茶与红玫瑰 (线段树区间操作)
  19. 人脸识别系统毕业设计,人脸识别签到毕业设计,人脸识别打卡毕业设计
  20. MikTex+texworks插入数学公式示例

热门文章

  1. 小孩入门学什么计算机语言,有一定编程基础的孩子应该学什么编程语言?
  2. Uber终于消停了,新CEO说要带飞
  3. 微信小程序之“自取”与“外卖”
  4. JS章节 第一节总结知识点
  5. win10||win7+ubuntu16.04
  6. qml调用百度地图api实现卫星地球模式画路书轨迹
  7. 使用c++写sql语句的最佳实践
  8. CDI技术第十步 给Bean取名字
  9. 记Oracle DG Gap解决方案
  10. Keil下载与破解工具