计算机视觉——python3的SIFT与harris特征匹配及sift原理描述

python实现图像sift特征检测 sift特征包括兴趣点检测器和描述子,是过去十年中最成功的图像局部描述子之一。sift描述算子具有非常强的稳健性,而且sift特征对于尺度、旋转和亮度都具有不变性,十分突出的点不会因光照、尺度、旋转等因素的改变而消失。因此,它可用于三维视角和噪声的可靠匹配。总结前人的结论sift算子可解决的问题有:• 目标的旋转、缩放、平移(RST)• 图像...
摘要由CSDN通过智能技术生成

python实现图像sift特征检测

     sift特征包括兴趣点检测器和描述子,是过去十年中最成功的图像局部描述子之一。sift描述算子具有非常强的稳健性,而且sift特征对于尺度、旋转和亮度都具有不变性,十分突出的点不会因光照、尺度、旋转等因素的改变而消失。因此,它可用于三维视角和噪声的可靠匹配。总结前人的结论sift算子可解决的问题有:

• 目标的旋转、缩放、平移(RST)
• 图像仿射/投影变换(视点viewpoint)
• 弱光照影响(illumination)
• 部分目标遮挡(occlusion)
• 杂物场景(clutter)
• 噪声

*参考资料

(1)python计算机视觉编程

(2)相关sift算子博客讲解

*运行环境

(1)使用python3.7版本,用IDLE编写py文件

(2)下载安装vlfeat包,版本0.9.20  官方下载连接:http://www.vlfeat.org/download/(注意要下载20版本,不然会出现找不到.sift文件)

(3)下载完成过后,把vlfeat里win64里的vl.dll和sift.exe和vl.lib复制粘贴到项目目录下:这样子环境配置基本上已完成。

(一)SIFT算法原理(尺度不变特征变换)

1.兴趣点检测

     关键点即是特征点,这些点是一些十分突出的点不会因光照、尺度、旋转等因素的改变而消失,比如角点、边缘点、暗区域的亮点以及亮区域的暗点。既然两幅图像中有相同的景物,那么使用某种方法分别提取各自的稳定点,这些点之间会有相互对应的匹配点。以下是怎么取图像关键点的思路:

  1. 建立尺度空间:其主要思想是通过对原始图像进行尺度变换,获得图像多尺度下的空间表示。从而实现边缘、角点检测和不同分辨率上的特征提取,以满足特征点的尺度不变性。而高斯核唯一可以产生 多尺度空间的核,一个图像的尺度空间,L(x, y, σ) ,定义为原始图像 I(x, y)与一个可变尺度的2维高斯函数G(x, y, σ) 卷积运算。

     2.高斯金字塔高斯金子塔的构建过程可分为两步:
                            (1)对图像做高斯平滑;
                            (2)对图像做降采样。
 为了让尺度体现其连续性,在简单下采样的基础上加上了高斯滤波。一幅图像可以产生几组(octave)图像,一组图像包括几层
(interval)图像。sift特征是使用高斯差分函数来定位兴趣点,其中有用到高斯卷积滤波对图像进行噪声处理以及降低细节层次。标准差越大即尺度越大图像越模糊图像轮廓就越明显。在DoG高斯差分金字塔对应DOG算子,需构建DOG金字塔可以通过高斯差分图像看出图像上的像素值变化情况。(如果没有变化,也就没有特征。特征必须是变化尽可能多的点。)DOG图像描绘的是目标的轮廓。

 

例如:对一张图片进行高斯滤波处理和没有进行高斯滤波处理比较,没有进行高斯处图片细节虽然很清晰,但是轮廓不明显,而经过高斯处理过后松鼠的轮廓就比较突出明显,这样有利于特征提取。

 

Dog算子在检测关键点的时候需要检测出局部极值点,极值点的搜索是在DoG 金字塔内进行的,这些极值点就是候选的特征点。在搜索之前,我们需要在DoG 金字塔内剔除那些像素值过小的点,因为这些像素具有较低的对比度,它们肯定不是稳定的特征点。极值点的搜索不仅需要在它所在尺度空间图像的邻域内进行,还需要在它的相邻尺度空间图像内进行,是通过每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。搜索的过程是这样的:从每组的第1 层开始,以第1 层为当前层,对第1 层的DoG 图像中的每个点取一个3×3×3 的立方体,立方体上下层分别为第0 层和第2 层。这样,搜索得到的极值点既有位置坐标(该点所在图像的空间坐标),又有尺度空间坐标(该点所在层的尺度)。当第1 层搜索完成后,再以第2 层为当前层,其过程与第1 层的搜索类似,以此类推。中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。但是由于Dog算子对图像边缘具有较强的边缘响应,所以要进行排除边缘响应,可以通过计算在该点位置尺度的2×2的Hessian矩阵得到,导数由采样点相邻差来估计。

最后通过下面方式得到关键点:

 

 

2.描述算子

上面所述的兴趣点(关键点)位置描述子给出兴趣点的位置 和尺度信息,为了实现旋转不变性,基于每个点周围图像梯度的方向和大小,sift描述算子使用主方向描述参考方向,主方向使用直方图来衡量。sift描述算子在每个像素点附近选取子区域网格,在每个子区域计算图像梯度方向直方图,拼接起来组成描述算子向量。sift描述算子是由4*4个子区域,每个子区域有8个方向,会产生128个小区间直方图(4*4*8=128)也就是一张图像的每一个像素点都有128维的特征向量来唯一标识,即使方向有变换,也可以通过主方向来同步变换达到旋转不变性。

 

3.关键点匹配

分别对模板图(参考图)和实时图(观测图)建立关键点描述子集合。目标的识别是通过两点集内关键点描述子的比对来完成具有128维的关键点描述子的相似性度量采用欧式距离。

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值