基于特征的图像匹配算法研究(毕设)_请叫我7plus的博客-程序员宅基地_基于特征的匹配算法

技术标签: 图像匹配  计算机视觉  图像识别  

目录

一、前言

二、SIFT算法

1、寻找特征点

2、寻找主方向

3、构建描述符 

 4、总结

三、SURF算法(不看后悔)

1、思路整理

2、寻找特征点

2.1构建Hessian矩阵

2.1生产尺度空间

3、寻找主方向

4、构建描述符

5、总结

四、算法改进思路


一、前言

        本文章只讲解原理于思路,具体代码可以自行去寻找学习。

        “图像匹配”我对它的理解就是:两张图片,有没有相同的地方,如果有就是匹配,如果没有那就是不匹配。大概概念就是这样,具体的用途就很多了,你可以发动你聪明的小脑瓜去想想。>_<

        本文只是研究了三种经典的点特征图像匹配算法:SIFT算法,SURF算法和ORB算法,其实这三种算法的博客网上有很多,但是对于一些细节总是不能很清晰的阐述所以写下本文。

二、SIFT算法

        在讲解第一个算法的时候我会先提供一下我的思路:图像匹配是为了分别找到两张图像中的一些“特殊点”,通过比对两张图的“特殊点”去判断两张图像是否匹配。那么什么是图像的“特殊点”呢?聪明的小脑瓜快去想想。>_<

        SIFT算法很经典的一种算法,由Lowe大牛创作,在这里我将它的步骤分成:1、寻找特征点;2、寻找主方向;3、描述特征点。

1、寻找特征点

         在这里将构建高斯金字塔和差分金字塔等操作归纳为一步。

        首先介绍一下它寻找特征点的思路,在这里我以一种需求渐进式的思路来讲解。

        1.我要找到特征点,那么咋样算是特征点呢?

        答:一张图像在计算机中表示可以看做一个由像素点的值构成的大矩阵,可以将一些像素值变化大的点或者一些极值点作为特征点。

        2.图像在实际情况下可能会产生模糊度,导致图像特征点提取困难,该怎么做?

        答:可以先对图像进行高斯平滑(也就是卷积,会使得图像模糊)。之后再提取问题1中“特征点”。但是考虑到实际的模糊程度我们并不知晓,因此需要对图像进行不同参数的高斯平滑,这样我们就会得到很多的图像如下图:

        这样再去按照问题1的方法去寻找“特征点”就会很麻烦,因为你得去一幅图一幅图寻找。所以就有了差分金字塔!如下图:

        将经过高斯平滑处理的图像进行作差,得到高斯差分图像,再去寻找高斯差分图像中的最大值点,在这里要通过比较周围26个点,如下所示:

        这样我们会得到一个什么样的点呢?聪明的小脑瓜快去想想。>_<。是不是变化最大的点?是不是就是极值点?是不是就是我们要找的特征点?

        为什么呢?作差在比较大小得到变化最大的点,你可以去联想一下离散的导数。

        3.实际中图像的尺寸也可能发生变化,你怎么保证两张尺寸不一样的图像去匹配呢?

        答:提前对图像进行尺度变化,类似于问题2的解决方法,如下图:

        在这里以相同尺寸大小的图像为一组(这里作图时出现了一点错误),一组之中不同参数的高斯平滑分为不同层,高斯金字塔模型就构建好了!如下图:

        构建好模型之后还有一些精确定位方法去对特征点进行精确定位,去除不稳定点提高算法精确度。

         以上三个问题阐述了高斯金字塔的作用。在这里一些高斯卷积公式、高斯差分函数、精确定位的公式不在赘述,读者可以自行去查阅资料。

