图像特征提取-SIFT

news/2024/9/28 14:10:31/

文章目录

  • 一、定义与原理
  • 二、主要步骤
  • 三、特点与优势
  • 四、代码运用
  • 五、应用领域

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

一、定义与原理

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

二、主要步骤

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

  • 尺度空间极值检测:

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

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

  • 方向分配:

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

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

三、特点与优势

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

四、代码运用

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特征提取算法是一种高效、稳定的图像特征提取方法,在计算机视觉图像处理领域具有重要的应用价值。


http://www.ppmy.cn/news/1531537.html

相关文章

物联网系统中高精度温度检测方案_温度变送器

01 物联网系统中为什么要使用温度变送器 在物联网系统中使用温度变送器的原因主要可以归纳为以下几点: 1、温度监测与控制 实时数据获取:温度变送器能够将温度这一物理量转换为可传输的标准化电信号(如4-20mA电流信号、0-10V电压信号或RS48…

前端必知必会-jQuery 遍历 - 后代

文章目录 jQuery 遍历 - 后代遍历 DOM 树jQuery children() 方法jQuery find() 方法 总结 jQuery 遍历 - 后代 使用 jQuery,您可以遍历 DOM 树以查找元素的后代。 后代是子元素、孙元素、曾孙元素等等。 遍历 DOM 树 用于遍历 DOM 树的两个有用的 jQuery 方法是…

着色器(Vertex Shader)基础

什么是顶点着色器 顶点着色器处理顶点并告知它们在“剪辑空间”中的坐标,该空间使计算机可以轻松了解哪些顶点对摄像机可见,哪些顶点不可见,必须剪切或“剪切”掉。 这使得 GPU 在后期阶段的速度更快,因为它们需要处理的数据较…

用于视觉的MetaFormer基线模型

摘要 https://arxiv.org/pdf/2210.13452 摘要——MetaFormer,即Transformer的抽象架构,已被发现在实现竞争性能中发挥着重要作用。在本文中,我们再次通过将研究重点从令牌混合器(token mixer)设计转移开,来…

Android CCodec Codec2 (十五)C2DmaBufAllocator

Codec2框架采用了全新的Buffer分配机制C2Allocator,这一篇文章我们一起来瞧瞧C2DmaBufAllocator是如何工作的。 1、C2Allocator C2Allocator声明在C2Buffer.h中,它定义了如下接口: getName:返回Allocator独一无二的名称&#xf…

排序 算法

八大排序算法 | 爱编程的大丙 (subingwen.cn) 冒泡排序 best: O(n), worst O(n^2) * 数组的相邻两个元素进行比较:nums[i] > nums[i1] -> swap(nums[i], nums[i1]) * 一次遍历后,最大元素移至数组末尾 * n长度数组,进行n-1次排序&…

怎么通过AI大模型开发一个网站?

目录 一、提示词与AI输出 二、网站效果 以前不会代码开发,写网站是不可能的事情,现在有了AI,一切都有了可能。以下是我通过通义千问大模型开发的简单网站。 一、提示词与AI输出 提示词1 你是python程序员,我有一个大的需求&am…

教师课堂管理测评:构建高效与和谐的教学环境

在教育的广阔天地里,课堂是知识传递、思维碰撞与情感交流的核心舞台。良好的课堂管理不仅是教学质量的基石,更是促进学生全面发展、培养未来社会所需人才的关键。本文将从课堂规则、课堂环境、时间管理、学生参与、行为管理、沟通技巧、资源管理、学生差…