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特征提取—关键点提取】
文章图片
解释 SIFT特征提取是图像特征提取中最经典的一个算法,归纳起来SIFT特征提取主要有如下几步:
- 构建高斯多尺度金字塔
- 关键点查找/过滤与精准定位
- 窗口区域角度方向直方图
- 描述子生成
SIFT特征是非常稳定的图像特征,在图像搜索、特征匹配、图像分类检测等方面应用十分广泛,但是它的缺点也是非常明显,就是计算量比较大,很难实时,所以对一些实时要求比较高的常见SIFT算法还是无法适用。如今SIFT算法在深度学习特征提取与分类检测网络大行其道的背景下,已经越来越有鸡肋的感觉,但是它本身的算法知识还是很值得我们学习,对我们也有很多有益的启示,本质上SIFT算法是很多常见算法的组合与巧妙衔接,这个思路对我们自己处理问题可以带来很多有益的帮助。今天我们首先高清楚SIFT特征提取的前面两个步骤,尺度空间金字塔与关键点过滤。
pip install opencv-contrib-python==3.4.2.17
来使用。都是遵循下面的步骤- 创建对象
- 通过detect方法提取对象关键点
- 同drawKeypoints绘制关键点
为了在每组图像中检测 S 个尺度的极值点,DoG 金字塔每组需 S+2 层图像,因为每组的第一层和最后一层图像上不能检测极值,DoG 金字塔由高斯金字塔相邻两层相减得到,则高斯金字塔每组最少需 S+3 层图像,实际计算时 S 通常在2到5之间。
所有内容均来源于贾志刚老师的知识星球——OpenCV研习社,本文为个人整理学习,已获得贾老师授权,有兴趣、有能力的可以加入贾老师的知识星球进行深入学习。
文章图片
推荐阅读
- 人脸识别|【人脸识别系列】| 实现自动化妆
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- opencv|图像处理之椒盐噪声的添加与去除
- 人脸识别|【人脸识别系列】| 实现人脸截图保存并编写128维特征向量
- opencv|网络爬虫入门练习
- OpenCV|【OpenCV 完整例程】89. 带阻滤波器的传递函数
- OpenCV|【OpenCV 完整例程】90. 频率域陷波滤波器
- OpenCV|【OpenCV 完整例程】22. 图像添加非中文文字
- OpenCV|【OpenCV 完整例程】91. 高斯噪声、瑞利噪声、爱尔兰噪声
- opencv|python+opencv车道线,实线虚线的检测