SIFT(尺度不变特征变换)

news2024/11/18 1:23:51
Sift(尺度不变特征变换),全称是Scale Invariant Feature Transform
Sift提取图像的局部特征,在尺度空间寻找极值点,并提取出其位置、尺度、方向信息。
Sfit的应用范围包括物体辨别、机器人地图感知与导航、影像拼接、3D模型建立、手势识别、影像追踪等。
Sift特征的特点:
1. 对视角变化、噪声等也存在一定程度的稳定性;
2. 独特性,信息量丰富,适用于在海量特征数据中进行快速,准确的匹配;
3. 多量性,即使少数几个物体也可以产生大量的Sfit特征向量;
Sfit算法的实质是在不同的尺度空间上查找关键点(特征点),计算关键点的大小、方向、尺度信息,利用这些信息组成关键点对特征点进行描述的问题。Sift所查找的关键点都是一些十分突出,不会因光照,仿射变换和噪声等因素而变换的“稳定”特征点,如角点、边缘点、暗区的亮点以及亮区的暗点等。匹配的过程就是对比这些特征点的过程:

 

SIFT函数注册了专利,在商业用途上是收费的。将在opencv > 3.4.3中,不再提供。
解决办法:
安装opencv-python 3.4.2.16
以及opencv-contrib-python 3.4.2.16
使用conda和pip安装
pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16

SIFT特征提取和匹配具体步骤

1. 生成高斯差分金字塔(DOG金字塔),尺度空间构建

什么是尺度空间:

试图在图像领域中模拟人眼观察物体的概念与方法。

举个栗子:你拍了一张美女照,看到的肯定是整体,然后在你细看的时候,化身成了列文虎克,发现了华点,那么这个时候,你运用你灵巧的双指,放大了图片,华点的细节展现无遗,你发现了新大陆,然后默默打开了浏览器,接着一套连招。

简而言之,大尺度看整体(即轮廓),小尺度看细节。

图像金字塔:

把一张图片按照不同的比例对原始分辨率进行减少,然后从小到大叠加在一起,形成了金字塔的亚子。

图像金字塔是一种以多分辨率来解释图像的结构,通过对原始图像进行多尺度像素采样的方式,生成N个不同分辨率的图像。把具有最高级别分辨率的图像放在底部,以金字塔形状排列,往上是一系列像素(尺寸)逐渐降低的图像,一直到金字塔的顶部只包含一个像素点的图像,这就构成了传统意义上的图像金字塔。

 

获得图像金字塔一般包括二个步骤:
1. 利用滤波器平滑图像 (高斯滤波)
2. 对平滑图像进行抽样(采样)
有两种采样方式——上采样(分辨率逐级升高)和下采样(分辨率逐级降低)

高斯金字塔

主要思想是通过对原始图像进行尺度变换,获得图像多尺度下的尺度空间表示序列,对这些序列进行尺度空间主轮廓的提取,并以该主轮廓作为一种特征向量,实现边缘、角点检测不同分辨率上的关键点提取等。
各尺度下图像的模糊度逐渐变大,能够模拟人在距离目标由近到远时目标物体在视网膜上的形成过程。
尺度空间构建的基础是DOG金字塔,DOG金字塔构建的基础是高斯金字塔。

如何构建高斯金字塔:

1. 先将原图像扩大一倍之后作为高斯金字塔的第1组第1层,将第1组第1层图像经高斯卷积(其实就是高斯平滑或称高斯滤波)之后作为第1组金字塔的第2层。
2. 将σ乘以一个比例系数k,得到一个新的平滑因子σ=k*σ,用它来平滑第1组第2层图像,结果图像作为第3层。
3. 如此这般重复,最后得到L层图像,在同一组中,每一层图像的尺寸都是一样的只是平滑系数不一样。它们对应的平滑系数分别为:0,σ,kσ,k^2σ,k^3σ……k^(L-2)σ。
4. 将第1组倒数第三层图像作比例因子为2的降采样(尺寸减半),得到的图像作为第2组的第1层,然后对第2组的第1层图像做平滑因子为σ的高斯平滑,得到第2组的第2层,就像步骤2中一样,如此得到第2组的L层图像,同组内它们的尺寸是一样的,对应的平滑系数分别为:0,σ,kσ,k^2σ,k^3σ……k^(L-2)σ。但是在尺寸方面第2组是第1组图像的一半
反复执行,就可以得到一共O组,每组L层,共计O*L个图像,这些图像一起就构成了高斯金字塔:
在同一组内,不同层图像的尺寸是一样的,后一层图像的高斯平滑因子σ是前一层图像平滑因子的k倍;
在不同组间,后一组第一个图像是前一组倒数第三个图像的二分之一采样,图像大小是前一组的一半;

