《计算机视觉》——角点检测和特征提取sift

角点检测

角点的定义

从直观上理解,角点是图像中两条或多条边缘的交点,在图像中表现为局部区域内的灰度变化较为剧烈的点。在数学和计算机视觉中,角点可以被定义为在两个或多个方向上具有显著变化的点。比如在一幅建筑物的图像中,建筑物的顶点就是典型的角点;在一张棋盘格的图像中,棋盘格的交点也属于角点。
在这里插入图片描述

角点检测的作用
  • 特征提取:角点是图像的重要特征之一,由于其具有独特的位置和局部特征,可用于图像的特征描述,便于后续的图像匹配、目标识别等操作。例如,在物体识别中,通过检测物体图像中的角点并与数据库中物体的角点特征进行匹配,从而识别出物体。
  • 图像配准:在将不同时间、不同视角或不同传感器获取的图像进行融合时,角点可以作为图像之间的对应点,帮助实现图像的精确配准。例如,在卫星图像拼接中,通过检测不同卫星图像中的角点并进行匹配,可以将多幅图像拼接成一幅完整的图像。
  • 运动跟踪:在视频序列中,通过跟踪角点的运动轨迹,可以分析物体的运动状态。比如在运动分析中,跟踪运动员身体上的角点,可以得到运动员的动作轨迹和运动参数。
常见的角点检测算法
  • Harris 角点检测算法:由 Chris Harris 和 Mike Stephens 在 1988 年提出。该算法基于图像局部的自相关函数,通过计算图像在各个方向上的灰度变化,得到一个角点响应函数 R。如果 R 的值超过一定的阈值,则认为该点是角点。Harris 角点检测算法具有旋转不变性,但对尺度变化比较敏感。
    Shi-Tomasi 角点检测算法:是对 Harris 角点检测算法的改进。该算法通过计算图像块的最小特征值来判断角点,相比于 Harris 算法,Shi-Tomasi 算法在角点检测的准确性上有了一定的提高,并且在目标跟踪等应用中表现更优。
  • SIFT(尺度不变特征变换)算法:不仅可以检测角点,还具有尺度不变性、旋转不变性和光照不变性等优点。SIFT 算法通过在不同尺度空间上检测极值点,并对这些极值点进行精确定位和描述,生成 128 维的特征向量,用于后续的特征匹配等操作。不过,SIFT 算法计算复杂度较高,运行速度较慢。
  • SURF(加速稳健特征)算法:是 SIFT 算法的加速版本,采用了积分图像和 Haar 小波特征,大大提高了算法的运行速度,同时也具有较好的尺度不变性和旋转不变性。在实际应用中,SURF 算法在处理速度和特征描述能力上取得了较好的平衡。
  • ORB(Oriented FAST and Rotated BRIEF)算法:结合了 FAST(Features from Accelerated Segment Test)角点检测算法和 BRIEF(Binary Robust Independent Elementary Features)特征描述子。FAST 算法用于快速检测角点,BRIEF 算法用于生成二进制特征描述子。ORB 算法具有计算速度快、内存占用小等优点,在实时性要求较高的应用中得到了广泛应用。

角点检测实例

对黄鹤楼的图片进行角点检测:
在这里插入图片描述

'''角点检测'''
import cv2
import numpy as np#角点指图像中局部区域与周围区域有较大灰度变化的点或像素。
# cornerHarris(img,blockSize,ksize,k[,dst[,borderType]])-> dst
# img:输入图像。
#blockSize:角点检测中要考虑的领域大小。
# ksize:Sobel求导中使用的日大小。
# k: Harris角点检测方程中的自由参数,取值参数为[0.04,0.06]。
# dst:返回numpy.ndarray对象,大小和src相同,值越大,对应像素点是角的概率越高img = cv2.imread('huanghelou.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
dst = cv2.cornerHarris(gray,4,3,0.04)
# 标记检测到的角点
img[dst>0.01*dst.max()]=[0,0,255]
# 这里通过对角点响应进行闽值处理,标记出检测到的角点。
# 0.05 * dst.max()是一个值,大于这个值的像素点会被标记为红色。
cv2.imshow('img',img)
cv2.waitKey(0)