2、寻找主方向

        4.实际中图像可能会旋转,我该怎么使得图像在旋转的时候也可以正常匹配?
        答:为了让计算机在一些图片旋转的复杂情况下仍然能够正常匹配,该算法引出了主方向的概念。这个主方向可以帮助构建描述符,使得描述符当中包含旋转的信息。每一个特征点都有一个主方向,主方向的提取方法有很多,SIFT 算法采用的方法是统计特征点邻域内的灰度梯度方向,以 30°或 45°为一个方向。统计成 梯度直方图。峰值最高的方向就是该特征点的主方向,距离峰值差不多的方向可以确定为辅方向。 

        通过提取到主方向,在对特征点进行构建描述符的时候,以主方向作为基准,这样就能使得上述问题得到改善。 

3、构建描述符 

        图像匹配时,需要一个量去表示图像,对两张图像之间的量进行比对就可以判断相似性,这个量就是描述符。在SIFT算法中检测到的特征点有很多,所以需要对每个点进行描述。结合上一步当中的主方向,可以使得构建出的描述符具有旋转不变性。构建描述符的方法类似于提取主方向,不同的是这一步会将邻域分成一个个4×4的子邻域,从中提取出一个8维的向量,视具体子邻域的个数,最后排列成一个更高维的向量。一般生成一个128维的描述符。描述符的构建方式如图所示:

 4、总结

        SIFT算法可以说是一个很强大的点特征图像匹配算法,构建的高斯金字塔使得算法具有了模糊不变性和尺度变形,提取的主方向再与构建的描述符结合起来使得算法具有了旋转不变性,这样该算法在实际应用中就具有了稳定性,不会因为实际操作中距离物体远近、光学传感器旋转等问题造成图像匹配错误。但是这一系列的操作也使得该算法的速度不能很好的得到提升。

三、SURF算法(不看后悔)

1、思路整理

        在学习SURF算法的时候对它的基本步骤和原理总是不能很好地理解,尤其是在寻找特征点的地方。看了很多文章和大佬写的博客,总算理清了思路。

2、寻找特征点

        很多文章总说SURF算法通过构建Hessian矩阵和积分图的应用大大提高了算法的运行速度。。。。只知道提高了,但是怎么提高的呢?且听我慢慢道来(如下是我的论文!) 

2.1构建Hessian矩阵

         在这里该算法定义的特征点就是明暗变化最大的点,采用Hessian矩阵行列式的极大值来判    断。Hessian矩阵行列式如下:

Det(H)=L_{xx}(x,\sigma )L_{yy}(x,\sigma )-L_{xy}(x,\sigma )L_{xy}(x,\sigma )

         所以,Hessian矩阵的构建就变得很重要了。对一幅图像I中的任意点(x,y),其Hessian矩阵H为:

 H(x,\sigma )=\begin{pmatrix}L_{xx}(x,\sigma ) &L_{xx}(x,\sigma ) & \\ L_{xy}(x,\sigma ) & L_{yy}(x,\sigma ) \end{pmatrix}

        式中L_{xx}(x,\sigma )L_{yy}(x,\sigma )L_{xy}(x,\sigma )是高斯二阶微分在点X=(x,y)处与图像的卷积,下标的不同与高斯二阶微分方向不同有关,如下图:

        这个图就是高斯滤波的模板,对应小方块就是卷积时,各个原始图像的像素应该乘上的系数。这个系数是高斯函数经过对y二阶偏导得到的。

        考虑到要对全图进行Hessian矩阵运算,但是高斯二阶微分的计算确实很复杂,为了简化运算,提高计算速度,SURF采用盒子滤波来代替上述微分计算,该滤波器大大提高了计算速度,且性能近似相等。盒子滤波器模板如图所示:

        由上图可以看出模板的系数,即白色、黑色小方块所代表的值得到了极大的简化。

        这时Hessian矩阵H

H(x,\sigma )=\begin{pmatrix}D_{xx}(x,\sigma ) &D_{xx}(x,\sigma ) & \\ D_{xy}(x,\sigma ) & D_{yy}(x,\sigma ) \end{pmatrix}

         这个时候,考虑到用盒子滤波代替了高斯二阶微分滤波,这种代替会产生误差,故需要对Hessian矩阵的行列式进行补偿,如下式所示:

Det(H)=D_{xx}D_{yy}-\omega^{2} D_{xy}^{2}

        式中的\omega一般取0.9。 

        如果只是这样的提升,SURF算法也不会成为现在主流的算法之一。该算法作者在使用盒子滤波器的同时,将积分图与其结合了起来,使得算法复杂度得到了很大的改善,极大提高了运算速度。具体原理如下所述。

        知道用盒子滤波器与图像中一点(x,y)进行卷积时,就是各个图像的像素应该乘上模板的系数之后再相加,而运用积分图后,就不需要一个个对应相乘相加了,只需要知道卷积区域的四个端点,在积分图上取值,在做加减运算即可。如下图:

        当要计算Rd时只需要1、4处的值相加减去2、3处的值就好了。

2.1生产尺度空间

        SURF算法构建尺度空间也是和SIFT算法一样分成组和层,但是有一点不同就是在SIFT算法中需要对图像进行隔点取样以减小图像尺寸,但是在SURF算法中是不减小图像尺寸的,而是改变模板的大小以此来达到图像尺寸减小的目的。

         SURF算法检测到特征点之后也需要一些精确定位函数进行一个精确的定位。

3、寻找主方向

        主方向的提取方法有很多,SURF算法先定位到特征点,然后获取它的圆形邻域,在其中计算Haar小波特征,然后统计好数据。通过比对那个方向上的特征响应值累计最大,那个方向就作为主方向。

4、构建描述符

        类似于SIFT算法,不再赘述。

5、总结

  1. 运算高速性。SURF算法中将Hessian矩阵与积分图像进行了结合,通过积分图简化了近似高斯二阶微分的运算,极大提高了运算速度。
  2. 光照不变性。Haar小波特征可以在不同光照下仍然稳定,所以使得该算法的描述符当中有了关于光照的信息,使得稳定性进一步增强。

四、算法改进思路

        SURF算法的鲁棒性是很好的,这得益于Hessian矩阵+积分图的应用,所以可以使用SURF算法作为提取特征点的方法 

        构建描述符的方法可以采用ORB算法,这样一个简单地改进思路就有了。我具体去实现了一下,效果还算可以。

        我用的代码是网上找到的开源的MATLAB代码,想操作的可以去网上找,问我要也行。

        我只是一个小白。。。。。

        我一点代码都没讲!!!!!

        有啥问题的我们也可以一起讨论!!!!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41544435/article/details/118657045

智能推荐

OSI七层协议与TCP/IP四层协议_weixin_30807779的博客-程序员宅基地

物理层协议:负责0、1比特流(0/1序列)与电压的高低、逛的闪灭之间的转换。规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性;该层为上层协议提供了一个传输数据的物理媒体,只是说明标准。在这一层,数据的单位称为比特(bit)(注:bit和字节Byte,我们常说的1字节8位2进制即:1B=8bit)。属于物理层定义的典型规范代表包括:EIA/TIA RS...

python参数传递的*args和**kwargs_木禾DING的博客-程序员宅基地

多个实参,放到一个元组里面,以*开头,可以传多个参数;**是形参中按照关键字传值把多余的传值以字典的方式呈现*args:表示的就是将实参中按照位置传值,多出来的值都给args,且以元组的方式呈现,主要是用来表示函数接收可变长度的非关键字参数列表作为函数的输入。**kwargs:表示的就是形参中按照关键字传值把多余的传值以字典的方式呈现主要是用来表示函数接收可变长度的关键字参数列...

【POJ 2485】Highways(Prim最小生成树)_dingguayi7025的博客-程序员宅基地

题目Prim算法:任选一个点,加入集合,找出和它最近的点,加入集合,然后用加入集合的点去更新其它点的最近距离......这题求最小生成树最大的边,于是每次更新一下最大边。#include &lt;cstdio&gt;#define max(x, y) ((x) &gt; (y) ? (x) : (y))#define N 505int t, n, g[N][N],...

jquery 全屏插件_5个jQuery响应式全屏背景图片插件_dingshi7798的博客-程序员宅基地