插个嘴:

高斯平滑:就是高斯滤波,过滤相关噪声

σ是啥玩意儿:平滑系数,系数越小,细节越多,系数越大,细节越少,下图是高斯滤波公式,骚年,你悟了吗,悟了请给两千缘

构建尺度空间:

在高斯金字塔中一共生成O组L层不同尺度的图像,这两个量合起来(O,L)就构成了高斯金字塔的尺度空间,也就是说以高斯金字塔的组O作为二维坐标系的一个坐标,不同层L作为另一个坐标,则给定的一组坐标(O,L)就可以唯一确定高斯金字塔中的一幅图像。

 

尺度空间中的某张图就是根据不同的高斯平滑度进行卷积而来的。

高斯金字塔弄出来了,下面就是差分(DOG)金字塔了,DOG?嗯?dog?emmmmmmmm...........

差分金字塔,DOG(Difference of Gaussian)金字塔 是在高斯金字塔的基础上构建起来的,其实生成高斯金字塔的目的就是为了构建DOG金字塔。
DOG金字塔的第1组第1层是由高斯金字塔的第1组第2层减第1组第1层得到的。以此类推,逐组逐层生成每一个差分图像,所有差分图像构成差分金字塔。
概括为DOG金字塔的第o组第l层图像是由高斯金字塔的第o组第l+1层减第o组第l层得到的。
上图!

2. 空间极值点检测(关键点的初步查探)

特征点是由DOG空间的局部极值点组成的。为了寻找DoG的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度域的相邻点大或者小。
如下图,中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。

 

注意, 局部极值点都是在同一个组当中进行的,所以肯定有这样的问题,某一组当中的第一个图和最后一个图层没有前一张图和下一张图,那该怎么计算? 解决办法是,再用高斯模糊,在高斯金字塔多“模糊”出3张来凑数,所以在DOG中多出两张。
比如某高斯金字塔中原先有5张图片,那么对应的差分金字塔中则有4张图片,当差分金字塔最底层和最顶层要进行计算的时候,怎么办,在高斯金字塔当中追加,那么这个时候,差分金字塔有6张图片,高斯是7张。诶???!!!不对啊。
不是说3张吗,怎么是两张,如果差分正常是3张的时候,需要的高斯金字塔是不是3+1张,这个时候加上上下两层,那么实际需要差分的是不是应该是3+2张?对吧,那么这个时候对应的高斯金字塔是不是就是3+2+1张,明白了吧,不明白没关系,睡一觉起来,明天再想。
结合下图食用

3. 稳定关键点的精确定位

DOG值对噪声和边缘比较敏感,所以在第2步的尺度空间中检测到的局部极值点还要经过进一步的筛选,去除不稳定和错误检测出的极值点。
利用阈值的方法来限制,在opencv中为contrastThreshold。

4. 稳定关键点方向信息分配

方法:获取关键点所在尺度空间的邻域,然后计算该区域的梯度和方向,根据计算得到的结果创建方向直方图。可以做如下设定:直方图的峰值为主方向的参数,其他高于主方向百分之80的方向被判定为辅助方向。

5. 关键点描述

