【OpenCV】98 SIFT特征提取—关键点提取

98 SIFT特征提取—关键点提取 代码

import cv2 as cv import numpy as npsrc = https://www.it610.com/article/cv.imread("../images/flower.png") cv.namedWindow("input", cv.WINDOW_AUTOSIZE) cv.imshow("input", src) sift = cv.xfeatures2d.SIFT_create() kps = sift.detect(src) result = cv.drawKeypoints(src, kps, None, (0, 0, 255), cv.DrawMatchesFlags_DEFAULT) cv.imshow("sift-detector", result) cv.waitKey(0) cv.destroyAllWindows()

实验结果 【【OpenCV】98 SIFT特征提取—关键点提取】【OpenCV】98 SIFT特征提取—关键点提取
文章图片

解释 SIFT特征提取是图像特征提取中最经典的一个算法,归纳起来SIFT特征提取主要有如下几步:
  • 构建高斯多尺度金字塔
  • 关键点查找/过滤与精准定位
  • 窗口区域角度方向直方图
  • 描述子生成
    SIFT特征是非常稳定的图像特征,在图像搜索、特征匹配、图像分类检测等方面应用十分广泛,但是它的缺点也是非常明显,就是计算量比较大,很难实时,所以对一些实时要求比较高的常见SIFT算法还是无法适用。如今SIFT算法在深度学习特征提取与分类检测网络大行其道的背景下,已经越来越有鸡肋的感觉,但是它本身的算法知识还是很值得我们学习,对我们也有很多有益的启示,本质上SIFT算法是很多常见算法的组合与巧妙衔接,这个思路对我们自己处理问题可以带来很多有益的帮助。今天我们首先高清楚SIFT特征提取的前面两个步骤,尺度空间金字塔与关键点过滤。
OpenCV已经实现了SIFT算法,但是在OpenCV3.0之后因为专利授权问题,该算法在扩展模块xfeature2d中,需要自己编译才可以使用,OpenCV Python中从3.4.2之后扩展模块也无法使用,需要自己单独编译python SDK才可以使用。其使用方法与我们前面介绍的ORB完全一致。在Python3.7中使用pip install opencv-contrib-python==3.4.2.17来使用。都是遵循下面的步骤
  1. 创建对象
  2. 通过detect方法提取对象关键点
  3. 同drawKeypoints绘制关键点
构建多尺度高斯金字塔
为了在每组图像中检测 S 个尺度的极值点,DoG 金字塔每组需 S+2 层图像,因为每组的第一层和最后一层图像上不能检测极值,DoG 金字塔由高斯金字塔相邻两层相减得到,则高斯金字塔每组最少需 S+3 层图像,实际计算时 S 通常在2到5之间。
所有内容均来源于贾志刚老师的知识星球——OpenCV研习社,本文为个人整理学习,已获得贾老师授权,有兴趣、有能力的可以加入贾老师的知识星球进行深入学习。
【OpenCV】98 SIFT特征提取—关键点提取
文章图片

    推荐阅读