图像特征提取-SIFT

文章目录

图像特征提取中的SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)是一种强大的局部特征提取算法,广泛应用于计算机视觉和图像处理领域。以下是对SIFT特征提取的详细解释:

一、定义与原理

SIFT算法通过检测图像中的局部特征点,并计算这些特征点的描述符,从而实现图像的匹配和识别。这些特征点具有尺度不变性和旋转不变性,即使图像发生尺度缩放、旋转或光照变化,也能够被准确识别和匹配。

二、主要步骤

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

  • 尺度空间极值检测:

    • 首先,将图像转换为不同尺度的金字塔,每个尺度上的图像都经过高斯模糊处理。
    • 然后,在每个尺度上应用高斯差分算子(Difference of Gaussian,DoG)来检测潜在的极值点,这些极值点即为候选的关键点。
  • 关键点定位:

    • 对每个候选关键点进行精确定位,通过拟合精细的模型来确定其精确位置和尺度.
  • 排除掉低对比度和边缘响应过强的点,以提高关键点的稳定性和可靠性。

  • 方向分配:

    • 基于图像局部的梯度方向,为每个关键点分配一个或多个方向。
    • 使用直方图统计关键点邻域内像素的梯度方向和幅值,确定关键点的主方向和一个或多个辅方向。
  • 关键点描述:

    • 在关键点周围的邻域内,测量图像局部的梯度,并计算梯度方向和幅值。
    • 将邻域划分为若干个子区域(如4x4),在每个子区域内计算梯度直方图,并将所有子区域的直方图连接起来形成一个高维向量(如128维),作为关键点的描述符。

三、特点与优势

  • 尺度不变性:通过在不同尺度的图像上检测关键点,SIFT特征能够应对图像的尺度缩放变化。
  • 旋转不变性:为每个关键点分配方向信息,使得SIFT特征具有旋转不变性。
  • 光照和视角变化鲁棒性:由于SIFT特征是基于图像的局部梯度信息计算的,因此对光照和视角变化具有一定的鲁棒性。
  • 独特性:每个关键点的描述符都是唯一的,能够有效地区分不同的图像特征。

四、代码运用

python 复制代码
import cv2  
import numpy as np  
  
# 读取图像  
jijia = cv2.imread('3.png')  
  
# 创建SIFT对象  
sift = cv2.SIFT_create()  
  
# 检测关键点  
kp = sift.detect(jijia)  
  
# 打印关键点的坐标  
for x in kp:  
    print(x.pt)  
  
# 绘制关键点(不需要特殊标志)  
jijia_sift = cv2.drawKeypoints(jijia, kp, None, flags=0)  # 或者直接写 cv2.drawKeypoints(jijia, kp, None)  
  
# 显示图像  
cv2.imshow('jijia_sift', jijia_sift)  
cv2.waitKey(0)  
cv2.destroyAllWindows()  # 不要忘记关闭所有窗口  
  
# 计算描述符  
kp, des = sift.compute(jijia, kp)  
  
# 打印关键点和描述符的形状  
print(np.array(kp).shape, des.shape)
  • 读取图像:读取目标图像

  • 创建SIFT对象 :使用cv2.SIFT_create()函数创建一个SIFT(尺度不变特征变换)对象。SIFT是一种用于图像特征检测的算法,能够检测出图像中的关键点,并基于这些关键点计算描述符,这些描述符对于图像的尺度缩放、旋转甚至光照变化都具有一定的不变性。

  • 检测绘制关键点并打印坐标:使用SIFT对象的detect()方法在图像jijia上检测关键点。检测到的关键点存储在列表kp中,每个关键点都是一个KeyPoint对象,包含关键点的位置(pt属性,一个包含(x, y)坐标的元组)、大小(size属性)、方向(angle属性)等信息。遍历关键点列表kp,并打印每个关键点的坐标。使用cv2.drawKeypoints()函数在原始图像jijia上绘制检测到的关键点。

  • 图像显示:将最后的结果图像显示。

  • 计算并打印描述符:使用SIFT对象的compute()方法根据之前检测到的关键点kp和原始图像jijia计算描述符。打印描述符des的形状。

五、应用领域

SIFT特征提取算法在图像匹配、物体识别、三维重建、机器人导航、增强现实等领域有着广泛的应用。例如,在图像匹配中,可以利用SIFT特征提取算法提取两幅图像的关键点并进行匹配,从而实现图像的拼接或目标定位;在物体识别中,可以利用SIFT特征建立物体的特征库,并与待识别图像中的特征进行比对,从而实现物体的快速识别。

综上所述,SIFT特征提取算法是一种高效、稳定的图像特征提取方法,在计算机视觉和图像处理领域具有重要的应用价值。

相关推荐
手写码匠10 小时前
手写 AI 推理加速引擎:从零实现 KV Cache 与 Speculative Decoding
人工智能·深度学习·算法·aigc
Agent手记10 小时前
能源供应链智能体落地实战:从招标审核到备件调度,AI Agent全链路方案解析
人工智能·能源
不开大的凯207710 小时前
海外AI圈的“五月风暴”:一场没有硝烟的全面战争
大数据·人工智能
染指111010 小时前
7.相似度计算(本地模型下载和使用,在线模型的使用)-RAG基础1
人工智能·机器学习·阿里云·向量·rag
名不经传的养虾人10 小时前
从0到1:企业级AI项目迭代日记 Vol.28|企业AI的交付不是给工具,而是给搭好的能力
大数据·人工智能·ai编程·ai工作流·企业ai·多agent协作
DianSan_ERP10 小时前
自研电商架构:一套API安全对接60+平台
大数据·运维·数据库·人工智能·安全·架构
传说故事10 小时前
【论文阅读】Continual Harness: Online Adaptation for Self-Improving Foundation Agents
论文阅读·人工智能·agent
cjie22110 小时前
图像缩放因子的计算
计算机视觉·fpga开发
m0_6174939410 小时前
OpenCV报错解决:cornerSubPix断言失败 src.channels() == 1 的终极指南
人工智能·opencv·计算机视觉
大模型最新论文速读10 小时前
CIPO:把失败的推理轨迹变成纠错教材
人工智能