结果:
在这里插入图片描述
可以看出图片中部分角点已经被标记出来,可用通过更改阈值大小进行角点标记的范围更改。

特征提取sift

SIFT(Scale-Invariant Feature Transform,尺度不变特征变换)是一种非常经典且强大的计算机视觉算法,用于图像的特征提取和描述,以下是对它的详细介绍:

SIFT 算法的特点
  • 尺度不变性:能够在不同尺度下检测到相同的特征点,无论物体在图像中是大是小,SIFT 算法都能准确地找到对应的特征。
  • 旋转不变性:通过计算特征点的主方向,使描述子具有旋转不变性,即使物体在图像中发生了旋转,也能正确匹配特征。
  • 光照不变性:SIFT 特征对光照变化具有一定的鲁棒性,在不同的光照条件下,仍然可以提取到稳定的特征。
  • 独特性:SIFT 特征描述子具有较高的独特性,能够很好地区分不同的物体和场景,降低误匹配的概率。
SIFT 算法的主要步骤
  • 尺度空间极值检测:使用不同尺度的高斯滤波器对图像进行卷积,生成高斯金字塔。然后通过相邻尺度间的差分(DoG,Difference of Gaussians)运算,得到 DoG 金字塔。在 DoG 金字塔中,检测每个点在其邻域内(包括同层和上下层)的极值点,这些极值点就是可能的特征点。
  • 关键点定位:对检测到的极值点进行精确定位,通过拟合三维二次函数来确定关键点的精确位置和尺度。同时,去除低对比度的关键点和位于边缘上的关键点,以提高特征点的稳定性和可靠性。
  • 方向分配:计算每个关键点邻域内的梯度方向直方图,根据直方图的峰值确定关键点的主方向。为每个关键点分配一个或多个方向,使特征描述子具有旋转不变性。
  • 关键点描述:以关键点为中心,取一个大小固定的邻域窗口,并将其旋转到关键点的主方向。将该窗口划分为若干个子区域,计算每个子区域内的梯度方向直方图。将所有子区域的直方图连接起来,形成一个 128 维的特征向量,即 SIFT 特征描述子。
SIFT 算法的应用场景
  • 目标识别:通过提取目标物体的 SIFT 特征,并与数据库中已知物体的特征进行匹配,可以实现对目标物体的识别。例如,在安防监控中,识别特定的人员或物体。
  • 图像拼接:在全景图像拼接中,利用 SIFT 特征匹配不同图像之间的重叠区域,从而实现图像的准确拼接。
  • 三维重建:从多幅图像中提取 SIFT 特征,通过特征匹配计算图像之间的相对位置和姿态,进而构建物体或场景的三维模型。
  • 图像检索:根据图像的 SIFT 特征,在图像数据库中快速检索到与查询图像相似的图像,用于图像管理和检索系统。
SIFT 算法的局限性
  • 计算复杂度高:SIFT 算法的计算量较大,尤其是在处理高分辨率图像时,运算时间较长,对硬件要求较高。
  • 专利问题:SIFT 算法受专利保护,在商业应用中需要获得相应的授权,这在一定程度上限制了它的广泛应用。

sift算法实例

对一张男人的图片进行特征提取:
在这里插入图片描述

