SIFT算法系列之描述符

本文详细介绍了SIFT算法的描述符构建过程,包括确定特征点主方向、构建ROI邻域、旋转、计算梯度直方图和生成128维向量。此外,还探讨了Root-SIFT算法,它通过对SIFT描述符进行l1归一化和平方根操作,提高匹配效果。
摘要由CSDN通过智能技术生成
SIFT算法描述符简述

  SIFT算法系列一直想把描述符阶段给写完,怪自己有点小偷懒,出来混迟早要还的。这次在之前SIFT算法系列之尺度空间SIFT算法系列之特征点检测基础上,继续完善将描述符如何生成过程写完。

废话不多说,我们知道描述符生成是建立在特征点之后的,假设我们检测出一些特征点,如下图:

如上图,在特征点已经检测出来基础上,来计算特征点的主方向;

  SIFT源代码中计算主方向:以关键点为中心对齐周围邻域窗口进行采样,首先采取高斯函数进行平滑,减少邻域像素突变干扰。然后计算邻域的像素与关键点的梯度幅值与方向来统计形成直方图。

  梯度直方图的范围是0~360度,每45度一个柱,总共8个柱;或者设置每10度一个柱,总共36个柱。下图为8个柱示例图:

  梯度直方图最大峰值则设置成关键点的主方向,如果第二峰值是第一峰值80%则也保存作为候选关键点辅助方向。

SIFT算法描述符构建过程

1. 确定关键点主方向后,根据关键点的尺度系数得到ROI邻域半径;

2. 将关键点邻域半径的ROI进行主方向旋转;

3. 对旋转后的ROI区域计算关键点的梯度直方图;

4. 对每个2x2的小子区域8为向量排序,生成128维向量;

5. 对128维向量进行归一化操作;

  1 关键点的主方向确定后,首先将当前特征点尺度计算出ROI区域半径:(我们知道特征点检测会在尺度空间上进行,那么检测出来的特征点也会存在不同的尺度参数,所以我们在构建局部描述符时候需要根据不同的尺度那划分不同半径区域,这样才可以保持尺度不变性匹配)。

r a d i u s = ( 3 σ o c t × 2 × ( d + 1 ) + 1 ) 2 radius=\frac{(3σ_{oct}×{\sqrt2}×(d+1)+1)}{2} radius=2(3σoct×2 ×(d+1)+1)

其中 σ o c t σ_{oct} σoct即是尺度参数, d = 4 d=4 d=4

  2 根据主方向将确定后的ROI(尺度参数来确定邻域半径)旋转至主方向:

这样经过旋转后每个像素新坐标如下:

( x ′ y ′ ) = ( c o s θ − s i n θ s i n θ c o s θ ) ∗ ( x y ) \left( \begin{matrix} x^{'} \\ y^{'} \end{matrix} \right)= \left( \begin{matrix} cos^{θ} & -sin^{θ}\\ sin^{θ} & cos^{θ} \end{matrix} \right)*\left( \begin{matrix} x \\ y \end{matrix} \right) (xy)=(cosθsinθ

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值