特征匹配,sift,surf,orb,brisk,brief

2023-12-23 10:18

本文主要是介绍特征匹配,sift,surf,orb,brisk,brief,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概念理解:什么是特征,什么是特征描述,什么是特征匹配

假设这样的一个场景,小白和小黑都在看一个图片,但是他们想知道他们看的是否是同一幅图片,于是他们就通过电话描述这个图片,来判断是否是同一个图片。比如说有下面两个图片

1               2

对话1:

小白:我的图片里面有五个很明显的特征,分别在图像的上下左右中五个位置。

小黑:我的图片里面也有五个很明显的特征,分别在图像的上下左右中五个位置。

对话2:

小白:我的一个特征左边是三角形,右边是圆形,上面是菱形,下面是正方形。

小黑:我也有一个特征左边是三角形,右边是圆形,上面是菱形,下面是正方形。

对话3:

小白和小黑:那我们看到的就是同一个特征了。

上述三个对话其实分别代表这特征提取,特征描述和特征匹配。

那么来详细的分析一下,我们的问题是要匹配两张图像是否是同一个图像,比较好的方法就是找出图像中特征显著的内容然后来进行比较,如果这些特征都一致,那么就有很高的概率称他们为同一个图像。所以首先第一步就是找出图像中特征性强的内容(Feature Detect),上图中特征性强的就是五个红色的图案。但是只知道有显著特征没用,必须知道两张图像中的特征是不是一致的,如何判断特征是不是一致的,就需要我们对这个特征进行描述(Feature Descriptor),如果描述非常的相似或者说是相同,那么就可以判断为是同一特征。那么问题来了,该如何去描述一个特征,什么样的描述是一个好的描述呢。从对话2中我们可以看出,描述一个特征其实就是描述特征与他周围内容的相互关系。那么什么样的描述是一个好的描述呢,就要提到我们为什么要描述特征了?我们描述特征是为了能够更好的匹配特征,使得我们认为描述相同的特征是同一个特征的是可信的(概率高的)。所以我们的描述必须是有代表性的,具有排他性的(discriminative),而不是模棱两可泛泛而谈的。最后我们就可以根据描述的相似性来判断这对特征是否是同一个特征。

特征不变性的理解:

接下来我们将谈一下特征的不变性。我们用过很多特征,Harris Corner、SIFT、SURF、BRIEF、BRISK等,而特征的一个重要特性就是特征不变性,常见的就是旋转不变性和尺度不变性,还有一些具有仿射不变性的特征。而这些特征该怎么理解呢?下面我就用通俗地解释一下。

  • 旋转不变性:

再看下面两张图片:

1                3

于是我们在看审视三个对话,你会发现对话2就改变了。

对话2:

小白:我的一个特征左边是三角形,右边是圆形,上面是菱形,下面是正方形。

小黑:我有一个特征左边是正方形,右边是菱形,上面是三角形,下面是圆形。

于是小黑和小白就认为他们看得并不是同一个图片。但事实上他们看得确实是同一种图片。于是我们就说这种特征不具有旋转不变性。

那么如何实现旋转不变性呢,再看下面两张图片:

4        5

然后我们再来审视对话2:

对话2:

小白:我的一个特征西边是三角形,东边是圆形,北边是菱形,南边是正方形。

小黑:我也有一个特征西边是三角形,东边是圆形,北边是菱形,南边是正方形。

这时候两个特征的描述就一致了,即拥有了旋转不变性。所以只要对特征定义方向,然后在同一个方向上进行特征描述就可以实现旋转不变性。这称之为Rotation Normalization。

  • 尺度不变性

接下来谈一下尺度不变性,依然看下面两张图片:

6          7

对话2:

小白:我的一个特征东边5个像素的地方有个圆形。

小黑:我有一个特征东边7个像素的地方有个圆形。

这就是尺度变化造成的特征不匹配,为了实现尺度不变性,就需要给特征加上尺度因子,比如说小白看到的是尺度为5的,小黑看到的是尺度为7的,那么在进行描述的时候,将尺度统一就可以实现尺度不变性了。这过程称为Scale Normalization。

 

