before:本篇博文先主要叙述ORB特征点提取算法,包括对其分解,

FAST特征点的生成,BRIEF描述子的生成。然后对FPGA实现特征点

提取进行简介。铺垫好这些基础后,在下一篇博文中,仔细介绍如何

采用FPGA来实现高速的特征点提取。如何用VHDL来并行实现这一

算法。请阅读本文时,记得看下一篇博文!




一 、前言

 1.摘要:




 图像特征的检测和提取是计算机视觉最重要的研究领域之一,ORB(Oriented FASTand Rotated
BRIEF)算法是目前最快速稳定的特征点检测和提取算法,许多图像拼接和目标追踪技术利用ORB特征进行实现。然而,目前的研究大多基于CPU或GPU等通用计算硬件进行实现的,由于其速度慢,功耗大等缺点,不适用于嵌入式和小型化设备进行实时图像处理。随着实时高速视觉的发展,传统的图像传感器和处理架构已经不能满足高速运动目标的图像处理需求。本文在研究中采用FPGA(Field
Programmble Gate
Array)来进行硬件图像加速处理。FPGA的低功耗,低成本和高速并行计算能力使得本设计所提出的实时高速特征点检测系统能够成功实现。

 
本研究以高速视觉平台为实验设备,以实现实时高速特征点检测为研究内容。论文首先针对ORB检测算法对FAST特征点检测算法增加主方向和对BRIEF描述子生成算法进行的抗噪性和旋转不变性的改进进行分析,对实际应用中图像的特征点匹配原理进行了叙述。为了体现出ORB算法的快速稳定性,引入了SIFT算法和SURF算法来进行对比。然后在Visual
Studio2013开发环境下,应用C++编程语言,利用OpenCV开源视觉库,分别实现了三种不同提取算法。对图像的强度变化,尺度变化和旋转变化方面进行了大量对比实验,验证了改进ORB特征点检测算法的准确性和快速性,并针对高速视觉平台做了一定的精简和改进。随后通过分析FPGA的开发流程和并行处理架构,结合IDP
Express高速视觉平台的图像处理模块分布特点,分析了高速图像采集卡的图像信号传输机制,对采用的FAST特征点检测算法进行了改进。接着将检测算法分为了数据准备模块、数据处理模块、数据输出模块进行了自顶向下的模块化设计。借助于ISE开发平台所提供的IP核,对各种计算和数据操作使用VHDL语言进行了设计输入。最后通过仿真、调试、综合等步骤,将设计的基于FPGA的实时高速特征点检测算法生成的配置文件烧写到Xilinx
Spartan3xc3s5000-4fg900
FPGA芯片上,通过整套高速视觉平台对高速运动的目标进行了特征点检测。在进行了大量实验的基础上,验证所设计的系统能以250fps的速度进行目标特征点实时检测,通过实验数据评估了所设计的实时高速特征点检测系统的检测效果。本研究所设计的基于FPGA的特征点检测系统与传统软件实现的特征点检测方法相比较,速度上有了近30倍的提升,且设计的硬件检测系统最高能以2000fps处理512×512大小的图像。
 



 2.引言:ORB(Oriented FASTand Rotated
BRIEF)算法的特征检测和提取是获取视觉传感器所传输的图像或视频中的关键对象的过程,结合所提取的特征,进行基于特征的目标匹配是实现目标检测的核心过程[1]
。目前,由于检测和匹配的计算复杂程度,业界通常采用离线视频结合CPU进行目标提取。所以要将特征提取算法应用到高速实时场景中,是技术难点和重点。

 
过去十几年的研究,通常致力于在CPU上去减少算法的复杂程度,提高检测精度等,而在目前的机器人技术和科技发展领域中,常常要求低功耗,高速实时以及较小的资源消耗,为了解决在嵌入式或小型设备上运行,需要借助ASIC(专用定制集成电路)或者FPGA(现场可编程逻辑门阵列)。由于ASIC价格昂贵,利用FPGA的可重配置性,高速的处理时钟等优点,能胜任我们的处理工作
[2]。

 
为了研究解决实时高速的特征点提取,本文将重点分析ORB特征点检测算法,并利用改进的ORB算法,进行相关实验。在确保处理的正确性下,结合软件和FPGA进行实时特征点检测。最终实验表明,我们的系统能够在高速视觉采集卡上成功的以52.4
MPixel/s的速率进行特征点检测。






 二 、课题研究背景及意义(Research background and significance)

 2.1课题研究背景


 
