图像配准之特征点匹配的思考

最近赶时髦,看了一些智能优化算法如蚁群算法,还有机器学习的一些东西,就想着怎么把这些先进的东西用在图像配准中。头脑风暴了一下,觉得在已经检测到两幅图像的特征点的基础上,就如何对它们进行匹配似乎有优化的空间。

匹配的过程其实是找对应点的过程,对应点指的是在各自图像中相对位置一样的点,如图像进行刚性变换之后,图像点在坐标虽然改变了,但是它们之间的相对位置是不会变的,三角形的直角对应直角点,锐角对应锐角点。但是如何在对应点坐标之间建立关系呢,看代码的时候看到利用  cv::perspectiveTransform(dstPoints, dstPoints, homography.inv())将实验图像的特征点变换到参考图像同一个坐标系中,再进行欧式距离的计算,这个暗含了估计的变换矩阵是正确的,而且这其实是为了衡量变换矩阵估计准确性的标准,并不是为了得到匹配对。这才想起来其实不用太多考虑坐标、坐标系,因为我们检测得到特征点,更准确说是描述子,描述子具有旋转不变性。这个描述子已经把特征点的坐标、邻域的梯度(包括方向、大小)都包含了。得到描述子的过程就包含了将坐标轴旋转为关键点方向。所以直接比较128维描述子(对SIFT来说),就可以得到哪些特征点是对应的。这里又有两种策略,一种是穷举法https://docs.opencv.org/2.4/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#bfmatcher,一种是快速最近邻搜索包(Fast_Library_for_Approximate_Nearest_Neighbors)https://docs.opencv.org/2.4/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html#flannbasedmatcher。因为描述子一般都是高维向量,所以要优化的话这会是一个值得关注的地方。

看看match具体是怎么实现的。之前博客中提到的图像配准算法比较对matchFeatures进行了重载:

void FeatureAlgorithm::matchFeatures(constDescriptors& train, const Descriptors& query, Matches& matches)const

{

   matcher->match(query, train, matches);

}

 

void FeatureAlgorithm::matchFeatures(constDescriptors& train, const Descriptors& query, int k,std::vector<Matches>& matches) const//matchFeatures的重载,分别利用穷举和knn,参数有int型k就是knn

{

   assert(knMatchSupported);

   matcher->knnMatch(query, train, matches, k);

}

matcher是OpenCV中的feature2 dmodule中的cv::DescriptorMatcher。在feature2d中对https://docs.opencv.org/2.4/modules/features2d/doc/features2d.htmlmatch也进行了重载,这里matchFeatures用的是match的第一种变形,把train descriptors当做变量输入函数,并且利用穷举法搜索。matchFeatures的第二个重载用的是k近邻点算法,从query集合中的每个描述子中找到k个最好的匹配对,返回k个距离逐渐增大的匹配对(k通常不大于20)。这与通常意义上的匹配是不一样的,这里不是一一对应的,而是一对多。

KNN中是依靠周围K个已知类别点来判断待分类点的类别的,就像是物以类聚,这要求有一个先验知识,即一个数据和标签已知的训练集。k个近邻点中哪一类更多那么待判断点就更有可能属于那一类。


那么,具体在特征点匹配过程中如何使用KNN算法呢?特征点匹配和数据库查、图像检索本质上是同一个问题,都可以归结为一个通过距离函数在高维矢量之间进行相似性检索的问题,如何快速而准确地找到查询点的近邻,不少人提出了很多高维空间索引结构和近似查询的算法。https://blog.csdn.net/v_july_v/article/details/8203674k-d树(本质是一种平衡二叉树)就是对搜索空间进行不重叠划分,实现k近邻算法的一种方法。

结合Rob-Hess的源码和参考3,用建立大顶堆的思想实现数据中最小的k个数据的查找。即用容量为k的最大堆存储最小的k个数,此时,k1<k2<...<kmax(kmax设为大顶堆中最大元素)。遍历一次数列,n,每次遍历一个元素x,与堆顶元素比较,x<kmax,更新堆(用时logk),否则不更新堆。这样下来,总费时O(n*logk)。

那么这里还有一个问题就是在匹配过程中,我们只知道一系列高维数据,但是是对一个query在train中找距离最近的前k个,我们还需要先求query和所有train特征点之间的距离(若利用KD树的搜索策略,应该不会有重复计算)。距离的表示有很多种方法,参考2中也做了一番整理,常见的有欧式距离、曼哈顿距离(城市街区距离)、切比雪夫距离(国际象棋国王,坐标差最大值)、马氏距离(协方差距离,适合分类)、夹角余弦距离(根据向量方向重合度判断相似性,用于文本分类的词袋模型)、杰卡德相似系数(两个集合A和B的交集元素在A,B的并集中所占的比例)。距离的选择,一是要保证准确性,即保证不对应的特征点的距离尽可能大,相对应的特征点距离尽可能小,另一方面要使运算量小。Rob-Hess采用了欧式距离作为比较描述子的标准。对图像1中的每一个特征点利用BBF找到了最近邻的2个对应点,并分别计算出了它们之间的欧式距离。最近邻小于次近邻的0.49时,把最近邻作为对应点。