对于每一个关键点,都拥有位置、尺度以及方向三个信息。为每个关键点建立一个描述符,用一组向量将这个关键点描述出来,使其不随各种变化而改变,比如光照变化、视角变化等等描述子不但包含关键点,也包括关键点周围对其有贡献的邻域点。
描述的思路是: 对关键点周围像素区域分块,计算块内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象表述。
如下图,对于2*2块,每块最终取8个方向,即可以生成2*2*8维度的向量,以这2*2*8维向量作为中心关键点的数学描述。

实验结果表明:对于每个关键点采用4×4×8=128维向量表征,综合效果最优(不变性与独特性)。

6. 特征点匹配

特征点的匹配是通过计算两组特征点的128维的关键点的欧式距离实现的。
欧式距离越小,则相似度越高,当欧式距离小于设定的阈值时,可以判定为匹配成功。
具体步骤:
1、分别对模板图(参考图,reference image)和实时图(观测图,observation image)建立关键点描述子集合。目标的识别是通过两点集内关键点描述子的比对来完成。具有128维的关键点描述子的相似性度量采用欧式距离。
2、匹配可采取穷举法完成。
怎么理解这个东西,就是参考图的关键点描述子和观测图中的描述子,然后4*4个格子里面的8个向量分别进行计算,然后求和,如果小于某个值,那就是匹配成功,

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV 入门教程:膨胀和腐蚀操作

OpenCV 入门教程:膨胀和腐蚀操作 导语一、膨胀操作二、腐蚀操作三、示例应用3.1 图像增强3.2 边缘检测 总结 导语 膨胀和腐蚀是图像处理中常用的形态学操作,用于改变图像的形状和结构。在 OpenCV 中,膨胀和腐蚀是基于结构元素的像素操作&…

一零六三、进程调度算法模拟 (C语言实现)

目录 背景 程序实现 实现效果 背景 1、根据算法要求从键盘输入不少于四个进程信息(包括进程名称、进程到达时间、估计运行时间),RR算法输入不少于两种时间片的大小 2、输出进程的调度顺序、完成时间、周转时间、平均周转时间、平均带权周转…

Openlayers实战:点击某点,overlay显示经纬度坐标

在之前的实战中,我们在某个固定的位置显示鼠标位置的经纬度, 今天改变一种形式,即采用overlay的方式,点击某处,获得到经纬度坐标,显示在overlay层上面。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN) * @此源代码版权归大剑师兰特…

23款迈巴赫S480升级原厂主动式氛围灯+电动后门+前后手势感应

23款迈巴赫S480升级原厂主动式氛围灯原厂电动后门原厂手势控制 新车刚提,原厂配置升级,全新配件 配件齐全,准备上车 全套主动式氛围灯配件 氛围灯模块 前排驾驶位顶棚的手势感应 手势感应电脑模块 后排顶棚的手势感应 电动后门配件有锁机、电…

基于simulink使用光流法跟踪汽车(附源码)

一、前言 此示例演示如何使用光流估计在视频序列中检测和跟踪汽车。 二、模型 下图显示了使用光流跟踪汽车模型: 三、用光流结果跟踪汽车 该模型使用光流估计技术来估计视频序列的每一帧中的运动矢量。通过阈值化运动矢量,该模型创建包含移动对象斑点…

mysql学习--使用navicat查看数据库密码

数据库通常分为两种:关系型数据库和非关系型数据库,关系型数据库通常会建立很多二维数据表,形成一对一、一对多、多对多等关系;之后利用SQL语句查询我们所需要的数据;非关系型数据库基于Key-Value的对应关系,并且查询的…

机器学习 day24(多类分类模型,Softmax回归算法及其损失函数)

多类分类 多类分类问题仍然是分类问题,所以预测y的可能结果是少量的,而不是无穷多个,且对于多类分类它>2 如上图:左侧为二分类,右侧为多分类,可以通过决策边界来划分区域 Softmax回归算法 …

记录--在高德地图实现卷帘效果

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 介绍 今天介绍一个非常简单的入门级小案例,就是地图的卷帘效果实现,各大地图引擎供应商都有相关示例,很奇怪高德居然没有,我看了下文档发现其实也是可以…

Fastpillars论文解读