所谓的旋转不变性和尺度不变性的原理,就是我们在描述一个特征之前,将两张图像都变换到同一个方向和同一个尺度上,然后再在这个统一标准上来描述这个特征。同样的,如果在描述一个特征之前,将图像变换到同一个仿射尺度或者投影尺度上,那么就可以实现仿射不变性和投影不变性。分别称为Affine Normalization 和 Projected Normalization.

总结:

特征匹配的方法是先找出特征显著的特征点(Feature Detect),然后再分别描述两个特征点(Feature Descriptor),最后比较两个描述的的相似程度来判断是否为同一个特征(Feature Match)。而在特征描述之前如果能够做到确定特征的方向,则可以实现旋转不变性(Rotation invarient),如果能确定尺度,则可以实现尺度不变性(Scale invarient)。

 

下面是我根据上面的方式对常用的Feature所做的总结。

 

SIFT

SURF

BRIEF

ORB

BRISK

提点方法

DoG的最值点位置在通过二次拟合来确定位置

Hessian矩阵的行列式最值

使用FAST提点,使用Harris Corner去除非角点

使用FAST或AGAST提点

确定方向

特征邻域的梯度直方图的最值方向

特征邻域对Haar wavelet的最大响应方向

使用Intensity centroid方法来确定方向

使用邻域随机抽样点对,对远点对做梯度确定方向

确定尺度

通过建立确定尺度空间,尺度空间中DoG最值所在尺度为特征尺度

尺度空间中Hessian矩阵行列式最值所在尺度

尺度空间中FAST提点最显著的尺度

描述方法

在特征周围取一个region,分成4*4的sub-region,对每个sub-region使用八方向的梯度表示,总共128维

在特征周围取一个region,分成4*4的sub-region,对每个sub-region计算haar wavelet响应,分别取x方向响应和,x方向响应绝对值之和,y方向响应和,y方向绝对值之和四个值描述,总共64维

在特征点周围随机抽取随机点对,比较两个点的像素强度,根据结果的大小记为1或0,取256组组成256位的二进制字符串

通过贪心方法抽取符合正态分布的随机点对,其他同BRIEF

使用短距离点对进行强度匹配,组成512位的二进制字符串

这篇关于特征匹配,sift,surf,orb,brisk,brief的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/527678

相关文章

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

详解nginx 中location和 proxy_pass的匹配规则

《详解nginx中location和proxy_pass的匹配规则》location是Nginx中用来匹配客户端请求URI的指令,决定如何处理特定路径的请求,它定义了请求的路由规则,后续的配置(如... 目录location 的作用语法示例:location /www.chinasem.cntestproxy

Nginx中location实现多条件匹配的方法详解

《Nginx中location实现多条件匹配的方法详解》在Nginx中,location指令用于匹配请求的URI,虽然location本身是基于单一匹配规则的,但可以通过多种方式实现多个条件的匹配逻辑... 目录1. 概述2. 实现多条件匹配的方式2.1 使用多个 location 块2.2 使用正则表达式

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

关于Gateway路由匹配规则解读

《关于Gateway路由匹配规则解读》本文详细介绍了SpringCloudGateway的路由匹配规则,包括基本概念、常用属性、实际应用以及注意事项,路由匹配规则决定了请求如何被转发到目标服务,是Ga... 目录Gateway路由匹配规则一、基本概念二、常用属性三、实际应用四、注意事项总结Gateway路由

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

hdu 3065 AC自动机 匹配串编号以及出现次数

题意: 仍旧是天朝语题。 Input 第一行,一个整数N(1<=N<=1000),表示病毒特征码的个数。 接下来N行,每行表示一个病毒特征码,特征码字符串长度在1—50之间,并且只包含“英文大写字符”。任意两个病毒特征码,不会完全相同。 在这之后一行,表示“万恶之源”网站源码,源码字符串长度在2000000之内。字符串中字符都是ASCII码可见字符(不包括回车)。

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

POJ 3057 最大二分匹配+bfs + 二分

SampleInput35 5XXDXXX...XD...XX...DXXXXX5 12XXXXXXXXXXXXX..........DX.XXXXXXXXXXX..........XXXXXXXXXXXXX5 5XDXXXX.X.DXX.XXD.X.XXXXDXSampleOutput321impossible