这段日子研究了很多的特征点检测与匹配,基本把Harris、Fast、SIFT、SURF、ORB、Censure、Brief、Brisk等各类特征检测子与描述子的论文和原理都大致了解了一遍,并进行了仿真和测试,综合来看,目前较新的FREAK描述方式(模仿人类视觉神经)比较具有实用价值和研究空间,下面将对FREAK描述进行分析、仿真,并且对下一步的研究方向提出总结。

FREAK提出的原论文的标题是FREAK-快速视网膜关键点,由此可见,发表在ICCV2012年的这篇提出的最新的异于SIFT和SURF等描述子的最新的FREAK描述子是与视网膜有着同样的特点,第一可见计算机视觉与其他学科的交叉和融合,第二可知计算机视觉的很多灵感起源于人类视觉的结构。通读原文全篇后可见,作者的意图是通过有效比较视网膜采样模式上的图像强度来计算二进制字符串的级联。FERAK的计算速度通常更快,内存负载更低,而且更具有鲁棒性,比较适合于嵌入式系统或实时系统,而且从近年来的趋势可知,二值描述子(如BRISK,FREAK)较以往更具有实际的应用性。

在FREAK中,作者提出的是使用视网膜形式的采样模板,同BRISK一样,采样像素分布在多个同心圆,但是采样像素的分布是按照指数形式的分布密度分布的,越接近同心圆的分布密度则越大。

该采样模板除了圆心的一个特征点之外,还包括另外7个同心圆,每个同心圆上各有6个采样像素均匀分布在各自的同心圆上,而且相邻同心圆的采样像素的分布是交错的,即每个同心圆6个采样像素正好分布在其相邻同心圆上6个采样像素的中间位置,角度相隔30度(360/12),则模板中共有1+7x6=43个采样像素。

为了提高抗干扰能力,需要对模板中的采样像素进行平滑滤波处理,与BRISK相似,不同的同心圆采用不同大小的滤波内核,与BRISK不同的是,FREAK内核的尺寸变化时呈现指数规律的(根据分布密度的特点),滤波的区域也有所重叠。重叠的好处在于可以获取更多的信息,提高描述符的可区分性。

对于归一化的采样模板来说,半径应该为1,(最外层同心圆的半径+滤波内核的半径),即最外侧的圆半径,则由外向内,归一化后的7个同心圆的半径为24/36,18/36,13/36,9/36,6/36,4/36,3/36。

相邻同心圆半径只差为6:5:4:3:2:1,采样像素的滤波内核半径都是各自所在同心圆半径的一半,而圆心处的特征点的滤波内核半径为1/24,一般来说,采用高斯滤波的方法效果更好。此时,滤波内核的半径就是高斯函数的标准差,均值滤波应该有着更快的特点,可以应用积分图像的方法,此时的滤波内核大小就是均值滤波的面积。

F表示二进制描述子,Pa是采样点对(与BRISK同理),N表示期望的二进制编码长度。

表示采样点对Pa中前一个采样点的像素值,同理,表示后一个采样点的像素值。

当然得到特征点的二进制描述符后,也就算完成了特征提取。但是FREAK还提出,将得到的Nbit二进制描述子进行筛选,希望得到更好的,更具有辨识度的描述子,也就是说要从中去粗取精。(也就是降维)

1、建立矩阵D,D的每一行是一个FREAK二进制描述符,即每一行有N个元素;在上图的采样模式中公有43个采样点,可以产生N=43*(43-1)/2=903个采样点对,也就是说矩阵D有903行列。

2、对矩阵D的每一列计算其均值,由于D中元素都是0/1分布的,均值在0.5附近说明该列具有高的方差;

3、每一列都有一个均值,以均值最接近0.5的排在第一位,均值离0.5越远的排在越靠后,对列进行排序;

4、选取前512列作为最终的二进制描述符。(也可以是256、128、64、32等)

原作者提出,通过实验,超过512并没有对原性能并没有很大的改善,所以原作者使用的是最佳的512个点。