人的眼睛和大脑的视觉处理系统,能够每秒处理10~12张分散图片。与人类的触觉和听觉相比,人类的视觉系统处理速度相对较慢。在类人机器人领域,常规处理速度(30~60fps)的视觉能够满足要求。然而,在许多需要高速视觉的场合,例如汽车碰撞分析,机械结构破碎性能分析,高速目标追踪,炸弹引爆能力分析等,使用肉眼,难以研究,只能借助离线高速摄像机,将场景记录下来,随后对捕捉的高速图像序列进行分析
[3]。

 
目前,针对图像的目标检测,特征提取技术以及实时追踪技术,一直是高速视觉研究的重点方向。许多嵌入式机器人视觉处理应用需要实时高速的解决方案,要求传感器的工作频率在1KHz以上。工业场景中,一些高速移动目标用肉眼难以发现和追踪,这就需要引入并行同步计算架构,将视觉反馈控制在毫秒或者微秒级别,来加速处理,实时提取目标,为机器人的运动控制提供决策,同时降低CPU的计算负荷和能耗,这是目前急需解决的难题。

 
最近十几年,已经开发出多套实时高速视觉系统,通过高速视觉(500~10000fps)反馈信息进行实时在线控制,进行高速运动目标的实时追踪。随着视频图像等视觉数据的日益增长,高速视觉传感器不断创新,广泛用于实时高速视觉反馈系统。由于高速视觉具有1)两帧之间位移小;2)实时图像处理的复杂时序和有限的处理器资源等特性。因此,实时高速视觉对大量数据进行实时处理要求较高
[3]
。有研究提出采用GPU进行图像的加速处理,虽然GPU的处理速度较快,但相对于FPGA,GPU需要巨大的计算资源,较高的功耗,不适用于嵌入式或者小型的智能机器人。由于FPGA的并行处理架构,数十万个逻辑单元,能满足各种组合逻辑和时序逻辑
[4]。这种特性正好适用于高并行度,低复杂程度,低的内存资源消耗以及低功耗,在处理实时高速视觉具有明显优势。 




 2.2 课题研究意义




 
对于怎样选取特征点来表述目标,使得目标特征独一无二,便于在特征空间中识别出来。常用的目标特征有颜色,边缘,纹理,光流等。对于不同的特征,有颜色特征提取算法,形状特征提取算法和基于边缘轮廓特征的提取算法。在目标检测和提取的算法中,目前有较好的三种算法被广泛应用,SIFT(尺度不变特征转换)算法,增强版本的SURF(具有加速鲁棒性的特征提取)算法,ORB(定向的FAST检测和旋转的BRIEF描述子)算法。实验显示SIFT和SURF算法复杂,处理速度慢,而ORB的计算速度是SIFT的10倍,且具有良好的旋转不变性和抗噪性
[5]。 
由于实时高速图像的特征检测受到光照变化、图像旋转、尺度变化以及噪声等不利环境的影响。决定在研究中采用稳定性优异,鲁棒性强的ORB算法来实现目标的检测提取和特征点匹配。
由于应用于高速运动的目标中,受限于图像传感器的速度和精度,CPU的处理速度,以及算法的复杂程度,现有的软件特征提取算法和目标匹配算法,不能实时地应对图像的特征点检测和目标匹配。决定采用基于FPGA(Field
Programmble Gate
Array)的硬件图像加速处理算法,提前对输入图像进行特征点检测等计算任务繁重的算法进行计算,随后传输给软件进行后续处理。通过以上的方案,能解决实时高速图像目标提取和匹配,为后续的对识别目标进行实时高速追踪进行技术铺垫。
在完成一系列处理后,就能够实现高级视觉应用,为实时高速视觉的行为推理,人工智能分析以及图像理解等,打下坚实基础。
综上所述,本论文所研究的利用FPGA实现基于ORB算法的实时高速目标点检测,提取,特征匹配,具有重要理论价值和工程应用潜力。




 2.3 本文的研究内容





 
在计算机视觉领域中,对目标的检测和描述等相关算法研究已经相当成熟。有Harris角点检测,FAST角点检测算法,Shi-Tomasi角点检测算法;描述算法有SIFT、BRIEF、SURF等。但是目前的研究主要基于CPU或者GPU平台进行实现。由于相机与PC之间传输速度的限制,帧率很难达到100帧,且功耗大,设备复杂,因此不适用于机器人或无人机等小型设备进行实时检测。本研究课题针对这几个问题,重点解决并实现了特征点检测的实时性,高速处理和低功耗的问题。以下为本文的具体内容:

 概述了实时高速视觉、特征检测算法的国内外研究发展现状,结合目前的研究现状简要说明项目的研究背景和实际意义。最后总结叙述了论文的研究工作和结构安排。

 
