三维重建基础入门之特征点检测基础(二)

news2024/9/22 4:05:48
前言:本文着眼于记录自己从普通CVer入门三维重建的学习过程,可能过程比较坎坷,都在摸索阶段,但争取每次学习都能进一步,提高自己的能力,同时,每篇文章都会按情况相应地推出B站讲解视频,可以关注up 出门吃三碗饭 观看讲解视频,文章同步更新到公众号 AI知识物语 ,大家可以关注下助助力。另外本平台的评论私信不会看,有问题可以移步B站视频评论区or私信。
最后感谢相关博主,开源社区,github等对内容的贡献,也希望各位读者在读完后能有自己的收获,并且写文章分享自己的心得,希望这个社区越做越好。
本文区别于其他博客文章,力求在不引入过度复杂数学知识的条件下介绍这个重要的SIFT算法,放心食用。

(一)SIFT尺度不变特征转换

优点:相比上一小节的角点检测算法,Harris,SIFT具有角度和尺度不变性,不论图像平移or旋转or缩放or亮度、噪声对特征点检测没影响,并且计算更快、准 。理解好SIFT算法原理对三维重建工程的实现具有重大作用。

算法流程:

尺度空间检测——>关键点定位——>特征方向幅值——>关键点描述

尺度空间检测:

引入概念:
尺度空间:

一张图像x,y轴,是二维的,把多张图像沿y轴叠加起来,构成三维空间,并沿z轴,使用不同的sigma值的高斯滤波核对图像依次进行滤波处理。通过上述得到的空间叫尺度空间,是三维的。

图像金字塔:

对图像进行下采样,也就是图像尺寸的依次递减(可以设为减半)

高斯图像金字塔:

对图像金字塔的每层图像依次进行不同程度的高斯滤波。

高斯差分尺度空间:对每一层图片差分,保留原始图像的细节

在这里插入图片描述
在这里插入图片描述
现在观察左下角的小图,
左图(底部绿色顶部蓝色)的图叫高斯模型,右图是高斯差分尺度空间
高斯模型这里有6张不同尺度的图像,依次差分,可以得到右边含有5层特征图的高斯差分空间。

**额外解释下(可跳过)

(1)上图的阶数表示有3给Octave,这个可以由个人自己定,阶数越多计算量越大
(2)有效差分为3,为什么不为5? 因为右边的高斯差分尺度空间里面,只有中间三层是有上下两层的,通俗说就是其周围特征信息丰富,而顶部和底部层只有一层相邻,周围特征信息少,若用来计算,误差会增大,故舍弃顶层和底层。在后面求极值点的时候更好理解。
(3)为什么每阶层数N=S+3, 代入到图里数数就可以,S=3(红色的层数),左边数下有6层。
另外我们还可以推出来, 高斯差分尺度空间的层数=N-1=S+2

现在已知包含输入图像特征图的空间,我们需要提取其特征就要先找到图像特征图的极值点!

在这里插入图片描述
为了寻找图片的特征点,在不同尺度空间的极值,因为其通常在图片的焦点灰度突变的地方。因此我们选择对 高斯差分尺度空间 进行插分,得到右边的上图。
假设我们选取的区域大小为33,同时在该层的相邻两层也同取33空间,现在依次取 中间层上的点(红点),与周围26个点(333-1)进行比较,如果红点的值匹配出来是最小的or最大的,我们可以把其当作特征极值点。

关键点定位:

在这里插入图片描述
上图,因为图片的坐标是离散(非连续),通过**“曲面拟合”**的方法,在曲线上求值,可以得到更精确的点。
现在,我们获得的关键点是在不同的尺度空间中获得,这些关键点具有尺度不变性,如何具有空间不变性?

特征方向赋值:

步骤:

关键点梯度求解——>利用关键点邻域所有点的梯度方向,当做极值点的方向
在这里插入图片描述在某一点X方向的变化,是此点上一个X值减去下一个X值,
Y也是 上一个Y减去下一个Y
幅值公式为G(x,y)
θ是最后求得的方向信息

在这里插入图片描述
左图的箭头方向是各个梯度方向,其箭头越长表示其代表的方向幅值越大。
拿起作为窗口,统计窗口内这些梯度方向他赋值的累计值。 方向累计值最高的方向,可以作为该特征点的主方向。有时候也会把第二高的方向等作为辅方向

关键点描述:

步骤:对关键点周围像素进行方向统计,高斯加权,生成关键点

在这里插入图片描述图片里讲得很清楚了,我就复述一下:用128维向量描述特征点, 特征点的描述子, 选取特征点周围88的像素,进行方向梯度的统计,高斯加权,每44窗口生成8个方向,这样就生成了448的向量作为特征点的数学描述。
SIFT 生成4 * 4 * 8共128维向量作为特征点的描述子,最后通过描述子的欧式距离来进行特征点的匹配.

SIFT检测结果
在这里插入图片描述

本文的代码会在后面的文章中放出(暂时未分析好)

1参考视频,这个老师讲得比较易懂(无数学推导)
2想从数学层面更好了解,可以参考这张,写得挺好,我还一部分数学没推导出,就不班门弄斧了。

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

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

相关文章

在群晖上体验维格表社区版APITable

本文是应网友 lee yong 和 shijie880500 的要求折腾的; 什么是 APITable ? APITable 是 vika 维格表的社区版,是一个面向 API 且易于使用的可视化数据库,适合所有人,使其成为 Airtable 的最佳开源替代品。最重要的是&a…

智慧城市总体解决方案和建设思路