小结:最原始的二进制长度为903,当然这包含了许多冗余或粗糙的信息,所以根据一定的方法取N个二进制长度,方法是建立矩阵D。假如提取到228个特征点,那么矩阵D应该是228行*903列,然后经过计算均值,将每个列重新排序,选取前N列,这个矩阵D就是228*N的矩阵了。当然这个N我在文中写得是512,你也可以是256、128、64、32这些都是可以的。 最终D的每一行仍然是一个特征点的描述符,只是更短小精悍而已,即降低了维度。由于FREAK描述符自身的圆形对称采样结构使其具有旋转不变性,采样的位置好半径随着尺度的变化使其具有尺度不变性,对每个采样点进行高斯模糊,也具有一定的抗噪性能,像素点的强度对比生成二进制描述子使其具有光照不变性。因此由上述产生的二进制描述子可以用来进行特征匹配。

作者还通过这个模型建立了方向特征的确立方式,由于特征点周围有43个采样点,可产生43*(43-1)/2=903个采样点对,FREAK算法选取其中45个长的、对称的采样点对来提取特征点的方向,采样点对如下:

其中:O表示局部梯度信息,M表示采样点对个数,G表示采样点对集合,Po表示采样点对的位置。

用于计算特征点角度的采样像素仅仅是最外层的5个同心圆上的采样像素,每个采样像素仅仅与其同一个同心圆上的采样像素按照对称的原则组成点对,如上图,每个同心圆上的点对组合为(0,3),(1,4),(2,5),(0,2),(1,3),(2,4),(3,5),(4,0),(5,1),每个同心圆有9个点对,5个同心圆有45个点对。即M=45,I(P)是经过平滑处理后的p点像素的灰度值,是45个点对中第T个点对的两个像素(一前一后),坐标为(x1(T),y1(T)),(x2(T),y2(T)),为两点距离,即,最终得到的角度为通过上式计算的O得到的Ox和Oy(水平梯度和垂直梯度)通过arctan获得:

即角度为

原著作者使用的是BRISK提取特征点+FREAK描述然后进行匹配,仿真效果欠佳,下面提供几个测试的结果:

基于SIFT特征点提取+FREAK描述

基于SURF特征点提取+FREAK描述

基于FAST特征点提取+FREAK描述

基于censure特征点提取+FREAK描述

基于BRIEF特征点提取+FREAK描述

原作者提出的 BRISK特征点提取+FREAK描述

对BRIESK(原作者使用)+FREAK描述+汉明距离匹配进行改进,使用了双向验证(即图1中第i个点匹配图2中第j个点,同时要求图二中第j个点也要匹配图1中的第i个点)以及RANSAN去除错配点,效果略好。

双目视觉立体匹配中引入极线约束减少搜素匹配时间和提高准确性(SURF检测+SURF描述子 2.60886s)

同样条件 SURF检测+FREAK描述子可以加快一倍时间 但是精确度有所下降。

对SURF+FREAK+交叉过滤+误匹配进行剔除,时间1.95s

对FAST+FREAK+交叉过滤+误匹配剔除,时间1.67s

 前期优化方案:引入KNN近邻筛选+RANSAC随机抽样一致性剔除误匹配点,提高匹配精度,测试效果很好,如下

SURF结合FREAK+暴力匹配(汉明距离)+KNN近邻筛选

SURF结合FREAK+暴力匹配(汉明距离)+KNN近邻筛选+Ransac进一步剔除误匹配

经过检验也得出其效果对尺度、旋转、亮度、噪声都具有很好的抗干扰能力。

后期优化方向:

在基于穷举搜索(暴力匹配)汉明距离的匹配方式时,应该还有更好的优化方案。

穷举搜索,即计算所有特征间的距离再根据要求进行筛选。穷举搜索能够给出最好的匹配结果,但是在面对大数据量时计算量太大导致耗时太长,并且最近邻并不能保证匹配是正确的,因此实际上没有计算最近邻的必要。实际应用中一般会寻找近似最近邻,仅仅要求大概率返回最近邻,通过降低对匹配结果的要求来加快匹配速度。只要保证大部分特征配对是正确的,那么就可以根据大部分结果排除少数错误匹配,从而保证后续图像处理结果的正确性。这些保证大部分最近邻结果正确的算法,也被称为快速近似最近邻算法。