ORB特征点检测算法的理论分析。对特征点的意义进行了说明,详细分析了ORB算法的改进思路,包括对FAST特征点检测算法增加特征点主方向,以及在BRIEF描述子生成算法中,进行的特征抗噪性和旋转不变性改进。最后对实际应用中的特征点匹配原理进行了叙述。

 
ORB特征点检测算法软件实现与性能评估。为了体现出ORB算法的快速性和稳定性,将该算法与SIFT算法和SURF算法在特征点检测效果上进行对比。采用C++编程语言在VS2013开发环境上,结合OpenCV开源视觉库实现了改进的ORB特征点检测算法。最后通过对图像的强度变化,尺度变化和旋转变化进行对比实验,验证了ORB特征点检测算法的准确性和快速性。

 
实时高速特征点检测算法设计。通过分析基于FPGA的实时高速视觉系统的特点,增大了算法处理的并行度,将FAST特征点检测算法进行改进和优化,对算法的硬件电路映射进行分析。最后将特征点检测算法分为三个模块,进行了自顶向下的设计:1、数据准备模块,传入固定大小的图像矩阵;2、数据处理模块,对图像邻域进行特征点检测,矩计算等操作;3、数据输出模块,输出处理的数据和信号到下一个功能模块。系统能将图像的特征点个数、坐标信息以及主方向信息保存在每一帧图像的最底部。

 基于FPGA的实时高速特征点检测算法硬件实现。通过算法的输入,仿真调试,编译器综合,将配置文件烧写到Xilinx Spartan3
xc3s5000-4fg900
FPGA芯片上进行硬件电路搭建。通过整套高速视觉平台实现了运动目标特征点检测,对检测的效果,特征点主方向信息进行分析,验证了所设计的实时高速特征点检测系统的性能。

 总结与展望。总结了全文所做的理论分析,设计流程和实现实时高速特征点检测系统的研究步骤。






 三 、特征点的概述(Overviewof keypoints)




 
在目标识别的过程中,关键在于选取怎样的特征来表示目标。理想的视觉特征通常唯一的显示目标,且容易在相应的特征空间中识别和提取。对于目标的识别,可以用一组或多组特征来进行检测和分类。其中形状特征是局部信息,在遮挡情况下,目标的形状信息不完整,效果较差。而采用特征点检测的方法,能在全局实现,不依赖局部信息,在整个图像中获得所有的特征,能全面的表示多目标以及复杂背景。

 特征点检测(keypoints
detection)是计算机视觉利用图像信息获取图像所含特征数据的一种方法,包括计算特征点的主方向,坐标,灰度值和梯度等信息。广泛应用在3D重建,目标跟踪,图像匹配等热门领域。20世纪70年代学者就提出了图像特征点的概念:某像素的一阶导数具有局部最大值,二阶导数为零,表示对象边缘变化不连续的方向,这个像素点就是图像的特征点
[13]
。1988年哈里斯等正式提出了一种通过点的灰度值变化计算特征的方法。哈里斯算法的核心思路是:利用微分算子,取代滑动窗口的移动,构建了2×2的哈里斯矩阵M,然后,计算角点响应函数:






 2000年,局部特征研究的一个突破方法被Lowe提出,这就是著名的SIFT(Scale Invariant Feature
Transform)算法。Lowe通过建立了图像金字塔,在不同尺度空间将DOG与不同尺度图片进行卷积,加速了特征的提取[13]
。2006年,Bay在SIFT算法的基础上,将哈里斯小波和积分图像相结合,实现了SURF(Speed Up Robust
Features)特征提取算法,该算法比SIFT快3倍,在图像旋转,尺度变换方面比SIFT更加稳定[14]
。为了能在手机,机器人等实时、低功耗设备上进行目标识别,图像拼接等功能,2011年,Rublee等提出了一个有效的代替SIFT和SURF的算法——ORB算法。通过实验表明,ORB算法的检测速度比SIFT算法快两个数量级,是SURF算法的3倍,且性能更加鲁棒。

 ORB算法是结合了著名的FAST特征点检测算法和BRIEF描述子生成算法,作为一种新的局部不变特征算法,ORB对图像的缩放,旋转,平移等变换,具有特征不变性