'''-----------特征提取sift---------------------'''
# # 检测图像中的关键点
# # cv2.SIFT_create()
# #cv2.xfeatures2d.SIFT_create()#创建一个sift特征的提取对象#
# sift.detect(img)在图像中查找关键点phone = cv2.imread('man.png')
phone_gray = cv2.cvtColor(phone,cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT_create() # sift对象
kp = sift.detect(phone_gray)
# kp.pt:关键点的(x,y)
# 坐标。
# kp.size:关键点的大小(尺度):
# kp.angle:关键点的方向。
# kp.response:关键点的响应值。
# kp.octave:关键点所在的金字塔层级。
#查找关键点
# drawKeypoints(image,keypoints,outImage, color=None, flags=None)# image:原始图片
# keypoints:从原图中获得的关键点,这也是画图时所用到的数据
# outputimage:输出图像,可以是原始图片,也可以是None
# color:颜色设置,通过修改(b,g,r)的值,更改画笔的颜色,b=蓝色,g=绿色,r=红色。绘制富有信息的关键点。# flags:绘图功能的标识设置
phone_sift = cv2.drawKeypoints(phone,kp, None,flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('phone_sift',phone_sift)
cv2.waitKey(0)
# # 使用sift.compute()计算关键点描述符,方便后期的特征匹配
kp,des = sift.compute(phone,kp)
print(np.array(kp).shape,des.shape)
# 输出关键点的形状和描述符的形状。
# np.array(kp).shape 表示关键点的数量和属性。
# des.shape 表示描述符的数量和属性。

结果:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20329.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下ioctl的应用

文章目录 1、ioctl简介2、示例程序编写2.1、应用程序编写2.2、驱动程序编写 3、ioctl命令的构成4、测试 1、ioctl简介 ioctl(input/output control)是Linux中的一个系统调用,主要用于设备驱动程序与用户空间应用程序之间进行设备特定的输入/…

对称加密算法——IDEA加密算法

Java IDEA算法详解 1. 理论背景 IDEA(International Data Encryption Algorithm)是一种对称密钥加密算法,由Xuejia Lai和James Massey于1991年提出。它被设计用于替代DES(Data Encryption Standard)算法,…

Jenkins 给任务分配 节点(Node)、设置工作空间目录

Jenkins 给任务分配 节点(Node)、设置工作空间目录 创建 Freestyle project 类型 任务 任务配置 Node 打开任务-> Configure-> General 勾选 Restrict where this project can be run Label Expression 填写一个 Node 的 Label,输入有效的 Label名字&#x…

20250217 随笔 redis非原子性操作简述

从你提供的文本来看,核心是 Redis 作为缓存的检查机制,以及非原子性操作导致的不一致性问题。 我们可以拆解为两个部分来理解: 📌 1. 逻辑:先查 Redis,再决定是否注册 逻辑流程 先查询 Redis 是否有某个 …

SVM对偶问题

1、对偶问题数学基础 对偶问题:在线性规划中,每一个线性规划问题(称为原问题)都有一个与之对应的对偶问题。从数学形式上看,如果原问题是求解一个线性目标函数的最大值(或最小值),在满足一系列线性不等式&…

CSDN、markdown环境下如何插入各种图(流程图,时序图,甘特图)

流程图 横向流程图 mermaid graph LRA[方形] --> B{条件a}B -->|满足| C(圆角)B -->|不满足| D(圆角)C --> E[输出结果1]D --> E效果图: 竖向流程图 mermaid graph TDC{条件a} --> |a1| A[方形]C --> |a2| F[竖向流程图]A --> B(圆角)B …

MSI微星电脑冲锋坦克Pro Vector GP76 12UGS(MS-17K4)原厂Win11系统恢复镜像,含还原功能,预装OEM系统下载

适用机型:【MS-17K4】 链接:https://pan.baidu.com/s/1P8ZgXc6S_J9DI8RToRd0dQ?pwdqrf1 提取码:qrf1 微星笔记本原装出厂WINDOWS11系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、MSI Center控制中心等预装…

MySQL 之INDEX 索引(Index Index of MySQL)

MySQL 之INDEX 索引 1.4 INDEX 索引 1.4.1 索引介绍 索引:是排序的快速查找的特殊数据结构,定义作为查找条件的字段上,又称为键 key,索引通过存储引擎实现。 优点 大大加快数据的检索速度; 创建唯一性索引,保证数…

Ubuntu18.04安装rvm、ruby2.6.5和rails5.2.6

系统环境:Ubuntu 18.04 一、安装前准备 1. sudo apt update 2. sudo apt upgrade 如果提示abort,忽略。 3. sudo apt install sqlite3 gnupg curl git libpq-dev 二、安装rvm ruby版本管理器 1.切换管理员模式 sudo su 2.安装软件签名公钥 gpg…

【WPS+VBA】表格中重复表头与页码的批量删除

向豆包对话可以死磕的,以前问问题我只是根据第一条给出的答案使用。AI还有个优点,不会烦你,只要有问题就接着问,一直问到解决好问题。小编对豆包的连环提问,最终解决了批量删表头页面的问题。 1、豆包对话过程 开始问…

[Windows] Win7也能控制安卓手机屏幕(手机镜像投屏):scrcpy

Win7也能控制安卓手机屏幕(手机镜像投屏):scrcpy 链接:https://pan.xunlei.com/s/VOJGlhQkX9mNqCYsM2cMbYxsA1?pwdm9wq# 系统平台:Windows 7/10/11 (Win7系统需打开“Win7”文件夹进行操作) …

Windows 环境下 Prometheus 安装指南

目录 确认系统环境 下载 Prometheus 解压安装包 配置 Prometheus 启动 Prometheus 访问 Prometheus Web 界面 确认系统环境 确保你的 Windows 系统满足 Prometheus 的运行要求(推荐 Windows 10 或更高版本)。 下载 Prometheus 打开 Prometheus 官…

使用Linux创作第一个小程序--进度条

Linux第一个小程序 - 进度条 储备知识 1.回车换行 回车概念 \r 换行概念 \n 2.缓冲区 sleep 先执行1 后执行2(c语言中是按顺序执行的) 那么在我sleep期间,“Hello World”一定是被保存起来了(缓冲区)。 缓冲区&a…

工业制造能耗管理新突破,漫途MTIC-ECM平台助力企业绿色转型!

在工业制造领域,能源消耗一直是企业运营成本的重要组成部分。随着“双碳”目标的推进,如何实现高效能耗管理,成为制造企业亟待解决的问题。漫途MTIC-ECM能源能耗在线监测平台,结合其自研的硬件产品,为工业制造企业提供…

DFS算法篇:理解递归,熟悉递归,成为递归

1.DFS原理 那么dfs就是大家熟知的一个深度优先搜索,那么听起来很高大尚的一个名字,但是实际上dfs的本质就是一个递归,而且是一个带路径的递归,那么递归大家一定很熟悉了,大学c语言课程里面就介绍过递归,我…

【Java学习】继承

一、继承 子类继承父类,子类这个类变量的引用在原有的指向子类自己类变量空间的原有访问权限上,增加上了父类类变量空间的访问权限,此时子类类变量指向的空间变为了原来子类类变量空间加上父类类变量空间,此时子类类变量空间就变成…

ChatGLM

ChatGLM 实现思想模型结构配置迭代版本 ChatGLM-6B : 清华大学的一个开源、支持中英双语的对话语言模型,基于 General Language Model(GLM)架构,具有 62 亿参数 特点 : 优点 : INT4下,只要 6GB 显存 ; ChatGLM2-6B 序…

网页制作02-html,css,javascript初认识のhtml的文字与段落标记

用一首李白的将进酒,对文字与段落标记进行一个简单的介绍演示: 目录 一、标题字 1、标题字标记h 2、标题字对其属性align 二、文本基本标记 1、字体属性face 2、字号属性size 3、颜色属性 Color 三、文本格式化标记 1、粗体标记 b ,strong 2、…

Vue响应式原理实现总结(数据劫持Object.defineProperty/Proxy+发布订阅者设计模式)

Vue的响应式主要分为数据劫持和发布订阅模式。Vue2用的是Object.defineProperty,而Vue3改用Proxy。数据劫持就是在访问或修改对象属性时进行拦截,然后触发相应的更新。发布订阅模式则是用来收集依赖(比如视图更新函数),当数据变化时通知这些依赖执行。 总结一下,关键点包…

Opencv项目实战:26 信用卡号码识别与类型判定

项目介绍 在日常生活中,信用卡的使用越来越普遍。本项目的主要目标是通过图像处理技术自动识别信用卡号码,并根据信用卡号码的第一个数字判定信用卡的类型(如Visa、MasterCard等)。项目结合了图像预处理、轮廓检测、模板匹配等技…