“智慧城市”是综合城市发展规划、城市运行管理、城市经济社会发展、新一代信息技术应用等为一体的城市发展新模式,是促进城市科学发展、跨越发展、和谐发展的必然选择,是提升现代城市综合竞争力和国际影响力的战略制高点。 建设智慧城市,是城…

电脑文件被删除?试了十几款工具,数据恢复大师只看这一款

长期使用电脑办公,电脑肯定保存着很多数据文件。文件一多,我们势必是要进行整理的。要不文件太多会占用内存,还会影响电脑的运行速度。 整理过程中,重要的电脑文件被误删了怎么办?建议您先使用常规的方法来进行操作先…

双目客流统计方案的应用原理

双目客流统计客流摄像头采用立体视觉技术实现高度统计功能。基于视差原理。利用双镜头摄取的两幅图像的视差,构建三维场景,在检测到运动目标后。通过计算图像对应点间的位置偏差。获取目标的三维信息,在深度图像中对目标的检测与追踪&#xf…

Java基础二

目录 1. 常见类和对象 1.1 object 1.2 数组 Array 1.3 二维数组 1.6 二分查找法 1.7 字符串 1.8 包装类 1.9 日期类 1.10 工具类 1.11 比较 2. 异常 2.1介绍 2.2 基础语法 2.3 常见异常 3. 集合 3.1 介绍 3.2 常用的接口和类 3.3 ArrayList 基本操作 3.4 ArrayL…

165、【动态规划】leetcode ——337. 打家劫舍 III:记忆化递归+动态规划(C++版本)

题目描述 原题链接:337. 打家劫舍 III 解题思路 (1)记忆化递归 采用后序遍历的方式,设置一个unordered_map型Hash表record,记录每个结点的情况。当遍历到该节点时,判定之前是否遍历过,如果遍…

docker基本内容简单复习

文章目录一、docker简介docker镜像镜像的优化二、docker网络三、docker数据卷一、docker简介 docker是管理容器的引擎,docker为应用打包、部署平台,而非单纯的虚拟化技术 docker镜像 docker镜像是分层结构;共享宿主机kernel;同一…

【网安神器篇】——系统指纹探测工具finger

作者名:白昼安全主页面链接: 主页传送门创作初心: 以后赚大钱座右铭: 不要让时代的悲哀成为你的悲哀专研方向: web安全,后渗透技术每日鸡汤: 我不想停下,因为这次出发的感觉太好了一…

【双指针问题】977. 有序数组的平方

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…

Python快速上手系列--日志模块--详解篇

前言本篇主要说说日志模块,在写自动化测试框架的时候我们就需要用到这个模块了,方便我们快速的定位错误,了解软件的运行情况,更加顺畅的调试程序。为什么要用到日志模块,直接print不就好了!那得写多少print…

【Linux】进程的概念及操作进程

目录1.什么是进程2.描述进程 - PCB3.进程的具体操作3.1进程的属性与文件属性的关系3.2查看进程准备工作使用指令查找对应进程:在文件中查看进程3.3关闭进程ctrlckill3.4进程的一些特性3.5通过系统调用获取进程标识符3.6通过系统调用创建子进程1.什么是进程 背景&am…

工程师手册:电源设计中的电容选用规则

摘要 电源往往是我们在电路设计过程中最容易忽略的环节。作为一款优秀的设计,电源设计应当是很重要的,它很大程度影响了整个系统的性能和成本。电源设计中的电容使用,往往又是电源设计中最容易被忽略的地方。一、电源设计中电容的工作原理 在…

前段时间公司招人,面了一个要20K的,一问自动化只会点皮毛···

前段时间公司要招2个自动化测试,同事面了几十个候选人,发现了一个很奇怪的现象,面试的时候,如果问的是框架api、脚本编写这些问题,基本上个个都能对答如流,等问到实际项目的时候,类似“怎么从0开…

vue+elementUI 实现设置还款日字母弹窗组件

1、业务背景 还款业务,设置每月还款日,选每月几号扣款,不需要29、30、31,因为不是每个月都有这三天的 2、预期效果图 3、代码实现 3.1 初始化vue项目 地址:https://cn.vuejs.org/guide/introduction.html 3.2 在项…

KMS钥匙管理系统产品分析

背景: 人造成的不可控因素很多 以前拿公司钥匙的时候要先进行纸质登记,还钥匙的的时候也要进行纸质统计, 这个过程中有很多不可控的因素,如果没有登记怎么办?人把钥匙丢了怎么办呢? 产品设计 引入机器&am…

UDP网络编程

UDP和TCP 前几节我们提到了计算机网络编程中的TCP编程,TCP和UDP都是计算机机网络通信的传输层中的传输协议,今天我们来学习计算机网络编程中的基于UDP传输协议的网络编程 首先我们要了解TCP和UDP的区别 它们是同属于计算机网络传输层的传输协议 TCP&…

LeetCode24两两交换链表中的节点 带有输入和输出的完整程序

题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出…

CSAPP学习笔记——虚拟内存(一)

虚拟内存的能力 它将主存看成是一个存储在地址空间的高速缓存,在主存中只保存活动区域,并更具需要在磁盘和主存之间来回传送数据,通过这种方式来高效使用主存(DRAM)它为每个进程提供了一致的地址空间,从而…

python虚拟环境与环境变量

一、环境变量 1.环境变量 在命令行下,使用可执行文件,需要来到可执行文件的路径下执行 如果在任意路径下执行可执行文件,能够有响应,就需要在环境变量配置 2.设置环境变量 用户变量:当前用户登录到系统,…

【LeetCode】剑指 Offer 07. 重建二叉树 p62 -- Java Version

题目链接:https://leetcode.cn/problems/zhong-jian-er-cha-shu-lcof/ 1. 题目介绍(07. 重建二叉树) 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的…