jquery 全屏插件 随着现在出现了以全屏背景炫耀其图像的网站,我整理了一份我认为是5种最佳的jQuery响应式全屏背景图像插件的快速列表。 创建一些漂亮的响应式背景,幻灯片,过渡等。 如果您不需要jQuery,我会提供指向纯CSS背景图片的链接。 请享用! :) 相关文章: 5个jQuery背景视频插件 1. Vegas Background jQuery插件 Vegas是一个...

java中break内外循环,java 中break如何跳出外部循环_努力的大头兵的博客-程序员宅基地

学习就是为了不断的看到自己的知识盲点,然后改正,以前知道如何使用break来跳出循环,突然学习到可以用break跳出外部的循环(以前只知道怎么调本次的循环)。上正题代码如下:break跳出本次循环:public static void main(String[] args) {for (int i = 0; i &lt; 10; i++) {for (int j = 0; j &lt;=10; j...

一条SQL查询出每门课程的成绩都大于80的学生姓名是一道有歧义的题吗?_powerfuler的博客-程序员宅基地

‘用一条SQL语句查询出每门课程的成绩都大于80的学生姓名’是一道歧义题吗? name   kecheng    fenshu  张三     语文             81 张三     数学             90 李四     语文             76 李四     数学             90 王五     语文             81 王五     数学 ...

随便推点

Oracle TNSListener服务启动后自动停止问题_一剑平江湖的博客-程序员宅基地_tnslistener服务启动后停止

一直都连公司的数据库,今天突然要用本机的数据库,可是却发现我的TNSListener 启动后自动停止,又试了两次还是不行,上网搜索了一下,发现和我遇到一样问题人还真是挺多的。网上一般有这么几种说法方法1.直接修改 listener.ora我机器上的路径是: D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora 修改其中的

Hdu--5060(数学)_dingdi3021的博客-程序员宅基地

2014-10-0620:43:27思路:给这题跪了。。推了好久- = 数学太渣。  学到了一个重要的公式(其实自己推推也很快出来的):球冠公式:pi * h^2 * (3R - h) / 3,R为球的半径,h为球冠的高。 1 /***********************************************************************...

jenkins部署springboot项目jar包_菜鸟的奋斗ing的博客-程序员宅基地

前言:随着互联网架构的快速发展,传统的一个war包打天下的场景逐渐被微服务所替代,而是将项目按照业务拆分成多个微服务。一般情况下微服务都是将项目打成jar包,然后部署,今天主要分享的是如何使用jenkins部署jar包,与传统的war包部署的方式还是有差异,因为部署war包只要将war包扔到tomcat中即可,而jar包需要使用java -jar xxx.jar才能运行起来一、jenkins环...

深入理解UITableView_diling8782的博客-程序员宅基地

基本介绍UITableView有两种风格:UITableViewStylePlain和UITableViewStyleGrouped。这两者操作起来其实并没有本质区别,只是后者按分组样式显示前者按照普通样式显示而已。大家先看一下两者的应用:1&gt;分组样式2&gt;不分组样式大家可以看到在UITableView中数据只有行的概念,并没有...

学书次第之图_一剑平江湖的博客-程序员宅基地

学书次第之图      大楷 中兴颂 东方朔碑 万安桥记(八岁至十岁)   中楷 九成宫颂 虞恭公碑   姚恭公墓志   遗教经(十一岁至十三岁)   小楷 宣示表   戎路表 乐毅论   力命表 曹

讲述一下一个还没毕业的科班程序猿的求职历程_dilaodi6495的博客-程序员宅基地

介绍下自己。。。上周日刚刚到达北京,23号开始第一家的面试历程,其他详细信息可以看一下我的上一篇博客http://www.cnblogs.com/Zhang-silence/p/6866981.html昨天刚刚复试通过,是一家朝阳区的公司,感觉技术氛围很适合自己,HR人漂亮人也好。下月一日入职,在等录用的邮件。。。恩,第一天初试,应该是来北京的第一次面试,给我的感觉就...

推荐文章

热门文章

相关标签