[1]
。RubLee等将BRIEF算法中的随机点比较生成的描述子方法,改善为在特征点的31×31的邻域内,生成随机点的5×5子窗口,采用积分和来生成描述子,使得鲁棒性增强。结合并改进这算法后,ORB的速度有了大幅提升。




 四 、ORB特征点检测算法(ORB keypoints detection algorithm)




 特征点检测算法在我之前的博客中讲解过,参考链接 ORB特征提取算法分析与实现,算法分解
<http://blog.csdn.net/qq_32998593/article/details/78653334>  !



 ORB利用FAST来检测特征点,并计算特征点主方向,生成oFAST(Oriented
FAST)。这种思路在利用FAST算法的快速检测性的同时,较好的解决FAST检测子的不具有方向性的缺点[24]。

 在FAST这篇论文中,提出了角点的定义:在以某一像素点为中心的邻域内,若有足够多的像素点灰度值与该中心像素值差别较大,则该点可能是角点[13]
。该算法的基本原理是,选定圆心像素点p,在半径为3的圆周内,有16个像素点[15]。如图2.1所示。





 在这圆周上,如果存在连续n个像素值与p的灰度值做差,如果绝对值同时大于或者小于t,则这个点为候选点,然后进一步筛选;否则直接判断为非候选点。

 因此,圆周上的每一个x点相对于中心点p必属于以下3种状态:




其中,
Ip表示中心点的灰度值,Ip->x表示以p点为圆心的圆周上的点x的灰度值,t表示阈值。状态d表示像素点x比中心点p暗,b表示像素点x比中心点p亮,s表示相似。

 为了加快计算,首先计算图中圆周上点1和9(垂直方向),如果1和9满足Ip->x<=Ip-t
或者Ip+t<=Ip->x,则继续计算图上的点5和13(水平方向)。如果有这4个点有3个或3个以上的点满足Ip->x<=Ip-t或者Ip+t<=Ip-t
,则进一步检查剩下的12个点,否则不是角点。

 按公式算出N:




 
如果N>=9(FAST-9)或者N>=12(FAST-12),则p为角点,官方推荐N取9,在速度和精度都能满足要求。但FAST本身就存在缺点:1)FAST没有角点响应函数;2)检测器的效率取决于排序问题;3)FAST没有引入多尺度特征。针对这几个问题,ORB算法计算采用:1、对于目标数量K为个关键点,先设定较低的阈值来得到大于K个关键点的候选点,然后根据Harris角点响应来对K个特征点进行排序,选择前K个特征点;2)采用图像金字塔,通过Harris滤波在每层金字塔中得到FAST特征
[1]。其中,Harris角点响应函数可以通过图像差分矩阵M得到:


 FAST特征点不具有方向性,在图像旋转情况下,性能很差。于是,RubLee等利用灰度质心法(IntensityCentriod)为每个特征点计算了主方向。

 灰度质心法是假设某特征点的灰度与该邻域重心之间存在偏移,通过这个特征点到重心的向量,就能算出该特征点的主方向[24]
。Rosin将邻域矩(moment)定义为:


 因此可以得到图像的0阶矩,1阶矩为:


 邻域质心为:
 
 得到一个角点到质心的向量OC 。因此,特征点主方向为:


其中,atan2()函数返回的是角点到(M01,M10)的方位角。计算中,不用考虑到角点在邻域中是较亮还是较暗的点,因为角度的测量是一致的,不依赖角点的类型。

 随后,通过了两个梯度测量来比较质心法,BIN和MAX。如图2.2所示,对模拟数据集中图像平面进行旋转并加上噪声后的方向的方差。


 从图中可以看出,灰度质心法(IC)在人工旋转和噪声的影响
,与BIN和MAX算法相比,具有最好的恢复主方向的性能,即使在较大的图像噪声和旋转下,均有良好的定向。




 五 、ORB描述子生成算法





 ORB算法采用了Calonder等提出的BRIEF算法,并在两个方面对BRIEF算法进行了改进:

 (1)采用积分图像解决BRIEF算法的噪声敏感性;

 (2)利用改进的FAST算法求得的特征点主方向,先对BRIEF生成的描述子进行旋转,后判别和二进制编码,使得描述子具有旋转不变性[25]。

 假设一副平滑的图像,在大小为S×S的邻域P中,进行τ测试:






























 
下一篇博文介绍如何实现ORB特征点提取算法,包括与SIFT和SURF算法的性能对比,以及FPGA实现实时高速特征点提取的结构设计,高速系统分析,以及特征点提取模块的构成!