⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
个人网站:https://jerry-jy.co/❗❗❗知识付费,🈲止白嫖,有需要请后台私信或【文末】个人微信公众号联系我
基于OpenCv的图像SIFT特征点检测和特征匹配
基于OpenCv的图像SIFT特征点检测和特征匹配
任务需求
SIFT是一种基于尺度空间的,对图像缩放、旋转甚至仿射变换保持不变性的图像局部特征描述算子。SIFT是迄今使用最为广泛的一种特征提取方法。
图像点特征能够代表图像的内容,所以在运动目标跟踪、物体识别、图像配准、全景图像的拼接、三维重建等方向中,图像特征点的提取都至关重要,特征点提取的好坏将直接决定目标跟踪、物体识别、图像匹配、图像拼接、三维重建的准确度。
例如下图为基于SIFT特征的全景图像拼接。
任务目标
1、掌握SIFT特征点检测的简单步骤
2、掌握基于OpenCv进行SIFT特征点检测
3、掌握使用SIFT描述子进行蛮力匹配
任务环境
1、jupyter开发环境
2、OpenCv
3、python3.6
任务实施过程
一、SIFT特征点检测
SIFT是一种基于尺度空间的,对图像缩放、旋转甚至仿射变换保持不变性的图像局部特征描述算子。
SIFT算法主要分为四个步骤:
- 1.多尺度空间极值点检测:通过高斯金字塔构建高斯差分尺度空间(DOG),寻找尺度空间的极值点,中间的检测点要和其所在图像的上下两层和本层的3×3邻域26个像素点进行比较。
- 2.特征点精确定位:对尺度空间DoG函数进行曲线拟合,计算其极值点,从而实现关键点的精确定位。
- 3.特征点的主方向计算:使用直方图统计邻域内像素的梯度和方向,极值点周围区域方向梯度直方图的主峰值也就是特征点的主方向。
- 4.生成特征点描述:对每个关键点使用16×16的窗口,4×4共16个种子点来描述,这样一个关键点就可以产生128维的SIFT特征向量。
1.导入所需要的工具包和图像
import cv2 # 导入opencv
import matplotlib.pyplot as plt # 导入绘图模块
import numpy as np # 导入numpy库
from utils import im_show # 导入显示图像函数
# 绘制图像直接展示,不用调用plt.show()
%matplotlib inline
# 用来正常显示中文标签
plt.rc('font',family="SimHei")
# 读取图像
img = cv2.imread(r'./experiment/data/home.jpg')
# 设置画布大小
plt.figure(figsize=(6,6)