精华内容
下载资源
问答
  • 做与自己能力匹配的工作
    千次阅读
    2021-11-19 14:16:02

    前言

    双目立体匹配的原理类似于人类的视觉原理:分别单独使用左眼和单独使用右眼去观察一个物体,该物体在两个视角中的相对位置会存在一定的偏移,人类视觉系统可以根据该偏移去判断该物体的距离远近。

    同样的,在双目立体匹配中,只要能在两张图像中正确地找到匹配点,结合相机的内部参数和外部参数,就能精准地计算出空间点距离拍摄相机的距离。

    目录

    一、立体匹配简介

    二、国内外研究现状

    更多相关内容
  • e成科技人岗匹配中的匹配模型

    千次阅读 2019-07-23 16:14:50
    随着网络招聘的发展壮大,网聘渠道积攒着数亿份...传统人岗匹配中通过对求职者简历的工作经历文本和JD岗位信息进行文本挖掘,两者的技能和能力是否契合作为判断JD和CV是否匹配的重要依据。早期的人岗匹配版本基于t...

    随着网络招聘的发展与壮大,网聘渠道积攒着数亿份个人简历以及上千万份企业招聘信息。如何将这些简历和岗位进行精准匹配是各大招聘平台面临的重大挑战。

    问题描述
    在人岗匹配中,JD文档由多句工作描述和岗位要求组成,CV文档主要由求职者的工作经历组成。传统人岗匹配中通过对求职者简历的工作经历文本和JD岗位信息进行文本挖掘,两者的技能和能力是否契合作为判断JD和CV是否匹配的重要依据。早期的人岗匹配版本基于term重要性,bm25以及职能标签等信息做简单的匹配模型,但是这些方法很难挖掘特征与特征之间的关系以及潜在的信息交互特征,难以表达完整的岗位(JD)和简历(CV)的语义信息。鉴于此,本文提出了基于LSTM+double Attention网络的语义匹配模型[1]。

    模型介绍
    句子相似度计算是自然语言处理中重要而又基础的研究工作。例如:在对话系统中,用于查找最可能的答案;在文档检索中,用于查找最为相似的文档;在双句关系判断任务中,用于判断两个句子之间关系的类别等。目前常见的句子相似度计算方法大体上可以分为三类:

    (1)基于表层信息的相似度计算,其主要是通过句子中词性相似度、词序相似度和句长相似度等信息来综合计算两个句子的相似度[2]。

    (2)基于句子结构的相似度计算。这种方法主要考查量句子在结构上的相似性,如基于本体机构、词类串结构、词性及词性依存关系等进行相似度计算[3]。

    (3)基于词向量的语义表征来计算相似度。其通过垂直领域的文本数据训练得到word embedding, 借助词向量得到句子表征,然后计算cosine距离[4]。

    JD和CV的语义相似度计算,其本质是双文档关系判断任务或是长文本相似度匹配问题,和句子相似度计算不同之处在于文档是由多个句子组成。句子表征是文档表征的基础,本文的句子表征学习通过LSTM网络[5-6]学习到每个词或字语义表示,同时通过attention 机制[7-8]学习到每个词语义的权重。长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM通过对文本序列的不断迭代有选择继承历史信息以获得当前更好的语义表征,所以其能够在更长的序列中有更好的表现。attention 机制的作用是给不同的词或字分配不同的注意力,比如“高级java开发工程师”,显然“java”这个词更重要,需要分配更多的注意力,相反,如果对其进行简单的语义叠加,那么重要词的信息就会被抑制,从而会丢掉很多关键的语义特征,造成信息损失。

    得到句子的语义表征后,同样可以利用attention机制得到文档的语义表征,通过对JD和CV 的数据分析发现,其实JD和CV是否相关,其重要特征多集中在title和内容的几个句子当中,并不会分布在所有的句子当中,也就是说捕获那些含有重要语义特征的句子是关键,这也是为何要在句子层面引入attention机制的原因。

    目的:

    判断JD和CV 的语义相关程度,分为0:不相关,1:内容相关,2:内容和领域都相关。

    技术方案:LSTM+double Attention 孪生网络模型,如图一所示。

    1 捕获关键句子和关键词, double+attention 机制。

    2 利用LSTM模型提取句子的语义特征。

    在这里插入图片描述
    图一↑

    实现流程:

    1 构建训练数据(JD, CV)对,构造合理负样本(JD, CV)对。

    2 对JD和CV进行分句,以句子为单位进行分词,去除停用词,JD和CV的title进行char cut操作,id化。

    3 加载pre_trained embedding,通过embedding layer 得到 word embedding。

    4 通过LSTM+attention 得到 sentence vector。

    5 得到JD和CV的sentence vector后,继续加一层attention layer,得到document vector。

    6 全连接+softmax, 得到分类结果。

    结果分析
    模型经过训练后,在测试集上分类准确率为89.36%,f1 score为83.96%,如果不考虑领域是否相关,即语义相关和不相关,二分类准确率为96.39%,f1 score为96.25%。稍加改造在实际应用也有不错效果。图二是一个“自动驾驶深度学习算法工程师”的岗位信息及推荐系统推荐的结果展示,可以发现推荐结果排名靠前的CV其内容和领域都是和JD语义很相关的,这也验证了模型的效果。

    图二↑

    图三是JD和CV的sentence attention的可视化热力图,左侧是JD sentence attention热力图,右侧是CV sentence attention热力图,颜色越深表明句子的权重越高。可以看出JD和CV的title的句子权重比较高,其实在一般的JD和CV中title都是权重比较高的部分,但是像:“技术经理”,“研发小微主”,“专员”,“工程师”等JD case,其title 句子权重比较小,重要的句子要在描述内容中寻找。从图三中可以看出,JD, CV内容中和“算法”,“自动驾驶”相关的句子权重都比较高,说明sentence level 的attention机制是符合预期的。
    在这里插入图片描述
    图三↑

    在这里插入图片描述
    图四↑

    图四是JD, CV 句子层面的char level或word level的attention可视化热力图 ,其中只展示了部分重要句子中词的权重分布,颜色越深,表示字或词的权重越高。通过简单的计算term weight = sentence_attention*char_attention 即可得到top words,展示如下:

    JD top words: [(深度学习, 20.822678), (自动驾驶, 12.59064), (三维点云, 6.618764), (环境感知, 5.927), (cloud, 3.1689138), (算法, 3.0718648), (模块, 2.660974), (计算机视觉, 2.4465554), (立体视觉, 2.443054), (网络结构设计, 2.0044193), (物体检测, 1.897428)]

    CV top words:[(算法, 17.713745), (深度学习, 10.472152), (研究, 9.460823), (惯导, 3.709963), (导航算法, 2.04389), (嵌入式, 1.4608734), (无人驾驶, 1.1148125), (总体设计, 0.6105186), (gps, 0.5366095)]

    char level attention 机制的作用就是找出句子中的关键语义特征,通过热力图可以发现,在重要的句子中相关的关键词权重确实比较高。

    总结
    句子相似度计算在自然语言处理领域中是一项基础性研究工作,并衍生出文档相似度计算任务。本文对前人的研究进行了总结和归类,并提出了LSTM+double attention孪生网络模型,通过对结果的分析,表明了本方法在人岗匹配中对候选人的简历和企业招聘岗位进行精准匹配的有效性,有助于提升人岗匹配推荐系统的效果。

    参考文献:

    [1] Huang P S, He X, Gao J, et al. Learning deep structured semantic models for web search using clickthrough data[C]//Proceedings of the 22nd ACM international conference on Information & Knowledge Management. ACM, 2013: 2333-2338.

    [2] Zhang Lin, Hu Jie. Sentence similarity computing for FAQ question answering system[J]. Journal of Zhengzhou University: Natural Science Edition, 2010, 42(1): 57-61.

    [3] Lan Yanling, Chen Jianchao. Chinese sentence structures similarity computation based on POS and POS dependency[J]. Computer Engineering, 2011, 37(10): 47-49.

    [4] Chen Lisha. The research and implementation on WordNetbased sentence similarity of automatic question answering system[D]. Guangzhou: South China University of Technology, 2014.

    [5] Sundermeyer M, Schlüter R, Ney H. LSTM neural networks for language modeling[C]//Thirteenth annual conference of the international speech communication association. 2012.

    [6] Karpathy A, Joulin A, Fei-Fei L F. Deep fragment embeddings for bidirectional image sentence mapping[C]//Advances in neural information processing systems. 2014: 1889-1897.

    [7] Cho K, Van Merriënboer B, Bahdanau D, et al. On the properties of neural machine translation: Encoder-decoder approaches[J]. arXiv preprint arXiv:1409.1259, 2014.

    [8] Yin W, Schütze H, Xiang B, et al. Abcnn: Attention-based convolutional neural network for modeling sentence pairs[J]. Transactions of the Association for Computational Linguistics, 2016, 4: 259-272.

    展开全文
  • 阻抗匹配 五种方式

    千次阅读 2020-12-05 10:14:38
    硬件设计--阻抗匹配 参考资料:信号反射振铃产生 简易阻抗匹配方法 信号完整性分析 戴维南端接匹配简易阻抗匹配方法 一篇关于信号完整性匹配很好的总结(之终端匹配) 过冲及振铃现象实验分析 信号反射原理...

    硬件设计--阻抗匹配

    参考资料:信号反射与振铃产生

    简易阻抗匹配方法

    信号完整性分析

    戴维南端接匹配简易阻抗匹配方法

    一篇关于信号完整性匹配很好的总结(之终端匹配)

    过冲及振铃现象实验分析

    信号反射原理

    阻抗(物理量)和阻抗匹配

      信号或广泛电能在传输过程中,为实现信号的无反射传输或最大功率传输,要求电路连接实现阻抗匹配,阻抗匹配关系着系统的整体性能,实现匹配可使系统性能达到最优。

    一、基本概念介绍与理解

      1、特性阻抗

      特性阻抗(又称特征阻抗)并不是实际的电阻,而是属于长线传输中的概念。在射频范围内,信号传输的过程中,信号沿到达的地方,信号线和参考平面(电源或地平面)间由于电场的建立,会产生一个瞬时电流,如果传输线是各向同性的,那么只要信号在传输就始终存在一个电流I,而如果信号的输出电平为V,在信号传输的过程中,传输线就会等效成一个电阻,大小为V/I。把这个等效的电阻称为传输线的特性阻抗ZO。信号在传输过程中,如果传输路径上的特性阻抗发生变化,信号就会在阻抗不连续的结点发生反射。影响特性阻抗的因素为:介电常数、介质厚度、线宽、铜箔厚度;而与工作频率、传输线长短、所接射频器件无关

      2、电压驻波比

      电压驻波比(VSWR):指驻波波腹电压与波节电压幅度之比,驻波比等于1时,表示馈线和天线的阻抗完全匹配,此时高频能量全部被天线辐射出去,没有能量的反射损耗;驻波比无穷大时,表示全反射,能量完全没有辐射出去。

      计算公式:VSWR=(1+K)/(1-K);

      3、反射系数

      反射系数(反射电压与输入电压的比值)是衡量信号反射量的重要指标,其定义为:K=( ZL - ZO)/( ZL + ZO),ZL为变化后的阻抗,ZO为变化前的阻抗;如果负载和传输线完全匹配,K=0,VSWR=1:1;

      *下面通过信号振铃现象的产生原理来增强对信号反射的理解

      如图1所示,假设驱动端的输出阻抗为10Ω,输出3.3V电压信号,PCB走线的特征阻抗为50Ω;为了分析方便,假设负载端开路,即负载阻抗无穷大,并且忽略传输线寄生电容和寄生电感的影响,只考虑阻性负载。

    图1 振铃现象产生过程

      第一次反射:信号从芯片内部发出,经过10Ω输出阻抗和50ΩPCB特征阻抗的分压,实际加到PCB走线上的信号为A点电压3.3*50/(10+50)=2.75V;传输到远端B点,由于B点开路,阻抗无穷大,反射系数为1,即信号全部反射,所以反射信号也为2.75V,此时B点测量电压为2.75V+2.75V=5.5V;

      第二次反射:2.75V反射电压回到A点,阻抗由50Ω变为10Ω,发生负反射,A点反射系数为K=-2/3,即反射电压为-1.83V,该电压到达B点,再次发生反射,由于反射系数为1,反射电压也为-1.83V,此时B点测量电压为5.5V-1.83V-1.83V=1.84V(此处两个1.83V电压,一个是由A点传输过来的,一个是在B点反射造成的);

      第三次反射:从B点反射回来的-1.83V电压到达A点后,再次发生反射,反射电压为1.22V。该电压到达B点后再次发生正反射,反射电压同样为1.22V,所以B点电压变为1.84+1.22+1.22=4.28V;

      由于信号在A点和B点之间来回反射,引起B点电压不稳定,从而在B点形成振铃现象,所以如果在A点或者B点做好阻抗匹配,则反射信号就不会来回反射,从而保证了信号的稳定。

      扩展资料:反射系数公式推导

    图2 阻抗不连续示意图

       为方便理解,配个简易图加以说明:图中深绿色部分为大面积铺层,它是信号的返回路径;绿色和红色是传输线,所以在S1和S2交界处出现了阻抗不连续,从而导致信号发生反射;在交界处虽然阻抗发生了变化,但是电压和电流不可能发生突变,即在交界处的左边和右边,电压和电流均相等。

      在分界线的左边S1中:RS1=V1/I1  (1)

      在分界线的右边S2中:RS2=V2/I2  (2)

      其中V1、V2分别为分界线两侧的电压,I1、I2为分界线两侧的电压,所以:V1=V2,I1=I2  (3)

      分析方程(1)(2)(3),由于RS1不等于RS2,如果不存在反射,三个方程不可能同时成立;

      所以在分界面必定存在反射回源端的信号,假设反射电压为VF,反射电流为IF,进入S2的电压为VT,电流为IT,输入信号电压为VI,电流为II,则有

      电压关系:VI+VF=VT  (4)

      电流关系:II-IF=IT    (5)

    同时:VI/II=RS1  (6)

       VF/IF=RS1   (7)

         VT/IT=RS2    (8)

      综合式4、5、6、7、8可得:(VI-VF)/RS1=(VI+VF)/RS2 即:X=VF/VI=(RS2-RS1)/(RS1-RS2)

    二、阻抗匹配的理解

      阻抗匹配是指信号源或者传输线跟负载之间的一种合适的搭配方式,阻抗匹配可分为低频和高频两种情况考虑。

      低频情况下:阻抗匹配主要是保证负载上可获得最大输出功率。在直流情况下,负载阻抗等于信号源内阻(对于前后级情况,信号源内阻即为前级输出阻抗)时,实现阻抗匹配。在交流情况下,负载阻抗与信号源内阻符合共轭匹配时,负载获得最大输出功率。如果我们需要输出电流大,则选择小的负载电阻R;如果我们需要输出电压大,则选择大的负载R;如果我们需要输出功率最大,则选择和信号源内阻匹配的负载R。

      高频情况下:当信号的频率很高时,为避免信号反射,传输线与负载必须进行阻抗匹配:负载阻抗必须和传输线阻抗相等。如果不匹配,则会形成反射,能量传递不下去,降低效率,会在传输线上形成驻波;高速信号线与负载阻抗不匹配,会产生震荡,辐射干扰等。

    三、阻抗匹配方式

     高速数字系统中阻抗匹配与端接方案-电子发烧友网 

    通过上述对特征阻抗及信号振铃现象产生原理的理解,可得出以下几种实现阻抗匹配的方法。

      3.1、串联终端匹配

    图3 串联终端匹配

      串行连接终端匹配技术是在源端的一种终端匹配技术,和其他类型的终端匹配技术不同。串行连接终端匹配技术是由连接在驱动器输出端和信号线之间的一个电阻组成,驱动器输出阻抗RD以及电阻R的和必须与信号线的特征阻抗ZO匹配;

      在串行连接终端匹配技术中,由于信号会在驱动器的阻抗RD、串行匹配电阻RS以及传输线特性阻抗ZO之间实现信号电压的分压,因而加在传输线上的电压只有信号电压的一半;而在接收端,由于传输线阻抗和接收器输入阻抗的不匹配(通常情况下接收器的输入阻抗比传输线阻抗高得多),所以导致产生幅值大致相同的信号反射,故在负载端的信号电压大约是驱动器输出电压的一半,再加上同样幅值的信号反射电压,使得接收器马上就会接收到完整的信号电压;而反射电压会反向传递到驱动端,但是串行连接的匹配电阻在驱动器端实现了反射信号的终端匹配,因而不会出现进一步的信号反射,从而保证了传输线上信号的完整性。

      优点:1.器件单一,只需要一个电阻元件;

         2.抑制振铃,减少过冲;

         3.增强信号完整性,产生更小的EMI;

         4.适用于集总线型负载和单一负载;

      缺点:1.接收端的反向反射依然存在;

         2.影响信号上升时间并增加信号延时;

         3.分布式负载不适用,因为在走线路径的中间,电压仅为源电压的一半;

         4.当TTL、CMOS器件出现在相同网络时,串联匹配不是最佳选择;

      3.2、并联终端匹配

    图4 并联终端匹配

      并联终端匹配是最简单的阻抗匹配技术, 通过一个电阻R将传输线的末端(可能是开路,也可能是负载)接到地或者接到VCC上,电阻R的值必须同传输线的特征阻抗ZO匹配,以消除信号的反射。如果R同传输线的特征阻抗ZO匹配,那么匹配电阻将吸收造成信号反射的能量,而不管匹配电压的值,在数字电路的设计中,返回通路上吸收的电流通常都大于电源上提供的电流(这句话我也不理解)。

      将终端匹配到VCC可以提高驱动能力,而将终端匹配到地则可以提高地上的吸收能力。所以,对于50%占空比的信号而言,将终端匹配到VCC要优于将终端匹配到地。

      优点:1.器件单一,只需要一个电阻元件;

         2.适用于分布式负载;

         3.反射几乎可以完全消除;

         4.电阻阻值易于选择;

      缺点:1.该电阻会增加系统电路的功耗;

         2.降低了噪声容限(比如将TTL输出终端匹配到地会降低VOH的电平值,从而降低接收器输入端的抗噪声能力);

      3.3、戴维南终端匹配

    图5 戴维南终端匹配

      戴维南终端匹配技术也叫做双终端匹配技术也就是双电阻形式的并联匹配,它采用两个电阻R1和R2来实现终端匹配,要求的电流驱动能力比单电阻形式小,这是由于R1和R2的并联值与传输线的特性阻抗相匹配,每个电阻都比传输线的特性阻抗大。根据戴维南终端匹配设计规则,R1通过从VCC向负载注入电流来帮助驱动器更容易到达逻辑高状态;R2帮助通过向地吸收电流来将驱动器下拉到逻辑低状态。当R1和R2的并联同信号线的特征阻抗ZO匹配时可以加强驱动器的扇出能力,并且减小由于信号占空比的变化导致的功耗的改变。

      优点:1.终端匹配电阻采用上下拉的方式,有效抑制信号过冲;

         2.信号摆幅降低,加强了系统噪声容限;

         3.增强驱动器驱动能力,在5V和3.3V的CMOS和BiCMOS的系统中显得尤为有益;

      缺点:1.存在静态直流功耗;

         2.戴维南电压接近于器件的开关阈值电压,对于CMOS逻辑器件来说会导致更高的功耗;

      扩展资料:戴维南终端匹配设计规则

      1、两个电阻的并联值必须与传输线的特性阻抗相等;

      2、与电源VCC连接的电阻不能太小,需保证驱动器的IOL电流在驱动器的性能指标范围以内,以免信号为低电平时灌电流过大,损坏器件;

      3、与地连接的电阻不能太小,需保证驱动器的IOH电流在驱动器的性能指标范围以内,以免信号为高电平时拉电流过大,损坏器件;

      3.4、RC终端匹配

    图6 RC终端匹配

      RC终端匹配技术也称之为AC终端匹配技术,它是由一个电阻R和一个电容C组成的,电阻R和电容C连接在传输线的负载一端。对于RC终端匹配来说,电阻R的值必须同传输线的特征阻抗ZO的值匹配才能消除信号的反射,而电容的值的挑选却十分复杂,这是因为电容值较小的话会导致RC时间常数过小,这样一来RC电路就类似于一个尖锐信号沿发生器,从而引起信号的过冲与下冲,反之,较大的电容值会引入更大的功耗;信号的频率、信号占空比、以及过去的数据位模式等因素都会影响终端匹配电容的充电和放电特性,从而影响功率消耗。通常情况下,RC时间常数大于该传输线负载延时的两倍较为理想

      RC终端匹配技术的优势在于终端匹配电容阻断了直流通路,因此节省了可观的功率消耗,同时恰当地选取匹配电容的值,可以确保负载端的信号波形接近理想的方波,同时信号的过冲与下冲又都很小。

      RC终端匹配技术的一个缺点是信号线上的数据可能出现时间上的抖动,这取决于在此之前的数据模式。举例来说,一长串比较接近的数据位会导致信号传输线和电容充电到驱动器的最高输出电平的值,如果紧接着的是一个相位相反的数据位就需要花比正常情况更长的时间来确保信号跨越逻辑阈值电平。因此在设计系统时序的余量时务必将这一额外的时间考虑在内以确保设计的系统能够正常运作。

      3.5、肖特基二极管终端匹配

      肖特基二极管终端匹配技术也称之为二极管终端匹配技术,由两个肖特基二极管组成,此法不属于阻抗匹配的思路,而是通过二极管的钳位来减小过冲和下冲;传输线末端的信号反射,导致负载输入端上的电压升高超过VCC和二极管D1的正向偏值电压,使得该二极管正向导通连接到VCC上,从而将信号的过冲嵌位在VCC和二极管的阈值电压的和上,同样,连接到地的二极管D2也可以将信号的下冲限制在二极管的正向偏置电压上;因为二极管不会吸收任何的能量,仅仅只是将能量导向电源或者地,传输线上就会出现多次的信号反射。由于能量会通过二极管到电源和二极管到地的消耗,信号的反射会逐渐衰减,能量的损耗限制了信号反射的幅度,以维持信号的完整性。

    转载于:硬件设计--阻抗匹配_weixin_30657541的博客-CSDN博客_阻抗匹配

    四种阻抗匹配方式

        当传输路径上阻抗不连续时,会有反射发生,阻抗匹配的作用就是通过端接元器件,时传输路线上的阻抗连续以去除传输链路上产生的反射。
         常见的阻抗匹配如下:



    一、串联端接方式


    靠近输出端的位置串联一个电阻,要达到匹配效果,串联电阻和驱动端输出阻抗的总和应等于传输线的特征阻抗Z0。

    这里写图片描述

         在通常的数字信号系统中,器件的输出阻抗通常是十几欧姆到二十几欧姆,传输线的阻抗通常会控制在50欧姆,所以始端匹配电阻常见为33欧姆电阻。
         当然要达到好的匹配效果,驱动端输出到串联电阻这一段的传输路径最好较短,短到可以忽略这一段传输线的影响。
       串联电阻优缺点如下:
       (1)优点
               1、只需要一个电阻;
               2、没有多余的直流功耗;
               3、消除驱动端的二次反射;
               4、不受接收端负载变化的影响;
       (2)缺点
               1、接收端的一次发射依然存在;
               2、信号边沿会有一些变化;
               3、电阻要靠近驱动端放置,不适合双向 传输信号;
               4、在线上传输的电压是驱动电压的一半,不适合菊花链的多型负载结构。



    二、并联端接方式


    并联端接又叫终端匹配,要达到阻抗匹配的要求,端接的电阻应该和传输线的特征阻抗Z0相等。

    这里写图片描述
       

     在通常的数字信号传输系统里,接收端的阻抗范围为几兆到十几兆,终端匹配电阻如果和传输线的特征阻抗相等,其和接收端阻抗并联后的阻抗大致还是在传输线的特征阻抗左右,那么终端的反射系数为0。不会产生反射,消除的是终端的一次反射。
         并联端接优缺点
         (1)优点
         1、适用于多个负载
         2、只需要一个电阻并且阻值容易选取
         (2)缺点
         1、增加了直流功耗
         2、并联端接可以上拉到电源或者下拉到地,是的低电平升高或者高电平降低,减小噪声容限。


    三、AC并联端接


    并联端接为消除直流功耗,可以采用如下所示的AC并联端接(AC终端匹配)。要达到匹配要求,端接的电阻应该和传输线的特征阻抗Z0相等。

     这里写图片描述


    优缺点描述如下:
    (1)优点
    1、适用于多个负载
    2、无直流功耗增加
    (2)缺点
    1、需要两个器件
    2、增加了终端的容性负载,增加了RC电路造成的延时
    3、对周期性的信号有效(如时钟),不适合于非周期信号(如数据)

    四、戴维南端接


    戴维南端接同终端匹配,如下图,要达到匹配要求,终端的电阻并联值要和传输线的特征阻抗Z0相等。

    这里写图片描述

    优缺点描述:
    (1)优点
    1、适用于多个负载
    2、很适用于SSTL/HSTL电平上拉或下拉输出阻抗很好平衡的情况。
    (2)缺点
    1、直流功耗增加
    2、需要两个器件
    3、端接电阻上拉到电源或下拉到地,会使得低电平升高或高电平降低
    4、电阻值较难选择,电阻值取值小会使低电平升高,高电平降低更加恶劣;电阻值取大有可能造成不能完全匹配,使反射增大,可以通过仿真来确定。


    ————————————————
    版权声明:本文为CSDN博主「deng_d1」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/deng_d1/article/details/48105291

    展开全文
  • 深度学习计算机视觉

    千人学习 2020-07-13 17:12:35
    2、课程从计算机视觉理论知识出发,理论结合实战,手把手的实战代码实现(霍夫变换模板匹配,AlexNet OCR应用,VGG迁移学习,多标签分类算法工程) 3、带你了解最前沿技术,各类型算法的优点和缺点,掌握数据增强...
  • 特征提取和匹配由关键点检测,关键点特征描述和关键点匹配三个步骤组成。不同的检测器,描述符以及匹配器之间的组合往往是初学者疑惑的内容。本文将主要介绍关键点检测、描述以及匹配的背后原理,不同的组合方式...

    点击上方“AI小白学视觉”,选择加"星标"或“置顶”

    重磅干货,第一时间送达

    作者:William

    来源:自动驾驶全栈工程师知乎专栏,https://www.zhihu.com/people/william.hyin/columns

    z转载:极市平台

    特征提取和匹配是许多计算机视觉应用中的一个重要任务,广泛运用在运动结构、图像检索、目标检测等领域。每个计算机视觉初学者最先了解的特征检测器几乎都是1988年发布的HARRIS。在之后的几十年时间内各种各样的特征检测器/描述符如雨后春笋般出现,特征检测的精度与速度都得到了提高。

    特征提取和匹配由关键点检测,关键点特征描述和关键点匹配三个步骤组成。不同的检测器,描述符以及匹配器之间的组合往往是初学者疑惑的内容。本文将主要介绍关键点检测、描述以及匹配的背后原理,不同的组合方式之间的优劣,并提出几组根据实践结果得出的最佳组合。

    Background Knowledge

    特征(Feature)

    特征是与解决某个应用程序相关的计算任务有关的一条信息。特征可能是图像中的特定结构,例如点,边缘或对象。特征也可能是应用于图像的一般邻域操作或特征检测的结果。这些功能可以分为两大类:

    1、图片中特定位置的特征,如山峰、建筑角落、门口或有趣形状的雪块。这种局部化的特征通常被称为关键点特征(或者甚至是角点) ,它们通常以点位置周围出现的像素块来描述,这个像素块往往被称作图像补丁(Image patch)。

    2、可以根据其方向和局部外观(边缘轮廓)进行匹配的特征称为边缘,它们也可以很好地指示图像序列中的对象边界和遮挡事件。

    特征点

    边缘

    特征提取和匹配的主要组成部分

    1、检测(detection):识别感兴趣点

    2、描述(description): 描述每个特征点周围的局部外观,这种描述在光照、平移、尺度和平面内旋转的变化下是(理想的)不变的。我们通常会为每个特征点提供一个描述符向量。

    3、匹配(mataching): 通过比较图像中的描述符来识别相似的特征。对于两幅图像,我们可以得到一组对(Xi,Yi)->(Xi’ ,Yi’) ,其中(Xi,Yi)是一幅图像的特征,(Xi’ ,Yi’)是另一幅图像的特征.

    Detector

    关键点/兴趣点(Key point/ Interest point)

    关键点也称兴趣点,是纹理中表达的点。关键点往往是物体边界方向突然改变的点或两个或多个边缘段之间的交点。它在图像空间中具有明确的位置或很好地定位。即使图像域的局部或全局存在如光照和亮度变化等的扰动,关键点仍然是稳定,可以被重复可靠地计算出。除此之外它应该提供有效的检测。

    关键点的计算方法有两种:

    1、基于图像的亮度(通常通过图像导数)。

    2、基于边界提取(通常通过边缘检测和曲率分析)。

    关键点检测器光度和几何变化的不变性

    在OPENCV库,我们可以选择很多特征检测器,特征检测器的选择取决于将要检测的关键点的类型以及图像的属性,需要考虑相应检测器在光度和几何变换方面的鲁棒性。

    选择合适的关键点检测器时,我们需要考虑四种基本转换类型:

    1、旋转变换

    2、 尺度变换

    3、 强度变换

    4、仿射变换

    涂鸦序列是计算机视觉中使用的标准图像集之一,我们可以观察到第i+n帧的涂鸦图片包括了所有的变换类型。而对于高速公路序列,当专注于前面的车辆时,在第i帧和第i + n帧之间只有比例变化以及强度变化。

    传统的HARRIS传感器在旋转和加性强度偏移情况下具有较强的鲁棒性,但对尺度变化、乘性强度偏移(即对比度变化)和仿射变换敏感。

    自动尺度选择

    为了在理想尺度上检测关键点,我们必须知道(或找到)它们在图像中的各自维度,并适应本节前面介绍的高斯窗口 w (x,y) 的大小。如果关键点尺度是未知的或如果关键点与存在于不同的大小图像中,检测必须在多个尺度级连续执行。

    基于相邻层之间的标准差增量,同一个关键点可能被多次检测到。这就提出了选择最能代表关键点的“正确”尺度的问题。1998年Tony Lindeberg 发表了一种“自动选择比例的特征提取(Feature detection with automatic scale selection)”的方法。它提出了一个函数 f (x,y,scale) ,该函数可以用来选择在尺度上 FF 有稳定最大值的关键点。Ff 最大化的尺度被称为各关键点的“特征尺度”。

    如在下图中显示了这样一个函数 FF,它经过了几个尺度级别的评估,在第二张图中显示了一个清晰的最大值,可以看作是圆形区域内图像内容的特征尺度。

    一个好的检测器能够根据局部邻域的结构特性自动选择关键点的特征尺度。现代关键点探测器通常具有这种能力,因此对图像尺度的变化具有很强的鲁棒性。

    常见关键点检测器

    关键点检测器是一个非常受欢迎的研究领域,因此这些年来已经开发了许多强大的算法。关键点检测的应用包括物体识别和跟踪,图像匹配和全景拼接以及机器人制图和3D建模等。检测器的选择除了需要比较上述转换中的不变性之外,还需要比较检测器的检测性能和处理速度。

    经典关键点检测器

    经典关键点检测器的目的是为了最大化检测精度,复杂度一般不是首要考虑因素。

    HARRIS- 1988 Harris Corner Detector (Harris, Stephens)

    Shi, Tomasi- 1996 Good Features to Track (Shi, Tomasi)

    SIFT- 1999 Scale Invariant Feature Transform (Lowe) -None free

    SURT- 2006 Speeded Up Robust Features (Bay, Tuytelaars, Van Gool) -None free

    现代关键点检测器

    近年来,一些更快的探测器已经开发出来,用于智能手机和其他便携设备上的实时应用。下面的列表显示了属于这个组的最流行的检测器:

    FAST- 2006 Features from Accelerated Segment Test (FAST) (Rosten, Drummond)

    BRIEF- 2010 Binary Robust Independent Elementary Features (BRIEF) (Calonder, et al.)

    ORB- 2011 Oriented FAST and Rotated BRIEF (ORB) (Rublee et al.)

    BRISK- 2011 Binary Robust Invariant Scalable Keypoints (BRISK) (Leutenegger, Chli, Siegwart)

    FREAK- 2012 Fast Retina Keypoint (FREAK) (Alahi, Ortiz, Vandergheynst)

    KAZE- 2012 KAZE (Alcantarilla, Bartoli, Davidson)

    Feature Descriptor

    基于梯度与二进制的描述符

    由于我们的任务是在图像序列中找到对应的关键点,因此我们需要一种基于相似性度量将关键点彼此可靠地分配的方法。很多文献中已经提出了各种各样的相似性度量(称为Descriptor),并且在很多作者已经同时发布了一种用于关键点检测的新方法以及针对其关键点类型进行了优化的相似性度量。也就是说已经封装好的OPENCV关键点检测器函数大部分同样可以用来生成关键点描述符。

    区别在于:

    关键点检测器是一种根据函数的局部最大值从图像中选择点的算法,例如我们在HARRIS检测器中看到的“角度”度量。

    关键点描述符是用于描述关键点周围的图像补丁值的向量。描述方法有比较原始像素值的方法也有更复杂的方法,如梯度方向的直方图。

    关键点检测器一般是从一个帧图片中寻找到特征点。而描述符帮助我们在“关键点匹配”步骤中将不同图像中的相似关键点彼此分配。如下图所示,一个帧中的一组关键点被分配给另一帧中的关键点,以使它们各自描述符的相似性最大化,并且这些关键点代表图像中的同一对象。除了最大化相似性之外,好的描述符还应该能够最大程度地减少不匹配的次数,即避免将彼此不对应于同一对象的关键点分配给彼此。

    基于梯度HOG描述符

    虽然出现了越来越多快速的检测器/描述符组合,但是基于定向直方图(HOG)描述符之一的尺度不变特征转换(SIFT)依然被广泛运用。HOG的基本思想是通过物体在局部邻域中的强度梯度分布来描述物体的结构。为此,将图像划分为多个单元,在这些单元中计算梯度并将其收集到直方图中。然后,将所有单元格的直方图集用作相似性度量,以唯一地标识图像块或对象。

    SIFT/SURF使用HOG作为描述符,既包括关键点检测器,也包括描述符,功能很强大,但是被专利保护。SURF是在SIFT的基础上改进,不仅提高了计算速度,而且更加安全鲁棒性,两者的实现原理很相似。在此我先仅介绍SIFT。

    SIFT方法遵循五步过程,下面将对此进行简要概述。

    首先,使用称为“拉普拉斯高斯(LoG)”的方法来检测图像中的关键点,该方法基于二阶强度导数。LoG应用于图像的各种比例级别,并且倾向于检测斑点而不是拐角。除了使用唯一的比例级别外,还根据关键点周围局部邻域中的强度梯度为关键点分配方向。

    其次,对于每个关键点,其周围区域都会通过消除方向而改变,从而确保规范的方向。此外,该区域的大小将调整为16 x 16像素,从而提供了标准化的图像补丁。

    第三,基于强度梯度_Ix_和_Iy_计算归一化图像补丁内每个像素的方向和大小。

    第四,将归一化的贴片划分为4 x 4单元的网格。在每个单元内,超出幅度阈值的像素的方向收集在由8个bin组成的直方图中。

    最后,将所有16个单元格的8柱状直方图连接到一个128维向量(描述符)中,该向量用于唯一表示关键点。

    SIFT检测器/描述符即使在杂波中和部分遮挡下也能够可靠地识别物体。尺度,旋转,亮度和对比度的均匀变化是不变的,仿射失真甚至是不变的。

    SIFT的缺点是速度低,这使其无法在智能手机等实时应用中使用。HOG系列的其他成员(例如SURF和GLOH)已针对速度进行了优化。但是,它们仍然在计算上过于昂贵,因此不应在实时应用中使用。此外,SIFT和SURF拥有大量专利,因此不能在商业环境中自由使用。为了在OpenCV中使用SIFT,必须使用#include <opencv2/xfeatures2d/nonfree.hpp>,并且需要安装OPENCV_contribute包,注意一定要在Cmake选项中开启 OPENCV_ENABLE_NONFREE

    二进制Binary描述符

    基于HOG的描述符的问题在于它们基于计算强度梯度,这是非常昂贵的操作。即使已进行了一些改进(例如SURF),使用了积分图像,速度提高了,但这些方法仍然不适合处理能力有限的设备(例如智能手机)上的实时应用程序。二进制描述符家族是基于HOG的方法的一种更快(免费)的替代方案,但准确性和性能稍差。

    二进制描述符的核心思想是仅仅依赖强度信息(即图像本身) ,并将关键点周围的信息编码为一串二进制数字,当搜索相应关键点时,这些数字可以在匹配步骤中非常有效地进行比较。也就是说二进制描述符将兴趣点的信息编码成一系列数字,并作为一种数字“指纹” ,可用于区分一个特征和另一个特征。目前,最流行的二进制描述符是 BRIEF、 BRISK、 ORB、 FREAK 和 KAZE (所有这些都可以在 OpenCV 库中找到)。

    二进制描述符

    从高层次的角度来看,二进制描述符由三个主要部分组成:

    1、一种描述样本点位于关键点附近的位置的采样模式( sampling pattern )。

    2、一种消除了图像补丁围绕关键点位置旋转影响的方向补偿方法( orientation compensation)。

    3、一种样本对选择的方法(ample-pair selection),它产生成对的样本点,这些样本点根据它们的强度值相互比较。如果第一个值大于第二个值,我们就在二进制字符串中写一个“1” ,否则就写一个“0”。在对采样模式中的所有点对执行此操作之后,将创建一个长的二进制链(或“ string”)(因此得到描述符类的族名)。

    BRISK“二进制鲁棒不变可伸缩关键点”关键点检测器 / 描述符是二进制描述符的代表。在此我先仅介绍BRISIK。

    2011年Stefan Leutenegger 提出的BRISK 是一个基于 FAST 的检测器和一个Binary描述符的组合,这个描述符由通过对每个关键点邻域进行专门采样而获得的强度比较创建。

    BRISK的采样模式由多个采样点(蓝色)组成,其中每个采样点周围的同心环(红色)表示应用高斯平滑的区域。与某些其他二进制描述符(例如ORB或Brief)相反,BRISK采样模式是固定的。平滑对于避免混叠非常重要(这种效应会导致不同信号在采样时变得难以区分-或彼此混叠)。

    在样本对选择期间,BRISK算法会区分长距离对和短距离对。长距离对(即在样本图案上彼此之间具有最小距离的样本点)用于根据强度梯度估算图像补丁的方向,而短距离对用于对已组装的描述符字符串进行强度比较。在数学上,这些对表示如下:

    首先,我们定义所有可能的采样点对的集合A。然后,我们从A提取子集L,子集L的欧氏距离大于上阈值。L是用于方向估计的长距离对。最后,我们从A提取欧氏距离低于下阈值的那些对。该集合S包含用于组装二进制描述符串的短距离对。

    下图显示了短对(左)和长对(右)的采样模式上的两种距离对。

    从长对中,关键点方向向量G 计算如下:

    首先,根据归一化的单位矢量计算两个采样点之间的梯度强度,归一化的单位矢量给出两个点之间的方向,乘以两个点在各自比例下的强度差。然后在(2)中,关键点方向向量 g 从所有梯度强度的总和中计算出。

    基于 g ,我们可以使用采样模式的方向重新排列短距离配对,从而确保旋转不变性。基于旋转不变的短距离配对,可以如下构建最终的二进制描述符:

    从 计算出关键点的方位后,我们使用它使短距离配对旋转不变。然后,所有对之间的强度 被比较并用于组装可用于匹配的二进制描述符。

    OPENCV Detector/Descriptor implementation

    目前存在各种各样的特征点检测器/描述符,如 HARRIS, SHI-TOMASI, FAST, BRISK, ORB, AKAZE, SIFT, FREAK, BRIEF。每一种都值得单独用一篇博客去描述,但是本文的目的是为了给大家一份综述,因此不详细的从原理上分析这些检测器/描述符。网上有大量描述这些检测器/描述符的文章,但是我还是建议大家先看OPENCV库的Tutorial: How to Detect and Track Object With OpenCV.

    以下我会介绍各个特征点检测器/描述符的代码实现以及参数详解, 文章结尾会基于实际结果对这些组合进行评价。

    有些OPENCV函数可以同时用于检测器/描述符,但是有的组合会出现问题。

    SIFT  Detector/Descriptor  SIFT detector and ORB descriptor do not work together

    int nfeatures = 0;// The number of best features to retain.int nOctaveLayers = 3;// The number of layers in each octave. 3 is the value used in D. Lowe paper.double contrastThreshold = 0.04;// The contrast threshold used to filter out weak features in semi-uniform (low-contrast) regions.        double edgeThreshold = 10;// The threshold used to filter out edge-like features.        double sigma = 1.6;        // The sigma of the Gaussian applied to the input image at the octave \#0.xxx=cv::xfeatures2d::SIFT::create(nfeatures, nOctaveLayers, contrastThreshold, edgeThreshold, sigma);
    

    HARRIS  Detector

    // Detector parametersint blockSize = 2;     // for every pixel, a blockSize × blockSize neighborhood is consideredint apertureSize = 3;  // aperture parameter for Sobel operator (must be odd)int minResponse = 100; // minimum value for a corner in the 8bit scaled response matrixdouble k = 0.04;       // Harris parameter (see equation for details)// Detect Harris corners and normalize outputcv::Mat dst, dst_norm, dst_norm_scaled;dst = cv::Mat::zeros(img.size(), CV_32FC1);cv::cornerHarris(img, dst, blockSize, apertureSize, k, cv::BORDER_DEFAULT);cv::normalize(dst, dst_norm, 0, 255, cv::NORM_MINMAX, CV_32FC1, cv::Mat());cv::convertScaleAbs(dst_norm, dst_norm_scaled);
    // Look for prominent corners and instantiate keypointsdouble maxOverlap = 0.0; // max. permissible overlap between two features in %, used during non-maxima suppressionfor (size_t j = 0; j < dst_norm.rows; j++) {    for (size_t i = 0; i < dst_norm.cols; i++) {        int response = (int) dst_norm.at<float>(j, i);        if (response > minResponse) { // only store points above a threshold
                cv::KeyPoint newKeyPoint;            newKeyPoint.pt = cv::Point2f(i, j);            newKeyPoint.size = 2 * apertureSize;            newKeyPoint.response = response;
          // perform non-maximum suppression (NMS) in local neighbourhood around new key point            bool bOverlap = false;            for (auto it = keypoints.begin(); it != keypoints.end(); ++it) {                double kptOverlap = cv::KeyPoint::overlap(newKeyPoint, *it);                if (kptOverlap > maxOverlap) {                    bOverlap = true;                    if (newKeyPoint.response >                        (*it).response) {                                              // if overlap is >t AND response is higher for new kpt                        *it = newKeyPoint; // replace old key point with new one                        break;             // quit loop over keypoints                    }                }            }            if (!bOverlap) {                                                 // only add new key point if no overlap has been found in previous NMS                keypoints.push_back(newKeyPoint); // store new keypoint in dynamic list            }        }    } // eof loop over cols}     // eof loop over rows
    

    SHI-TOMASI Detector

    int blockSize = 6;       //  size of an average block for computing a derivative covariation matrix over each pixel neighborhooddouble maxOverlap = 0.0; // max. permissible overlap between two features in %double minDistance = (1.0 - maxOverlap) * blockSize;int maxCorners = img.rows * img.cols / max(1.0, minDistance); // max. num. of keypointsdouble qualityLevel = 0.01; // minimal accepted quality of image cornersdouble k = 0.04;bool useHarris = false;// Apply corner detectionvector<cv::Point2f> corners;cv::goodFeaturesToTrack(img, corners, maxCorners, qualityLevel, minDistance, cv::Mat(), blockSize, useHarris, k);
    // add corners to result vectorfor (auto it = corners.begin(); it != corners.end(); ++it) {    cv::KeyPoint newKeyPoint;    newKeyPoint.pt = cv::Point2f((*it).x, (*it).y);    newKeyPoint.size = blockSize;    keypoints.push_back(newKeyPoint);}
    

    BRISIK  Detector/Descriptor

    int threshold = 30;        // FAST/AGAST detection threshold score.int octaves = 3;           // detection octaves (use 0 to do single scale)float patternScale = 1.0f; // apply this scale to the pattern used for sampling the neighbourhood of a keypoint.xxx=cv::BRISK::create(threshold, octaves, patternScale);
    

    FREAK  Detector/Descriptor

    bool orientationNormalized = true;// Enable orientation normalization.bool scaleNormalized = true;// Enable scale normalization.float patternScale = 22.0f;// Scaling of the description pattern.int nOctaves = 4;// Number of octaves covered by the detected keypoints.const std::vector<int> &selectedPairs = std::vector<int>(); // (Optional) user defined selected pairs indexes,xxx=cv::xfeatures2d::FREAK::create(orientationNormalized, scaleNormalized, patternScale, nOctaves,selectedPairs);
    

    FAST  Detector/Descriptor

    int threshold = 30;// Difference between intensity of the central pixel and pixels of a circle around this pixelbool nonmaxSuppression = true;// perform non-maxima suppression on keypointscv::FastFeatureDetector::DetectorType type = cv::FastFeatureDetector::TYPE_9_16;// TYPE_9_16, TYPE_7_12, TYPE_5_8xxx=cv::FastFeatureDetector::create(threshold, nonmaxSuppression, type);
    

    ORB  Detector/Descriptor  SIFT detector and ORB descriptor do not work together

    int nfeatures = 500;// The maximum number of features to retain.float scaleFactor = 1.2f;// Pyramid decimation ratio, greater than 1.int nlevels = 8;// The number of pyramid levels.int edgeThreshold = 31;// This is size of the border where the features are not detected.int firstLevel = 0;// The level of pyramid to put source image to.int WTA_K = 2;// The number of points that produce each element of the oriented BRIEF descriptor.auto scoreType = cv::ORB::HARRIS_SCORE;// The default HARRIS_SCORE means that Harris algorithm is used to rank features.int patchSize = 31;// Size of the patch used by the oriented BRIEF descriptor.int fastThreshold = 20;// The fast threshold.xxx=cv::ORB::create(nfeatures, scaleFactor, nlevels, edgeThreshold, firstLevel, WTA_K, scoreType,patchSize, fastThreshold);
    

    AKAZE  Detector/Descriptor  KAZE/AKAZE descriptors will only work with KAZE/AKAZE detectors.

    auto descriptor_type = cv::AKAZE::DESCRIPTOR_MLDB;// Type of the extracted descriptor: DESCRIPTOR_KAZE, DESCRIPTOR_KAZE_UPRIGHT, DESCRIPTOR_MLDB or DESCRIPTOR_MLDB_UPRIGHT.int descriptor_size = 0;// Size of the descriptor in bits. 0 -> Full sizeint descriptor_channels = 3;// Number of channels in the descriptor (1, 2, 3)float threshold = 0.001f;// Detector response threshold to accept pointint nOctaves = 4;// Maximum octave evolution of the imageint nOctaveLayers = 4;// Default number of sublevels per scale levelauto diffusivity = cv::KAZE::DIFF_PM_G2;// Diffusivity type. DIFF_PM_G1, DIFF_PM_G2, DIFF_WEICKERT or DIFF_CHARBONNIERxxx=cv::AKAZE::create(descriptor_type, descriptor_size, descriptor_channels, threshold, nOctaves,nOctaveLayers, diffusivity);
    

    BRIEF  Detector/Descriptor

    int bytes = 32;// Legth of the descriptor in bytes, valid values are: 16, 32 (default) or 64 .bool use_orientation = false;// Sample patterns using keypoints orientation, disabled by default.xxx=cv::xfeatures2d::BriefDescriptorExtractor::create(bytes, use_orientation);
    

    Descriptor Matching

    特征匹配或一般意义上的图像匹配是图像配准、摄像机标定和目标识别等计算机视觉应用的一部分,是在同一场景 / 目标的两幅图像之间建立对应关系的任务。一种常用的图像匹配方法是从图像数据中检测出一组与图像描述符相关联的兴趣点。一旦从两个或更多的图像中提取出特征和描述符,下一步就是在这些图像之间建立一些初步的特征匹配。

    一般来说,特征匹配方法的性能取决于基本关键点的性质和相关图像描述符的选择。

    我们已经了解到关键点可以通过将其局部邻域转换为高维向量来描述,高维向量可以捕获梯度或强度分布的独特特征。

    描述符之间的距离

    特征匹配需要计算两个描述符之间的距离,这样它们之间的差异被转换成一个单一的数字,我们可以用它作为一个简单的相似性度量。

    目前有三种距离度量:

    • 绝对差之和(SAD)- L1-norm

    • 平方差之和(SSD)- L2-norm

    • 汉明距离 (Hamming distance)

    SAD和SSD之间的差异在于:首先两者之间的最短距离是一条直线,给定每个向量的两个分量,SAD计算长度差之和,这是一维过程。而SSD计算平方和,遵循毕达哥拉斯定律,在一个矩形三角形中,宽边平方的总和等于斜边的平方。因此,就两个向量之间的几何距离而言,L2-norm是一种更准确的度量。注意,相同的原理适用于高维描述符。

    而汉明距离对于仅由1和0组成的二进制描述符很适合,该距离通过使用XOR函数计算两个向量之间的差,如果两个位相同,则返回零如果两位不同,则为1。因此,所有XOR操作的总和就是两个描述符之间的不同位数。

    值得注意的是必须根据所使用的描述符的类型选择合适距离度量。

    • BINARY descriptors :BRISK, BRIEF, ORB, FREAK, and AKAZE- Hamming distance

    • HOG descriptors : SIFT (and SURF and GLOH, all patented)- L2-norm

    寻找匹配对

    让我们假设在一个图像中有N个关键点及其关联的描述符,在另一幅图像中有M个关键点。

    蛮力匹配(Brute Force Matching)

    寻找对应对的最明显方法是将所有特征相互比较,即执行N x M比较。对于第一张图像中给定的关键点,它将获取第二张图像中的每个关键点并计算距离。距离最小的关键点将被视为一对。这种方法称为“蛮力匹配(Brute Force Matching)”或“最近邻居匹配(Nearest Neighbor Matching)”。OPENCV中蛮力匹配的输出是一个关键点对的列表,这些关键点对按其在所选距离函数下的描述符的距离进行排序。

    快速最近邻(FLANN)

    2014年,David Lowe和Marius Muja发布了"快速最近邻(fast library for approximate nearest neighbors(FLANN)")。FLANN训练了一种索引结构,用于遍历使用机器学习概念创建的潜在匹配候选对象。该库构建了非常有效的数据结构(KD树)来搜索匹配对,并避免了穷举法的穷举搜索。因此,速度更快,结果也非常好,但是仍然需要调试匹配参数。

    BFMatching和FLANN都接受描述符距离阈值T,该距离阈值T用于将匹配项的数量限制为“好”,并在匹配不对应的情况下丢弃匹配项。相应的“好”对称为“正阳性(TP)”,而错对称为“假阳性(FP)”。为T选择合适的值的任务是允许尽可能多的TP匹配,而应尽可能避免FP匹配。根据图像内容和相应的检测器/描述符组合,必须找到TP和FP之间的权衡点,以合理地平衡TP和FP之间的比率。下图显示了SSD上TP和FP的两种分布,以说明阈值选择。

    第一阈值T1被设置为两个特征之间的最大允许的SSD,其方式是选择了一些正确的正匹配,而几乎完全避免了错误的正匹配。但是,使用此设置也将丢弃大多数TP匹配项。通过将匹配阈值增加到T2,可以选择更多的TP匹配,但是FP匹配的数量也将显着增加。在实践中,几乎没有找到TP和FP的清晰明了的分离,因此,设置匹配阈值始终是平衡“好”与“坏”匹配之间的折衷。尽管在大多数情况下都无法避免FP,但目标始终是尽可能降低FP次数。在下文中,提出了实现这一目标的两种策略。

    选择匹配对

    BFMatching- crossCheck

    只要不超过所选阈值T,即使第二图像中不存在关键点,蛮力匹配也将始终返回与关键点的匹配。这不可避免地导致许多错误的匹配。抵消这种情况的一种策略称为交叉检查匹配,它通过在两个方向上应用匹配过程并仅保留那些在一个方向上的最佳匹配与在另一个方向上的最佳匹配相同的匹配来工作。交叉检查方法的步骤为:

    1、对于源图像中的每个描述符,请在参考图像中找到一个或多个最佳匹配。

    2、切换源图像和参考图像的顺序。

    3、重复步骤1中源图像和参考图像之间的匹配过程。

    4、选择其描述符在两个方向上最匹配的那些关键点对。

    尽管交叉检查匹配会增加处理时间,但通常会消除大量的错误匹配,因此,当精度优于速度时,应始终执行交叉匹配。交叉匹配一般仅仅用于BFMatching。

    Nearest neighbor distance ratio (NN)/K-nearest-neighbor(KNN)

    减少误报数量的另一种非常有效的方法是为每个关键点计算最近邻距离比(nearest neighbor distance ratio)。

    KNNNN的区别在与 NN 每个特征点只保留一个最好的匹配 (keeping only the best match),而KNN 每个特征点保留k个最佳匹配(keeping the best k matches per keypoint). k一般为2.

    主要思想是不要将阈值直接应用于SSD。相反,对于源图像中的每个关键点,两个(k=2)最佳匹配位于参考图像中,并计算描述符距离之间的比率。然后,将阈值应用于比率,以筛选出模糊匹配。下图说明了原理。

    在该示例中,将具有关联描述符da的图像补丁与其他两个具有描述符的图像补丁d_ b1 和 d_b2进行比较 。可以看出,图像补丁看起来非常相似,并且会导致模棱两可,因此不可靠。通过计算最佳匹配与次佳匹配之间的SSD比值,可以过滤掉这些较弱的候选对象。

    在实践中,已证明阈值0.8可以在TP和FP之间提供良好的平衡。在原始SIFT中检查的图像序列中,使用此设置可以消除90%的错误匹配,而丢失少于5%的正确匹配。注意,只有KNN能设置阈值0.8。NN只会提供一个最佳匹配。

    以下是匹配的执行代码:

    void matchDescriptors(std::vector<cv::KeyPoint> &kPtsSource, std::vector<cv::KeyPoint> &kPtsRef, cv::Mat &descSource,cv::Mat &descRef,std::vector<cv::DMatch> &matches, std::string descriptorclass, std::string matcherType,std::string selectorType) {    // configure matcher    bool crossCheck = false;    cv::Ptr<cv::DescriptorMatcher> matcher;    int normType;
        if (matcherType.compare("MAT_BF") == 0) {        int normType = descriptorclass.compare("DES_BINARY") == 0 ? cv::NORM_HAMMING : cv::NORM_L2;        matcher = cv::BFMatcher::create(normType, crossCheck);
        } else if (matcherType.compare("MAT_FLANN") == 0) {        // OpenCV bug workaround : convert binary descriptors to floating point due to a bug in current OpenCV implementation        if (descSource.type() !=CV_32F) {            descSource.convertTo(descSource, CV_32F);            // descRef.convertTo(descRef, CV_32F);        }        if (descRef.type() !=CV_32F) {            descRef.convertTo(descRef, CV_32F);        }        matcher = cv::DescriptorMatcher::create(cv::DescriptorMatcher::FLANNBASED);    }
        // perform matching task    if (selectorType.compare("SEL_NN") == 0) { // nearest neighbor (best match)        matcher->match(descSource, descRef, matches);         // Finds the best match for each descriptor in desc1    } else if (selectorType.compare("SEL_KNN") == 0) { // k nearest neighbors (k=2)        vector<vector<cv::DMatch>> knn_matches;        matcher->knnMatch(descSource, descRef, knn_matches, 2);        //-- Filter matches using the Lowe's ratio test        double minDescDistRatio = 0.8;        for (auto it = knn_matches.begin(); it != knn_matches.end(); ++it) {            if ((*it)[0].distance < minDescDistRatio * (*it)[1].distance) {                matches.push_back((*it)[0]);            }        }    } }
    

    Evaluating Matching Performance

    目前特征提取与匹配存在大量的检测器和描述符类型,为了解决的问题,必须基于诸如关键点的准确性或匹配对的数量之类的要求来选择合适的算法对。下面,概述了最常用的措施。

    真阳性率(True Positive Rate-TPR)是已经匹配的正确关键点 (true positives - TP)和所有潜在匹配的总和之间的比值,包括那些被检测器/描述符(false negatives - FN)错过了的。完美匹配器的TPR为1.0,因为不会有错误匹配。TPR也称为召回(recall),可用于量化实际发现了多少个可能的正确匹配。

    假阳性率 (False Positive Rate-FPR)是已经匹配错误的关键点(f_alse positives - FP_)和所有应该不被匹配的特征点之间的比值。完美匹配器的FPR为0.0。FPR也称为 false alarm rate,它描述检测器/描述符选择错误的关键点对的可能性。

    Matcher Precision是正确匹配的关键点(TP)的数量除以所有匹配的数量。此度量也称为 inlier ratio

    很多人对于TP, FP, FN以及 TN的理解经常会产生偏差,尤其是FN和TN。下图是它们各自的定义:

    在这里我们需要介绍ROC的定义。

    ROC曲线是一个图形化的图表,它显示了一个检测器 / 描述符如何很好地区分真假匹配,因为它的区分阈值是不同的。ROC 可以直观地比较不同的检测器 / 描述符,并为每个检测器选择一个合适的鉴别阈值。

    下图显示了如何通过更改SSD的鉴别阈值,根据正阳性和假阳性的分布构造ROC。理想的检测器/描述符的TPR为1.0,而FPR同时接近0.0。

    在下图中,显示了两个好的和不好的检测器/描述符的示例。在第一个示例中,无法安全区分TP和FP,因为两条曲线都匹配,并且辨别阈值的更改将以相同的方式影响它们。在第二个示例中,TP和FP曲线没有明显重叠,因此可以选择合适的鉴别器阈值。

    在该图中,您可以看到不同描述符(例如,SIFT,BRISK和其他几个描述符)的ROC曲线,并在视觉上进行比较。请注意,这些结果仅对实际用于比较的图像序列有效-对于其他图像集(例如,交通场景),结果可能会有很大差异。

    Conclusion

    2D_Feature_Tracking项目的目的在于使用检测器和描述符的所有可能组合,为所有10张图像计算只在前方车辆范围内的关键点数量,检测时间,描述时间,匹配时间以及匹配的关键点数量。在匹配步骤中,使用BF方法及KNN选择器并将描述符距离比设置为0.8。

    以下是结果:

    不同检测器的平均检测时间及检测出的关键点数目

    不同检测器和描述符组合的描述时间

    不同检测器和描述符组合的匹配点数目(控制匹配算法为不变量)

    不同检测器和描述符组合的总运行时间

    从上表中的第一印象可以可以看出:

    通过考虑所有这些变化,我可以说检测器/描述符的前三个组合是:

    • FAST + BRIEF (Higher speed and relative good accuracy)

    • BRISK + BRIEF (Higher accuracy)

    • FAST + ORB (relatively good speed and accuracy)

    以上结论是基于实际测试比较表面数据得到的结论,你们也可以自己尝试修改我代码库中的检测器和描述符组合,看看结果有什么不同。

    最后引用Shaharyar Ahmed Khan Tareen在其比较不同检测器和描述器组合性能的论文A Comparative Analysis of SIFT, SURF, KAZE, AKAZE, ORB, and BRISK中的结论:

    SIFT,SURF和BRISK被认为是大多数尺度不变特征检测器(基于可重复性),它们在广泛的尺度尺度变化中不受影响。ORB具有最小的尺度不变性。ORB(1000),BRISK(1000)和AKAZE比其他旋转不变性更高。与其他相比,ORB和BRISK通常对仿射更改更加不变。与其余图像相比,SIFT,KAZE,AKAZE和BRISK具有更高的图像旋转精度。尽管ORB和BRISK是可以检测大量特征的最有效算法,但如此大量特征的匹配时间会延长总图像匹配时间。相反,ORB(1000)和BRISK(1000)执行最快的图像匹配,但其准确性受到损害。对于所有类型的几何变换,SIFT和BRISK的总体精度最高,SIFT被认为是最精确的算法。

    定量比较表明,特征检测描述器检测大量特征的能力的一般顺序为:

    ORB>BRISK>SURF>SIFT>AKAZE>KAZE

    每个特征点的特征检测描述器的计算效率顺序为:

    ORB>ORB (1000) >BRISK>BRISK (1000) >SURF (64D)>SURF (128D) >AKAZE>SIFT>KAZE

    每个特征点的有效特征匹配顺序为:

    ORB (1000) >BRISK (1000) >AKAZE>KAZE>SURF (64D)>ORB>BRISK>SIFT>SURF (128D)

    特征检测描述器的整体图像匹配速度顺序为:

    ORB (1000) >BRISK (1000) >AKAZE>KAZE>SURF (64D)>SIFT>ORB>BRISK>SURF (128D)

    备注:不同检测器的检测图像,从中可以看出它们关键点邻域的大小和分布。

    HARRIS

    Shi-Tomasi

    FAST

    BRISIK

    ORB

    AKAZE

    SIFT

    引用资料

    UDACITY

    A Comparative Analysis of SIFT, SURF, KAZE, AKAZE, ORB, and BRISK

    Deepanshu Tyagi 

    展开全文
  • 综述 | 图像特征提取与匹配技术

    千次阅读 2020-09-23 23:36:49
    关注“机器学习生成对抗网络”,设为星标,第一时间获取更多干货作者:william链接:https://zhuanlan.zhihu.com/p/133301967文仅分享,侵删特征提取...
  • 信号完整性之阻抗匹配与端接方法

    千次阅读 2020-10-26 20:53:06
    信号完整性之阻抗匹配与端接方法 1. 前言 随着电子技术的发展,电路的规模越来越大,单个器件集成的功能越来越多,速率越来越高,而器件的尺寸越来越小。由于器件尺寸的减小,器件引脚信号变化沿的速率变得...
  • Patch2Pix(CVPR 2021)特征点检测与匹配论文精度笔记

    千次阅读 多人点赞 2021-12-15 10:01:10
    (CVPR 2021)Patch2Pix: Epipolar-Guided Pixel-Level Correspondences 深度学习特征点检测与匹配论文精度笔记
  • 射频基础之阻抗匹配与Smith图

    万次阅读 多人点赞 2017-09-06 10:57:09
    一件器材的输出阻抗和所连接的负载阻抗之间所应满足的某种关系,以免接上负载后对器材本身的工作状态产生明显的影响。对电子设备互连来说,例如信号源连放大器,前级连后级,只要后一级的输入阻抗大于前一级的输出...
  • 阻抗匹配是什么意思?阻抗匹配原理详解

    万次阅读 多人点赞 2019-06-12 20:00:53
    阻抗匹配是什么意思_阻抗匹配原理详解 -------本文轉載自<http://m.elecfans.com/article/671550.html>  本文主要详解什么是阻抗匹配,首先介绍了输入及输出阻抗是什么,其次介绍了阻抗匹配的原理,最后...
  • 【NLP】深度文本匹配综述

    万次阅读 2021-06-29 22:07:28
    3.深度文本匹配与传统文本匹配 4.深度文本匹配国内外研究现状 4.1基于单语义表达的文本匹配 4.2基于多语义表达的文本匹配 4.3基于注意力机制的文本匹配 4.4深度文本匹配框架总结 5.未来研究方向展望 5.1变长...
  • SemiGlobalMatching(SGM),立体匹配经典算法,编码实战教学!
  • 1. 功放的概念  功率放大器简称功放,俗称 “扩音机”,是音响系统中最基本的...A 类即使没有信号输入时,也工作在偏置区,效率最低,理论效率只有25%; B 类如果没有信号输入,几乎不消耗功耗,理论效率78%; ...
  • SLAM之图像特征提取与匹配

    千次阅读 2018-04-10 22:01:23
    此篇博客,包括之后的一些SLAM系列博客,其实都是高翔博士的《视觉SLAM十四讲》读书笔记,在此向高博所工作致敬。对SLAM初学者而言,《视觉SLAM十四讲》非常适合入门,而且高博在深蓝学院开设了《SLAM理论实践...
  • cadence版图——器件的匹配

    千次阅读 2021-07-01 16:22:50
    tempreture 的影响,导致匹配的元器件会有差别,影响的因素主要有如下: 1. 阱偏效应 well proximity effects 由于阱偏效应的存在,导致阱内的浓度不一致,导致阱内器件的阈值电压不同,为避免阱偏效应带来的影响,...
  • TTLCMOS逻辑电平匹配

    千次阅读 2018-03-27 11:24:22
    连接3.3V 设备到5V 设备需要考虑到驱动器和接收器的逻辑电平是否匹配。.描述了用于5V CMOS,5V TTL 和3.3V TTL 的逻辑电平标准。可以看到,5V TTL 和3.3V TTL的逻辑电平是相同的,而5V CMOS逻辑电平前两者是不同的...
  • 什么是阻抗匹配以及为什么要阻抗匹配... 阻抗匹配在高频设计中是一个常用的概念,这篇文章对这个“阻抗匹配”进行了比较好的解析。回答了什么是阻抗匹配。 阻抗匹配(Impedance matching)是微波电子学里的一...
  • 【概念介绍】人脸匹配

    千次阅读 2020-04-02 00:38:00
    人脸验证:输入为一个人脸图片,要匹配的也是一张人脸,我们要的,就是检验这两张脸是否是同一个人。这是一个 1:1 的问题。人脸签到、刷脸登录就是人脸验证的典型应用。 人脸识别:给定一张人脸图,要去判断这个...
  • 并对 Rete 算法了一些研究,要不然在你找新工作面试时,问你会 Drools 规则引擎框架吗?你说会!然后面试官接着问你,你了解 Rete 算法吗?你说听说过。然后面试官再问你,你知道 Rete 算法的原理吗?你能实现 ...
  • 本博文将一个文本中的金额信息利用正则式和分句的方式提取出来。...本文以获取文本中金额为例讲些一下鄙人对文本结构化关键信息提取的理解。 首先假设我们拿到一个文本内容如下: content='''排10西沙湾...
  • 如果上层是机器人,那么应用层的开发者可能希望使用SLAM来全局的定位,并且让机器人在地图中导航---例如扫地机需要完成扫地工作,希望计算一条能够覆盖整张地图的路径。或者,如果上层是一个AR设备,那么开发者...
  • 一小时学懂阻抗匹配

    万次阅读 多人点赞 2018-04-16 15:47:35
    一件器材的输出阻抗和所连接的负载阻抗之间所应满足的某种关系,以免接上负载后对器材本身的工作状态产生明显的影响。对电子设备互连来说,例如信号源连放大器,前级连后级,只要后一级的输入阻抗大于前一级的输出...
  • 硬件设计:逻辑电平--差分信号(PECL、LVDS、CML)电平匹配 参考资料:逻辑电平设计规范 PECL电平匹配设计指南 CML信号LVPECL信号的连接 硬件设计:逻辑电平--CML 硬件设计:逻辑电平--ECL/PECL/LVPECL 硬件设计:...
  • 影像匹配方法

    千次阅读 2016-07-17 16:40:26
    影像匹配方法
  • 立体匹配经典算法AD-Census在线编码教学(1),代码已开源!
  • 近年来,在形状的表示和匹配方面的工作还包括有限元法( Finite Element Method   或   FEM )、旋转函数( Turning Function )和小波描述符( Wavelet Descriptor )等方法。 Ⅱ   基于小波和相对...
  • 正则表达式(一)字符串匹配

    万次阅读 多人点赞 2018-10-25 09:25:13
    我们来看看 * 这个元字符,当然它不是匹配 ‘*’ 字符本身(我们说过元字符都是有特殊能力的),它用于指定前一个字符匹配零次或者多次。 例如 ca*t 将匹配 ct(0 个字符 a),cat(1 个字符 a),caaat(3 个字符...
  • 学历低,无法胜任工作,大佬告诉你应该怎么

    万次阅读 多人点赞 2020-03-03 11:44:03
    微信上收到一位读者小涛的留言,大致的意思是自己只有高中学历,经过培训后找到了一份工作,但很难胜任,考虑要不要辞职找一份他能力可以胜任的实习工作。下面是他留言的一部分内容: 二哥,我是 2016 年高中毕业的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 259,413
精华内容 103,765
热门标签
关键字:

做与自己能力匹配的工作