数字图像处理学习笔记(一):特征检测和匹配概述

数字图像处理学习笔记(一):特征检测和匹配概述

参考博客:

  • 特征点的匹配
  • SIFT特征详解
  • 数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法

1、特征点概述

如何高效且准确的匹配出两个不同视角的图像中的同一个物体,是许多计算机视觉应用中的第一步。虽然图像在计算机中是以灰度矩阵的形式存在的,但是利用图像的灰度并不能准确的找出两幅图像中的同一个物体。这是由于灰度受光照的影响,并且当图像视角变化后,同一个物体的灰度值也会跟着变化。所以,就需要找出一种能够在相机进行移动和旋转(视角发生变化),仍然能够保持不变的特征,利用这些不变的特征来找出不同视角的图像中的同一个物体。

为了能够更好的进行图像匹配,需要在图像中选择具有代表性的区域,例如:图像中的角点、边缘和一些区块,但在图像识别出角点是最容易,也就是说角点的辨识度是最高的。所以,在很多的计算机视觉处理中,都是提取角点作为特征,对图像进行匹配,例如SFM,视觉SLAM等。

但是,单纯的角点并不能很好的满足我们的需求,例如:相机从远处得到的是角点,但是在近处就可能不是角点;或者,当相机旋转后,角点就发生了变化。为此,计算机视觉的研究者们设计了许多更为稳定的的特征点,这些特征点不会随着相机的移动,旋转或者光照的变化而变化。例如:SIFT,SURF,ORB

一个图像的特征点由两部分构成:

  • 关键点(Keypoint):关键点指的是该特征点在图像中的位置,有些还具有方向、尺度信息;
  • 描述子(Descriptor):描述子通常是一个向量,按照人为的设计的方式,描述关键点周围像素的信息
    通常描述子是按照外观相似的特征应该有相似的描述子设计的。因此,在匹配的时候,只要两个特征点的描述子在向量空间的距离相近,就可以认为它们是同一个特征点。

2、特征点的匹配

特征点的匹配通常需要以下三个步骤:

1)提取图像中的关键点,这部分是查找图像中具有某些特征(不同的算法有不同的)的像素;
2)根据得到的关键点位置,计算特征点的描述子;
3)根据特征点的描述子,进行匹配;

这里先介绍下特征点的描述子,一个好的描述子是准确匹配的基础,关键点的提取和特征点的匹配,在后面介绍。

3、特征点描述子

从图像中提取到特征的关键点信息,通常只是其在图像的位置信息(有可能包含尺度和方向信息),仅仅利用这些信息无法很好的进行特征点的匹配,所以就需要更详细的信息,将特征区分开来,这就是特征描述子。另外,通过特征描述子可以消除视角的变化带来图像的尺度和方向的变化,能够更好的在图像间匹配。

特征的描述子通常是一个精心设计的向量,描述了关键点及其周围像素的信息。为了能够更好的匹配,一个好的描述子通常要具有以下特性:

  • 不变性:指特征不会随着图像的放大缩小旋转而改变;
  • 鲁棒性:对噪声、光照或者其他一些小的形变不敏感;
  • 可区分性:每一个特征描述子都是独特的,具有排他性,尽可能减少彼此间的相似性。

其中描述子的可区分性和其不变性是矛盾的,一个具有众多不变性的特征描述子,其区分局部图像内容的能力就比较稍弱;而如果一个很容易区分不同局部图像内容的特征描述子,其鲁棒性往往比较低。所以,在设计特征描述子的时候,就需要综合考虑这三个特性,找到三者之间的平衡

特征描述子的不变性主要体现在两个方面:

  • 尺度不变性 (Scale Invarient)
    指的是同一个特征,在图像的不同的尺度空间保持不变。匹配在不同图像中的同一个特征点经常会有图像的尺度问题,不同尺度的图像中特征点的距离变得不同,物体的尺寸变得不同,而仅仅改变特征点的大小就有可能造成强度不匹配。如果描述子无法保证尺度不变性,那么同一个特征点在放大或者缩小的图像间,就不能很好的匹配。为了保持尺度的不变性,在计算特征点的描述子的时候,通常将图像变换到统一的尺度空间,再加上尺度因子
  • 旋转不变性 (Rotation Invarient)
    指的是同一个特征,在成像视角旋转后,特征仍然能够保持不变。和尺度不变性类似,为了保持旋转不变性,在计算特征点描述子的时候,要加上关键点的方向信息。

为了有个更直观的理解,下面给出SIFT,SURF,BRIEF描述子计算方法对比:

在这里插入图片描述
从上表可以看出,SIFT,SURF和BRIEF描述子都是一个向量,只是维度不同。其中,SIFT和SURF在构建特征描述子的时候,保存了特征的方向和尺度特征,这样其特征描述子就具有尺度和旋转不变性;而BRIEF描述子并没有尺度和方向特征,不具备尺度和旋转不变性。

