【火炉炼AI】机器学习049-提取图像的SIFT特征点

栏目: Python · 发布时间: 6年前

内容简介:(本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )图像中的特征点,就是某一幅图像区别于其他图像的关键点位,在进行这些关键点位的检测时,我们要考虑几个问题,即1,不管怎么旋转目标,要保持目标的特征点不变(即旋转不变性),2,不管这个目标是变大还是变小,其特征点也要保持不变(即尺度不变性),还有比如要求光照不变性等等。目前对于特征点位的描述有很多种方法和算子,常见的有SIFT特征描述算子、SURF特征描

(本文所使用的 Python 库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )

图像中的特征点,就是某一幅图像区别于其他图像的关键点位,在进行这些关键点位的检测时,我们要考虑几个问题,即1,不管怎么旋转目标,要保持目标的特征点不变(即旋转不变性),2,不管这个目标是变大还是变小,其特征点也要保持不变(即尺度不变性),还有比如要求光照不变性等等。

目前对于特征点位的描述有很多种方法和算子,常见的有SIFT特征描述算子、SURF特征描述算子、ORB特征描述算子、HOG特征描述、LBP特征描述以及Harr特征描述。关于这几种算子和特征描述的区别,可以参考博文: 图像特征检测描述(一):SIFT、SURF、ORB、HOG、LBP特征的原理概述及OpenCV代码实现

SIFT特征点,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述。SIFT特征点在图像处理和计算机视觉领域有着很重要的作用。

SIFT特征点具有很多优点:

1.SIFT特征是图像的局部特征,其对旋转、尺度缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定程度的稳定性;

2.区分性好,信息量丰富,适用于在海量特征数据库中进行快速、准确的匹配;

3.多量性,即使少数的几个物体也可以产生大量的SIFT特征向量;

4.高速性,经优化的SIFT匹配算法甚至可以达到实时的要求;

5.可扩展性,可以很方便的与其他形式的特征向量进行联合。

对SIFT特征点的提取主要包括以下四个步骤:

1.尺度空间极值检测:搜索所有尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。

2.关键点定位:在每个候选的位置上,通过一个拟合精细的模型来确定位置和尺度。关键点的选择依据于它们的稳定程度。

3.方向确定:基于图像局部的梯度方向,分配给每个关键点位置一个或多个方向。所有后面的对图像数据的操作都相对于关键点的方向、尺度和位置进行变换,从而提供对于这些变换的不变性。

4.关键点描述:在每个关键点周围的邻域内,在选定的尺度上测量图像局部的梯度。这些梯度被变换成一种表示,这种表示允许比较大的局部形状的变形和光照变化。

关于SIFT的数学推导和具体含义,可以参考这篇博文:SIFT特征详解

1. 提取SIFT特征点

1.1 安装opencv-contrib-python模块

一般我们使用的是opencv-python模块,但是这个模块中没有xfeatures2d这个方法,因为SIFT算法已经被申请专利,故而从opencv-python中剔除了。

关于这个模块的安装,网上有很多个版本,我也踩了好几个坑,最后发现下面的方法是可用的,先卸载原先的opencv-python模块(如果原先的opencv-python模块的版本号是3.4.2.16,则不需要卸载)。然后安装3.4.2.16这个版本的opencv-python和 opencv-contrib-python即可。

安装方法:

pip install opencv-python==3.4.2.16

pip install opencv-contrib-python==3.4.2.16

1.2 提取SIFT特征点

首先构建SIFT特征点检测器对象,然后用这个检测器对象来检测灰度图中的特征点

sift = cv2.xfeatures2d.SIFT_create() # 构建SIFT特征点检测器对象
keypoints = sift.detect(gray, None) # 用SIFT特征点检测器对象检测灰度图中的特征点
复制代码
# 将keypoints绘制到原图中
img_sift = np.copy(img)
cv2.drawKeypoints(img, keypoints, img_sift, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

# 显示绘制有特征点的图像
plt.figure(12,figsize=(15,30))
plt.subplot(121)
img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.title('Raw Img')

plt.subplot(122)
img_sift_rgb=cv2.cvtColor(img_sift,cv2.COLOR_BGR2RGB)
plt.imshow(img_sift_rgb)
plt.title('Img with SIFT features')
复制代码
【火炉炼AI】机器学习049-提取图像的SIFT特征点

########################小**********结###############################

1, SIFT特征点的提取只需要使用cv2.xfeatures2d.SIFT_create().detect()函数即可,但是要事先安装opencv-contrib-python模块。

#################################################################

注:本部分代码已经全部上传到( 我的github )上,欢迎下载。

参考资料:

1, Python机器学习经典实例,Prateek Joshi著,陶俊杰,陈小莉译


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

iPhone开发实战

iPhone开发实战

2009-10 / 69.00元

《iPhone开发实战》全面探讨了iPhone平台的两种编程方式——Web开发和SDK编程。全书结合示例对这两种编程方式的基本流程、基本原理和基本原则给出了详细而通俗的讲解。在Web开发方面,分别介绍了三个iPhone Web库,即WebKit、iUI和Canvas,并讨论了Web开发环境Dashcode,最后阐述Web应用程序的调试。在SDK开发方面,详细描述其各种组件和功能,包括Xcode、I......一起来看看 《iPhone开发实战》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具