本论文是美团在pointpillar算法的基础上的改进。 主要改进点分为一下两个: 1.引入注意力机制对pillar内的特征进行提取,改善直接maxpooling导致的细粒度信息丢失。 2.参考CSPNet和RepVGG构建了一个全新的轻量化backbone。 一、pillar注意力机制特征提…

怎么把MP4转换成GIF?分享几个方法轻松转换!

如何将mp4转换为gif?在分享视频剪辑素材到社交媒体时,许多人会选择将其转换为gif格式。这是因为GIF文件加载速度更快,文件大小更小。此外,将MP4转换为GIF也方便人们在电子邮件和聊天应用程序中发送动态图像。下面,我们…

【Linux】文件描述符 (上篇)

文章目录 📖 前言1. 文件的预备知识2. 复习C语言的文件操作3. Linux系统级文件接口3.1 open、 close、 read、 write 接口:3.2 内核当中实现的映射关系:3.3 如何理解Linux下一切皆文件: 📖 前言 本章开始,…

python绘制带有误差棒的条形图

文章目录 bar和barh加入误差棒定制误差棒颜色 bar和barh 在matplotlib中,通过bar和barh来绘制条形图,分别表示纵向和横向的条形图。二者的输入数据均主要为高度x和标签height,示例如下 import matplotlib.pyplot as plt import numpy as np…

MySQL CDC技术方案梳理

本篇主要探讨MySQL数据同步的各类常见技术方案及优劣势对比分析,从而更加深层次的理解方案,进而在后续的实际业务中,更好的选择方案。 1 CDC概念 CDC即Change Data Capture,变更数据捕获,即当数据发生变更时&#xff…

Ubuntu: scp命令使用及Permission denied错误解决方案

scp命令介绍 scp 命令用于 Linux 之间复制文件和目录。scp 是 secure copy 的缩写, scp 是 Ubuntu 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。 scp local_file remote_usernameremote_ip:remote_folder scp /Users/X.pem root192.168.1.247:/usr/local/ssl Permission…

java项目之高校校园点餐系统(ssm+mysql+jsp)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的闲一品交易平台。技术交流和部署相关看文末! 开发环境: 后端: 开发语言:Java 框架&#…

傻瓜式一键生成主子表

文章目录 傻瓜式一键生成主子表 简介创建主子表示例 根据已有主表创建子表示例 创建空属性主子表示例 总结 傻瓜式一键生成主子表 直接将xml导入到Studio里即可。下载文件连接: CSDN链接阿里云盘 简介 很多同学在创建主子表时,都会可能遇到如下一些问…

日本留学托福要求多少分才及格呢?

日本有悠久的历史和文化,吸引了越来越多的留学生前往探索和学习。那么,日本留学托福要求多少分才及格呢? 日本留学托福成绩要求 综合类:通常要求申请者取得托福总分在80以上,各项分数要求分别为口语20以上&#xff0c…

LinuxI2C应用编程——I2C-Tools的使用

文章目录 I2C 硬件框架I2C 软件框架I2C协议(传输数据的格式)写操作读操作I2C 信号 SMBus 协议概述硬件和软件上的区别SMBus 协议分析符号的含义SMBus Quick CommandSMBus Receive ByteSMBus Send ByteSMBus Read ByteSMBus Read WordSMBus Write ByteSMB…

11_Linux阻塞与非阻塞

目录 阻塞和非阻塞IO简介 等待队列 等待队列头 等待队列项 轮询 Linux驱动下的poll操作函数 阻塞式访问IO实验 阻塞式访问IO驱动程序编写 运行测试 非阻塞式IO实验 运行测试 阻塞和非阻塞IO简介 阻塞和非阻塞IO是Linux驱动开发里面很常见的两种设备访问模式,在编写…

充分利用测试自动化的 10 个最佳实践

目录 前言: 实践1:手动和自动测试结合 实践2:特别注意回归测试 实践3:包括端到端测试 实践4:为自动化测试提供集体所有权 实践5:详细计划与测试相关的所有流程 实践6:选择适合您需求的自…