4、常用的特征点算法

上面提到图像的特征点包含两个部分:

  • 特征点的提取,在图像检测到特征点的位置。
  • 特征点的描述,也就是描述子。

在图像中提取到关键点的位置信息后,为了能够更有效的匹配(主要是保证尺度和旋转不变性),通常使用一个向量来描述关键点及其周围的信息。特征的描述子,在特征点的匹配中是非常重要的,上一小节中对其应该具有的性质做了介绍。但具体到一个算法来说,可能其既有特征点的提取算法也有特征点描述子的算法,也有可能其仅仅是一个特征点提取算法或者是特征点的描述子算法。在本小节就常用的特征点算法做一个简要的说明。

一、SIFT

提到特征点算法,首先就是大名鼎鼎的SIFT算法了。SIFT的全称是Scale Invariant Feature Transform,尺度不变特征变换,2004年由加拿大教授David G.Lowe提出的。SIFT特征对旋转、尺度缩放、亮度变化等保持不变性,是一种非常稳定的局部特征。

SIFT算法主要有以下几个步骤:

  • 1)高斯差分金字塔的构建
    使用组和层的结构构建了一个具有线性关系的金字塔(尺度空间),这样可以在连续的高斯核尺度上查找图像的特征点;另外,它使用一阶的高斯差分来近似高斯的拉普拉斯核,大大的减少了运算量。
  • 2)尺度空间的极值检测及特征点的定位
    搜索上一步建立的高斯尺度空间,通过高斯差分来识别潜在的对尺度和旋转不变的特征点。但是,在离散空间中,局部极值点可能并不是真正意义的极值点,真正的极值点有可能落在离散点的间隙中,SIFT通过尺度空间DoG函数进行曲线拟合寻找极值点
    特征方向赋值
  • 3)基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向,后续的所有操作都是对于关键点的方向、尺度和位置进行变换,从而提供这些特征的不变性。
  • 4)特征描述子的生成
    通过上面的步骤已经找到的SIFT特征点的位置、方向、尺度信息,最后使用一组向量来描述特征点及其周围邻域像素的信息。

SIFT算法中及包含了特征点的提取算法,也有如何生成描述子的算法,更进一步的SIFT算法介绍可参看:

二、SURF

SURF全称 Speeded Up Robust Features “加速版的具有鲁棒性的特征”,是在SIFT算法的基础上提出的,主要针对SIFT算法运算速度慢,计算量大的缺点进行了改进。
SURF的流程和SIFT比较类似,这些改进体现在以下几个方面:

  • 1)特征点检测是基于Hessian矩阵,依据Hessian矩阵行列式的极值来定位特征点的位置。并且将Hession特征计算与高斯平滑结合在一起,两个操作通过近似处理得到一个核模板。
  • 2)在构建尺度空间时,使用box filter与源图像卷积,而不是使用DoG算子。
  • 3)SURF使用一阶Haar小波在x、y两个方向的响应作为构建特征向量的分布信息。

三、FAST特征点提取算法

SIFT和SURF是非常好的,稳定的特征点算法,但运算速度是其一大弊端,无法做到实时的特征提取和匹配,其应用就有了很大的局限性。FAST特征提取算法弥补了这一局限,检测局部像素灰度变化明显的地方,以速度快而著称,其全称为:Features From Accelerated Segment Test。在FAST算法的思想很简单:如果一个像素与周围邻域的像素差别较大(过亮或者过暗),那么可以认为该像素是一个角点。和其他的特征点提取算法相比,FAST算法只需要比较像素和其邻域像素的灰度值大小,十分便捷。

FAST算法提取角点的步骤:

  • 1)在图像中选择像素p,假设其灰度值为:Ip
  • 2)设置一个阈值T,例如:Ip 的20%
  • 3)选择p周围半径为3的圆上的16个像素,作为比较像素
  • 4)假设选取的圆上有连续的N个像素大于 Ip+T 或者 Ip-T,那么可以认为像素p就是一个特征点。
    (N通常取12,即为FAST-12;常用的还有FAST-9,FAST-11)。

FAST算法只检测像素的灰度值,其运算速度极快,同时不可避免的也有一些缺点:

  • 检测到的特征点过多并且会出现“扎堆”的现象。这可以在第一遍检测完成后,使用非最大值抑制(Non-maximal suppression),在一定区域内仅保留响应极大值的角点,避免角点集中的情况。
  • FAST提取到的角点没有方向和尺度信息

上面的介绍的SIFT和SURF算法都包含有各自的特征点描述子的计算方法,而FAST不包含特征点描述子的计算,仅仅只有特征点的提取方法,这就需要一个特征点描述方法来描述FAST提取到的特征点,以方便特征点的匹配。下面介绍一个专门的特征点描述子的计算算法:

BRIEF描述子

BRIEF是一种二进制的描述子,其描述向量是0和1表示的二进制串。0和1表示特征点邻域内两个像素(p和q)灰度值的大小:如果p比q大则选择1,反正就取0。在特征点的周围选择128对这样的p和q的像素对,就得到了128维由0,1组成的向量。那么p和q的像素对是怎么选择的呢?通常都是按照某种概率来随机的挑选像素对的位置。

BRIEF使用随机选点的比较,速度很快,而且使用二进制串表示最终生成的描述子向量,在存储以及用于匹配的比较时都是非常方便的,其和FAST的搭配起来可以组成非常快速的特征点提取和描述算法。

四、ORB算法

在这里插入图片描述
ORB的全称是Oriented FAST and Rotated BRIEF,是目前来说非常好的能够进行的实时的图像特征提取和描述的算法,它改进了FAST特征提取算法,并使用速度极快的二进制描述子BRIEF。
针对FAST特征提取的算法的一些确定,ORB也做了相应的改进。

  • 使用非最大值抑制,在一定区域内仅仅保留响应极大值的角点,避免FAST提取到的角点过于集中。
  • FAST提取到的角点数量过多且不是很稳定,ORB中可以指定需要提取到的角点的数量N,然后对FAST提取到的角点分别计算Harris响应值,选择前N个具有最大响应值的角点作为最终提取到的特征点集合。
  • FAST提取到的角点不具有尺度信息,在ORB中使用图像金字塔,并且在每一层金字塔上检测角点,以此来保持尺度的不变性。
  • FAST提取到的角点不具有方向信息,在ORB中使用灰度质心法(Intensity Centroid)来保持特征的旋转不变性。

FAST-12算法:

添加预测试操作,于每个像素,直接检测在邻域圆上的第1,5,9,13个像素的亮度,只有当这四个像素当中有三个同时大于IP+T或者小于IP-T的时候,当前像素才有可能是是角点。

  • 问题1:FAST特征点的数量很多,并且不是确定,而大多数情况下,我们希望能够固定特征点的数量。

解决方法:在ORB当中,我们可以指定要提取的特征点数量。对原始的FAST角点分别计算Harris的响应值,然后选取前N个点具有最大相应值的角点,作为最终角点的集合。

  • 问题2:FAST角点不具有方向信息和尺度问题。

解决方法:尺度不变性构建的图像的金字塔,并且从每一层上面来检测角点。旋转性是由灰度质心法实现。

灰度质心法:质心是指以图像块灰度值作为权重的中心。(目标是为了找到方向)

1)在一个小的图像块B中,定义图像块的矩为:
在这里插入图片描述
2)通过矩找到图像块的质心

在这里插入图片描述

3)连接图像块的几何中心o与质心C,得到一个oc的向量,把这个向量的方向定义特征点的方向
在这里插入图片描述

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

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

相关文章

数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法

数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法 一、概述: 提到特征点算法,首先就是大名鼎鼎的SIFT算法了。SIFT的全称是Scale Invariant Feature Transform,尺度不变特征变…

微软向马斯克的人工智能公司OpenAI投资10亿美元

来源: 新浪财经新浪美股讯微软(Microsoft)周一宣布,将向埃隆-马斯克(Elon Musk)的OpenAI投资10亿美元,打造能够处理更复杂任务的人工智能。根据声明,通过合作,两家公司将建立新的Azure AI超级计算技术,微软将成为OpenA…

数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF

数字图像处理学习笔记(三):ORB算法(尺度不变特征变换)Oriented FAST and Rotated BRIEF 一、概述 参考:特征点匹配特征检测方法汇总 ORB的全称是Oriented FAST and Rotated BRIEF,是目前来说…

华为:对部分顶尖学生实行年薪制 最高200万元

来源:EETOP7月23日上午消息,据华为总裁办签发的电子邮件,华为对部分2019届顶尖学生实行年薪制管理。华为以电邮通知【2019】068号文发布了8名天才少年的年薪方案,这8名人员全部为2019届应届顶尖学生,其年薪的最低限为8…

matplotlib使用GridSpec自定义子图位置 (非对称的子图)