通过总结和查阅资料可见,常见的近似最近邻算法有三大类,其中一类是局部敏感哈希,简称为LSH。LSH算法的核心思想在于两个相似特征经过哈希函数处理后依然保持高相似度,或者说属于同一类,这样的哈希函数被称为局部敏感哈希。LSH算法发展较早,早已被广泛应用到需要求解近似最近邻的场景中,如寻找相似文档。第二类算法是基于图的算法,构建特征相似度的图,根据很多学者已经发表的研究结果表明,这类方法结果较好,但计算复杂度普遍较高。

快速近似最近邻的第三类算法是基于树的算法,近年来出现了几种不亚于LSH的优秀算法,经典算法为k-d树。K-d树找出数据集中方差最高的维度,在这个维度上将数据分割为多个子集,递归执行分割多次直到符合要求。Kd树的缺点在于:(1)每次只根据一个维度进行分割,在特征维度较高时导致树深度太大从而降低搜索速度:(2)返回正确结果的可能性并不算高,要保证结果正确就必须进行回溯,检查其它子树的数据,过程复杂,搜索效率下降。针对k-d 树的缺点,ChanopSilpa-Anan等人提出Randomized k-d树,对同样的数据集根据多个方差较高的维度构建多棵不同的树,提高了结果的可信度,不需要回溯检查。

除了改进kd树,部分学者寻找新的方法。Lowe 等人提出了基于k- medoids和k-means聚类算法的快速近似最近邻算法这两种方法的基本思想都是利用聚类算法递归将数据聚为多类,将层次聚类结果构建成树,近似最近邻搜索则在所得树上进行。这两种方法主要有两个不同之处:

(1)基于k-medoids的并行层次聚类树的内节点和叶子节点都是数据集中的数据,而k-means给出的聚类中心一般不是已有数据,因此聚类树的内节点是k-means算法得到的聚类中心,叶子节点才是数据;

(2)采用不同的初始参数,k-medoids 算法得到的结果会不- -样,k-mneans 算法的结果则基本一样,因此基于k-medoids算法的聚类树可以使用randomized策略即同样数据构建多棵不同的树来进行优化,基于k-means方法的则不可以。

在计算机视觉和机器学习中,对于一个高维特征,找到训练数据中的最近邻计算代价是昂贵的。对于高维特征,尤其对于二值特征的匹配,multiple hierarchical clusteringtrees看似要比LSH方法乃至穷尽搜索更加有效,下一步将继续探究multiple hierarchical clusteringtrees(多层次聚类树),查阅相关资料,测试其是否能够优化目前的特征点提取与匹配架构。

这段期末之后的学习时间很集中,效率也很高,个人对这块的兴趣还是有一些的。在这个过程中,除了查阅文献、资料的能力有所提高,编程和动手能力也得到了提升,因为我觉得“不要一味看天,也要低头看路”这句话说得很好,所以还是对前一段时间的学习收货做了一次总结以脚踏实地,做到一步一个台阶,这也为自己后面的研究打下基础,做到有迹可循,留下存档。

PS:本文中暂未对KNN近邻筛选和RANSAC随机抽样一致性算法做解释和展开,我预计将在引入匹配优化后再总体进行总结和分析。

