OpenCV图像特征匹配
文章目录
- 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图像特征匹配相关推荐
- Python+OpenCV:特征匹配(Feature Matching)
Python+OpenCV:特征匹配(Feature Matching) Basics of Brute-Force Matcher Brute-Force matcher is simple. It ...
- 光流 | 图像特征匹配:特征光流与角点特征
/********************************************************** github:https://github.com/MichaelBeechan ...
- OpenCV + CPP 系列(卌二)图像特征匹配( KAZE/AKAZE)
文章目录 一.KAZE简介 二.代码演示 特征检测效果对比 演示匹配 一.KAZE简介 ECCV2012中出现了一种比SIFT更稳定的特征检测算法KAZE ([1]).KAZE的取名是为了纪念尺度空间 ...
- OpenCV + CPP 系列(卌一)图像特征匹配( FLANN 匹配)
文章目录 一.FLANN简介 演示SURF--Flann 二.单应性矩阵 一.FLANN简介 FLANN库全称是Fast Library for Approximate Nearest Neighbo ...
- OpenCV—python 模板匹配与图像特征匹配
文章目录 一.理论介绍与算法 二.算法代码 单目标匹配 多目标匹配 三 多尺度模板匹配 一.理论介绍与算法 模板匹配是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中的每一个 ...
- opencv4 图像特征匹配_概述 | 全景图像拼接技术全解析
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 前言 图像/视频拼接的主要目的是为了解决相机视野(FOV-Field Of View)限制,生成更宽的FOV图 ...
- 图像处理之图像特征匹配
在本章中, - 我们将看到如何将一个图像中的特征与其他图像进行匹配. - 我们将在OpenCV中使用Brute-Force匹配器和FLANN匹配器 一.Brute-Force匹配器 它使用第一组中一个 ...
- opencv4 图像特征匹配_openCV - 图像特征匹配
目标 本章节中 我们将实现如何不同图像之间匹配特征. 将使用两种匹配器,openCV提供了Brute-Force 和 FLANN Brute-Force 匹配器的基本原理 Brute-Force匹配器 ...
- Opencv图像特征点提取(
目录 特征点分类 1 ORB ①特征点检测 ②计算特征描述 2 SIFT 1 SIFT特征检测的步骤 ①.在DOG尺度空间中获取极值点,即关键点. ②.特征点方向估计 ③生成特征描述 ④.代码实现 3 ...
最新文章
- Ubuntu 查看磁盘空间大小命令转
- nginx css 304 导致图片丢失_Nginx 从入门到实战
- 华为发布面向2025十大趋势
- 动态规划 BZOJ1584 [Usaco2009 Mar] Cleaning Up 打扫卫生
- CodeForces509F Progress Monitoring
- 解决服务器上 w3wp.exe 和 sqlservr.exe 的内存占用率居高不下的方案
- 网络 http服务器-v1-多线程版本
- C++ STL vector的操作
- c++opencv显示中文_图像处理入门 100 题,有人把它翻译成了中文版!
- 以太网头数据和802.3的区别
- [技巧心得] 嵌套选择器优先级
- 基于python 爬虫_基于python的爬虫(一)
- 如何在电脑表格中用计算机,如何制表(如何使用电脑制作表格)
- c语言延时跑马灯实验报告,跑马灯实验C语言程序
- ViewPage实现一屏多页面显示(进阶版)
- 干货 | 系统润滑,定时清理内存了解一下
- perfmon 端口修改_Jmeter插件之PerfMon监控插件使用说明
- 吉首大学校赛 K	白山茶与红玫瑰 (线段树区间操作)
- 人脸识别系统毕业设计,人脸识别签到毕业设计,人脸识别打卡毕业设计
- MikTex+texworks插入数学公式示例