针对高维数据处理,有一个方法是PCA主成分分析。还有核机制?

Ng所举的例子是利用单幅图像重构了场景的3D模型。如果可以实现3D模型,那么我们就完全可以将图像配准到任何视角,而不是简单的透视变换。

还有一种思路是将特征点聚类,找到图像中的主体,即将主体内容和背景分离开来。将主体的中心点(数据中心化)和边界找出来。

Flann

Reference:

1.https://blog.csdn.net/icvpr/article/details/8491369

2.https://blog.csdn.net/v_july_v/article/details/8203674

3.https://blog.csdn.net/v_JULY_v/article/details/6370650

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

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

相关文章

指针%p输出的一些认识

还是看源码发现的问题 static int import_lowe_features( char*filename, struct feature** features ) 这个函数的作用是将txt文件中的Lowe的特征点导入到feature结构体中。在这个函数中第二个参数是指向结构体的指针的指针。 f calloc( n, sizeof(struct feature) );//在内存…

全球智慧医疗产业发展现状

来源&#xff1a;无锡情报所摘要&#xff1a;全球智慧医疗市场主要集中在美国、欧洲、日本和中国,而产品生产主要集中在美国、欧洲和日本。 随着大数据、云计算、物联网和人工智能技术快速发展和普及&#xff0c;运用互联网应用平台提升医疗资源的使用效率、提高救治和服务水平…

2018AI和机器学习界的12个重大收购案

来源&#xff1a;网络大数据据IDC声称&#xff0c;到2018年&#xff0c;全球人工智能(AI)和认知系统支出将达到190亿美元&#xff0c;这比2017年的支出总额增加约54%。并购在不断发生。仅2017年就见证了几起大宗收购&#xff0c;比如雅虎被Verizon收购、苹果收购Shazam等。知名…

PCA对特征点描述子降维

降维在机器学习领域其实是很重要的一部分&#xff0c;因为在高维情形下回出现样本稀疏&#xff0c;计算距离、内积困难&#xff0c;是所有机器学习面临的共同问题&#xff0c;被称为维数灾难&#xff08;Curse of dimensionality&#xff09;&#xff0c;而降维就是解决的一个办…

C语言基础知识整理

一、 关于sizeof和strlen。Sizeof&#xff08;&#xff09;用于计算某类型或者某变量在内存中所占空间。比如整数分为short型&#xff0c;int型&#xff0c;long整型&#xff0c;分别占2,2/4,4个字节&#xff0c;int型具体占用几个字节和编译系统有关。我们输入字符串时通常用c…

【2017-2019】Gartner战略技术趋势一览

来源&#xff1a;学术plus 、装备参考近期&#xff0c;Gartner公布了2019年十大战略技术趋势的预测&#xff0c;值此之际&#xff0c;本文总结回顾并简要分析了2017-2019三年的战略趋势变化。Gartner副总裁兼研究员David Cearley指出&#xff1a;在智能、数字、网格三大领域下的…

目标检测必看——RCNN是怎样融合了分类与回归,CNN与SVM

人和动物的区别之一是人能使用工具&#xff0c;而在人开始使用磨制石器时人类进入新石器时代。在目标检测领域&#xff0c;也有一个划时代的算法&#xff0c;在它之后目标检测开始进入深度学习的时代——它就是今天的主角&#xff1a;R-CNN。在RCNN之后&#xff0c;出现了更多优…

《自然》杂志:面对“电车难题”,不同国家的人有不同的道德选择

来源&#xff1a;36Kr电车难题原本只是一个思想实验。但是无人车的发展却绕不开这个问题。因为机器在无论如何都会撞死人的情况下必须靠预先植入的道德代码做出判断&#xff1a;该牺牲谁&#xff0c;该保谁。但是一项有全球230万人参与的调查表明&#xff1a;这个问题并不存在普…

Mac OS X Terminal 101:终端使用初级教程

文章目录1 为什么要使用命令行/如何开启命令行&#xff1f;2 初识Command Line3 关于 man 命令4 命令行&#xff0c;文件和路径 4.1 两种路径&#xff1a;绝对路径和相对路径4.2 切换到其他路径和目录4.3 处理特殊字符4.4 查看隐藏文件4.5 前往其他卷5 用Command-Line管理文件 …

