sift特征检测的代码实现及重要参数解析

 关于sift特征检测的原理请看这篇文章:SIFT特征检测(超详细)

代码展示

#导入所需要的库
import cv2
import numpy as np

# 读取原始图片
face = cv2.imread('face1.jpg')
# 转换为灰度图
gray = cv2.cvtColor(face, cv2.COLOR_BGR2GRAY)
# 实例化sift对象
sift = cv2.SIFT_create()
'''sift特征检测器来查找图像中的关键点(也称为特征点)和计算它们的描述子
        每个关键点对象包含了有关关键点的信息,例如位置、尺度、方向等'''
kps = sift.detect(gray)
# 在原始图像上绘制出关键点
face_sift = cv2.drawKeypoints(face, kps, face.copy(), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('face_sift', face_sift)
cv2.waitKey(0)
# 使用sift.compute()计算关键点点的描述符,以便后期的特征配对
kps, des = sift.compute(face, kps)
# 返回kps和des的维度信息
print(np.array(kps).shape, des.shape)

运行结果:

其中需要提到的一个方法是: cv2.drawKeypoints(image, keypoints, outImage, color, flags)

  • image: 要绘制关键点的输入图像。

  • keypoints: 包含关键点信息的列表,通常是通过特征检测器(如SIFT、SURF、ORB等)检测得到的。

  • outImage: 可选参数,用于指定绘制关键点后的输出图像。如果不提供此参数,函数会直接在输入图像上绘制关键点。

  • color: 可选参数,用于指定绘制关键点的颜色。默认情况下,关键点通常以随机颜色绘制。你可以指定颜色,例如 (0, 255, 0) 表示绿色,来绘制关键点的颜色。

  • flags: 可选参数,用于指定绘制关键点的附加标志。其中包括以下选项:

    • cv2.DRAW_MATCHES_FLAGS_DEFAULT:默认标志,没有特殊设置。
    • cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS:如果设置了这个标志,关键点将被绘制为彩色圆圈,其中圆圈的大小表示关键点的尺度,圆圈内部有一个小圆点表示关键点的方向。

其中看kps和des是两个重要返回参数:

 

从上图可以看出kps是包含357个元素的元组,也就是说明目标图检测出357个关键点

其中angle:表示当前关键点区域的亮度变化值

       class_id:表示关键点的类别

       octave:SIFT 检测器将图像金字塔分解成多个不同尺度的图像组,每个尺度级别被称为一个"八度"。

        pt:表示该点的坐标

        response:关键点的响应强值,它通常用于帮助筛选和排除不适合的关键点

        size:表示圆的半径大小,单位是像素

这里对des我们要知道它是一个357*128的数组,也就是说每个关键点会有128个特征去描述它。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值