【计算机视觉】基于FREAK特征描述子的分析、仿真与思考相关推荐

  1. 自编码器深度分析+定制特征描述子构建初探

    1. 关于tailored 特征描述子 自从深度学习的繁荣,利用自编码器.孪生网络.对抗网络采用数据驱动的形式设计tailored 特征描述子 成为了计算机视觉领域发展的重要推动力, 这不仅大大削弱了 ...

  2. 三维计算机视觉(五)--特征描述子

    PPF 机器人视觉中有一项重要人物就是从场景中提取物体的位置,姿态.图像处理算法借助Deep Learning 的东风已经在图像的物体标记领域耍的飞起了.而从三维场景中提取物体还有待研究.目前已有的思 ...

  3. PCL中3D特征描述子Shot详解

    上周点云公众号开始分享群友们的反馈分享,由博主分配任务,半个月甚至一个月参与学习小伙伴的反馈给群主,并在微信交流群中进行学术交流,加强大家的阅读文献能力,并提高公众号的分享效果.已经有一些开始陆续反馈 ...

  4. PCL:点云特征描述子3D_object_recognition_(descriptors)

    PCL官网:https://pointclouds.org/ 翻译自该网站:http://robotica.unileon.es/index.php/PCL/OpenNI_tutorial_4:_3D ...

  5. 基于点云描述子的立体视觉里程计快速鲁棒的位置识别方法

    点云PCL免费知识星球,点云论文速读. 文章:A Fast and Robust Place Recognition Approach for Stereo Visual Odometry Using ...

  6. 图像特征描述子之BRISK

    原文站点:https://senitco.github.io/2017/07/12/image-feature-brisk/   BRISK(Binary Robust Invariant Scala ...

  7. sift计算描述子代码详解_浅谈SIFT特征描述子

    SIFT是我接触最早的图像局部特征描述子之一,其实最初,始终觉得局部特征描述子是些非常玄虚的东西.对于SIFT,这种感觉更是尤为强烈,"尺度空间""拉普拉斯高斯算子(Lo ...

  8. image.merge图像有什么变化_图像特征工程:HOG特征描述子介绍

    介绍 在机器学习算法的世界里,特征工程是非常重要的.实际上,作为一名数据科学家,这是我最喜欢的方面之一!从现有特征中设计新特征并改进模型的性能,这就是我们进行最多实验的地方. 世界上一些顶级数据科学家 ...

  9. 【特征匹配】BRIEF特征描述子原理及源码解析

    相关:Fast原理及源码解析 Harris原理及源码解析 SIFT原理及源码解析 SURF原理及源码解析 转载请注明出处: http://blog.csdn.net/luoshixian099/art ...

最新文章

  1. IOS 移除storyboard
  2. 教育部最新通知,中高考又有大变化,学生欲哭无泪,家长炸锅了
  3. java弱引用怎么手动释放,Java 如何有效地避免OOM:善于利用软引用和弱引用
  4. OpenCV模板匹配Template Matching
  5. 现代程序设计 学生情况调查
  6. uva 1629——Cake slicing
  7. BZOJ 4000: [TJOI2015]棋盘( 状压dp + 矩阵快速幂 )
  8. Git + GitHub 超详细知识笔记整理
  9. 脑洞大开!拿Transformer和CNN比较!犯错都像人类
  10. destools php_php DES加密算法实例分析
  11. python中的参数_python中参数解析
  12. 在C#中??和?分别是什么意思?
  13. 秀米复制到公众号格式变了_公众号文章下载神器!支持批量、多格式,可下载历史全部文章...
  14. 《An Attentive Survey of Attention Models》阅读笔记
  15. Swift - 29 - 参数的默认值
  16. Java学习笔记之StringBuilder类
  17. java mina框架教程_java mina框架的使用和一些自己的理解
  18. 软件测试面试必问的10个问题
  19. 《世界500强企业员工的50条生存法则》(Yanlz+Unity+SteamVR+5G+AI+VR云游戏+生存法则+潜规则+提升竞争力+术业有专攻+卓越理念+立钻哥哥+==)
  20. dx12的resource barrier

热门文章

  1. 还在着阶做子择时不试二阶
  2. S7-200 smart 虚拟机连接
  3. 重新安装windows 8 失败
  4. 当PS遇上Sketch 竟是棋逢对手
  5. 龙尚科技借力中国移动布局物联网“大连接”
  6. JavaScript---GO---Python三大语言爬虫
  7. 滴滴的防疫口罩识别技术和视觉比赛进展
  8. endnote怎么保存上次记录_endnote使用经验总结
  9. UVALive 7139 Rotation(模拟)
  10. 计算机类和鼠标类是什么关系,UML考试试题及答案7.doc