Fast R-CNN整体把握

RCNN很好地解决了目标检测分类和定位的问题。但是缺点是速度太慢。 原因1&#xff1a;2k个候选区域都要经过变形成统一的正方形才能依次输入CNN进行特征提取。候选区域可能是互相包含的&#xff0c;这就导致原图同一个区域特征的重复提取。 原因2&#xff1a;RCNN的分类和回归…

2万字看完腾讯最纯粹的一届WE大会:从黑洞、虫洞到克隆猴

来源&#xff1a;虎嗅APP腾讯还有梦想&#xff0c;因为腾讯还有WE大会。5年来&#xff0c;腾讯从全世界邀请了几十位难得一见的科学家不远万里来到北京展览馆&#xff0c;比如去年邀请的剑桥大学教授、著名宇宙学家霍金&#xff08;视频演讲&#xff09;&#xff0c;不想成为绝…

Fater R-CNN 整体把握

在R-CNN中提到过&#xff0c;候选区域的提取和之后的目标检测其实是独立的&#xff0c;所以我们可以使用任意的算法如SS。Fast-RCNN改进的是目标检测部分&#xff0c;但是其实候选区域的提取也挺费时的&#xff0c;Faster R-CNN就把改进方向放在了这里。 我们已经领略到了CNN的…

马斯克,特斯拉首席小白鼠

来源&#xff1a;量子位伊隆马斯克&#xff0c;比你想的还要激进。作为特斯拉CEO&#xff0c;马斯克经常一边自己坐在Model S上&#xff0c;一边召开电话会议。车辆的驾驶交给Autopilot&#xff0c;也就是那个时不时会出次意外的自动驾驶系统。他这么做不仅仅是想节约时间&…

windows下caffe+CPUOnly实现MNIST手写分类

工具下载 微软官方移植的Caffe&#xff1a;https://github.com/Microsoft/caffe 对属性表的操作需要把实例属性表的后缀改成vs可用的.props 打开同一个文件夹下的Caffe.sln&#xff0c;查看其中的属性表<CpuOnlyBuild>true</CpuOnlyBuild><UseCuDNN>false<…

Yann LeCun专访:我不觉得自己有天分,但是我一直往聪明人堆里钻

来源&#xff1a;AI 科技评论摘要&#xff1a;纽约大学教授、Facebook 副总裁与首席 AI 科学家 Yann LeCun 由于对深度学习的突出贡献&#xff0c;被誉为深度学习的「三驾马车」之一&#xff0c;更被称为「CNN」之父。Yann LeCun 也一直非常活跃&#xff0c;发论文、教学、创立…

任务分配调整

在经过新一轮分工讨论后&#xff0c;我们将我们最初的分工做了一次更新。截图于此。但是同样&#xff0c;基于敏捷开发的原则&#xff0c;任务将会在过程中为适应遇到的情况而不断更新。 请大家及时完成各自任务&#xff0c;并每天22点之前在tfs上更新完毕&#xff0c;同时将当…

以LeNet-5为例理解CNN

在用caffe实现对MNIST手写数字分类的过程中发现利用的网络是LetNet-5.决定从这个网络入手好好认识一下CNN。 LeNet-5早在1998年就出现了&#xff08;5表示5层模型&#xff09;&#xff0c;标志着CNN的诞生。以其作者YannLeCun的名字命名。但是却没有得到广泛的应用&#xff0c;…

任正非最新谈话:直到2006年,我才真正抛弃自杀的念头

来源&#xff1a;世界科技创新论坛摘要&#xff1a;日前&#xff0c;一份任正非会见索尼CEO吉田宪一郎会谈纪要流出&#xff0c;这份纪要以吉田宪一郎发问任正非的视角&#xff0c;揭开了不少华为鲜为人知的故事&#xff0c;其中涉及华为的管理、创业之初的故事&#xff0c;还有…

前沿 | 历时十二年!曼彻斯特百万级神经元的类脑超算终开启

具有百万处理器内核的「脉冲神经网络架构」或 SpiNNaker&#xff0c;每秒能完成约 200 兆次运算。来源&#xff1a;机器之心摘要&#xff1a;这台世界最大的神经形态超级计算机由曼彻斯特大学计算机科学学院设计和制造&#xff0c;它被设计和制造成与人脑相同的工作方式&#x…

Caffe中的卷积实现

https://www.zhihu.com/question/28385679 https://github.com/Yangqing/caffe/wiki/Convolution-in-Caffe:-a-memo 作者贾扬清亲自解释了这个问题。Caffe框架是他在研究生毕业毕业前两个月的时间写的&#xff0c;自然有一些缺点&#xff08;占用内存方面&#xff09;。其实卷积…