基于特征的图像匹配算法研究(毕设)

目录

一、前言

二、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代码,想操作的可以去网上找,问我要也行。

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

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

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

  • 9
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我7plus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值