上图的结构可以用一下两种方式画: import matplotlib.pyplot as plt from matplotlib.gridspec import GridSpecfig plt.figure(1) gs GridSpec(3, 3)ax1 plt.subplot(gs[0, :]) ax2 plt.subplot(gs[1, :2]) ax3 plt.subplot(gs[1:, 2]) ax4 plt.subplot(gs[…

大脑简史(1)-历史上的大事件

来源:人机与认知实验室能够上天入地,却不知道自己的大脑,笔者认为这是很多人的疑惑。随着科技的发展,我们能够延伸到的地方越来越多,无论是伸手不见五指的海底,还是扶摇直上九万里的浩渺星空,都…

作业3词频统计

(1). 实现一个控制台程序,给定一段英文字符串,统计其中各个英文单词(4字符以上含4字符)的出现频率。 答: 从文件读取遍历字符串大写转小写将句子分隔成一个个单词判断是否为单词计算单词出现的频率预估时间10minutes10…

MATLAB报错Invalid ADAPTORNAME specified. Type 'imaqhwinfo' for a list of available ADAPTORNAMEs. Image

MATLAB报错Invalid ADAPTORNAME specified. Type imaqhwinfo for a list of available ADAPTORNAMEs. Image acquisition adaptors may be available as downloadable support packages. Open Support Package Installer to install additional vendors. 这时需要安装两个安装…

陈天奇:十年机器学习科研之路(附链接)

来源:深度学习自然语言处理链接:https://zhuanlan.zhihu.com/p/74249758导读十年前,MSRA的夏天,刚开始尝试机器学习研究的我面对科研巨大的不确定性,感到最多的是困惑和迷茫。十年之后,即将跨出下一步的时候…

QT示例:基于TCP 点对多Socket通讯(server,clients)

QT示例:基于TCP 点对多通讯(server,clients)一、服务器server二、客户端Client下载:基于TCP 点对多Socket通讯 一、服务器server 因为对于客户端来说,只能连接一个服务器。而对于服务器来说,它是面向多连…

MATLAB GUI的CreateFcn如何创建

看MATLAB关于GUI代码的时候发现有一些function _CreateFcn(hObject, eventdata, handles)函数,那么这类函数是如何创建出出来的呢? 首先在MATLAB中输入guide,打开其中一个GUI文件,现在随便打开一个我之前创建好的GUI:…

文小刚:量子革命是最不可思议的物理革命

来源:科学网人类生活在一个怎样的世界里?凝聚态理论物理学家、美国麻省理工学院终身教授、美国科学院院士文小刚的答案是:“我们生活在量子计算机里面。量子信息是真实的,而所看到的各种物质、人,都是量子信息的虚拟反…

QT+Halcon综合示例:clip回形针2D位姿检测

QTHalcon综合示例(一):clip回形针2D位姿检测0、halcon源码:1、Qt代码:2、运行结果:下载:clip回形针2D位姿检测 0、halcon源码: * clip.hdev: Orientation of clips * dev_close_w…

MATLAB GUI如何创建Callback函数

本文以创建按钮的Callback函数为例介绍了在MATLAB如何在GUI中创建Callback函数 首先在MATLAB中输入guide,打开GUI文件,这里我随机打开一个我之前创建的GUI文件: 假设现在要创建start按钮的Callback函数,则双击该按钮,…

互联网50年:从信息高速公路到超级智能的进化

来源:战略前沿技术编者按:2019年,迎来互联网诞生50周年。本文根据中信出版社7月出版的《崛起的超级智能:互联网大脑如何影响科技未来》一书的内容和观点,重点阐述了互联网是如何在50年中发生重大变化,如何促…

MATLAB摄像头可以运行但是打不开视频

今天在学习一个MATLAB关于摄像头操作的代码,运行之后摄像头会一闪一闪,但是就是打不开视频的画面,查看了半天代码发现代码也没有错,最后尝试着将代码中的下面这句中的320x240改为640x480就可以打开视频了 vid videoinput(winvid…

大脑简史(2)-研究大脑的手段

来源:人机与认知实验室上篇文章笔者和大家分享了认知神经科学历史上的大事件,这些大事件有的极大程度的改变了人们的思维,有的直接推动了神经科学的发展,可以这么说,没有这些前人的努力,就没有我们现在取得…

stm32_DMA采集一个AD数据_并通过DMA向串口发送

这是以前学32的时候写的,那时候学了32之后感觉32真是太强大了,比51强的没影。关于dma网上有许多的资料,关于dma采集ad网上也有很多。亲们搜搜,这里只贴代码了,其实我也想详详细细地叙述一番,但是自己本身打…

QT综合示例:QT串口通信

QT综合示例:QT串口通信0、界面:1、代码:如果用qt写程序作为上位机,然后通过和usb和下位机通信的时候,就需要用到qt中的串口通信了。 0、界面: 1、代码: 1).pro 添加: …

MATLAB GUI如何制作下拉列表

MATLAB在GUI中可以实现下图所示的下拉列表: 方法: 在MATLAB中输入guide打开一个现有的GUI或者新建一个GUI放置一个弹出式菜单,如图所示双击新建的弹出式菜单,打开检查器,点击检查器的“string”菜单栏右侧的按钮&…