特征提取算法——BRISK(Binary Robust Invariant Scalable Kepoints)学习笔记

今天介绍一种特征提取算法:BRISK(Binary Robust Invariant Scalable Kepoints)

BRISK是Stefan等人在ICCV11上发表的。通过对原论文进行泛读后,对该算法有了一定的了解。

 

原论文地址如下:

https://www.researchgate.net/profile/Roland_Siegwart/publication/221110715_BRISK_Binary_Robust_invariant_scalable_keypoints/links/0deec52d6aea6c8a2e000000/BRISK-Binary-Robust-invariant-scalable-keypoints.pdf

 

BRISK是一种改进的BRIEF算法,该算法具有高计算效率旋转、尺度不变性的特点,对噪声也有一定鲁棒性。

该算法总的来说分为以下几步:

构建尺度空间

尺度空间的建立通过对原图像进行降采样实现,尺度空间包括n个octaves和n个intra-octaves,一般来说n的值为4。那么我们就有一个8层的图形金字塔。图像金字塔是一种以多分辨率来解释图像的结构,在SIFT特征提取中也有用到,如下所示:

图像金字塔总结_生如蚁,美如神-CSDN博客

BRISK中用到的图形金字塔每层octaves是通过缩放因子2来降采样,而每层intra-octaves则通过缩放因子1.5来降采样。最终的8层octaves尺寸如下图所示:

如果原图长为18像素,那么intra-octave0将被下采样为12个像素,octave1则为9个。

建立完这8张不同的尺度图像之后,下一步要对每一层尺度空间进行FAST 9-16关键点检测,阈值这里为T。

FAST 9-16关键点检测可以自行CSDN搜索或者等我的FAST学习笔记发表。

得到关键点后,下一步则是对关键点进行非极大值抑制,具体就是将特征点和金字塔中的上下尺度图层(2*9个点)和当前图层邻域(8个点)共26个邻域点的FAST Score进行比较,只保留这26个点中FAST Score最大的点,非极大值抑制过滤了一些关键点,使得提取出来的点,更具有代表性。

通过非极大值抑制后得出的点由于是在不同的尺度图层中表示的,所以离散度也有所不同。这样得出的点并不能精准表达特征。接下来还需要进一步定位他们。

亚像素和连续尺度细化

论文中提到 “将图像显着性视为一个连续量,不仅在整个图像上,而且在比例尺维度上。我们采用亚像素和连续尺度细化方法。

为了精简亚像素和连续尺度细化的过程,原论文中使用了在三个目标图层的最小二乘意义上的二次方程拟合方法。

看到这里的时候我也有点一头雾水,但是可以通过这幅图简单理解:

我们通过尺度空间构建只得到了8个不同的尺度图层,但是设想如果最大的FAST Score值坐落于两个连续尺度中间呢?如上图中红色点所示。

为了解决这个问题,我们采用以下方法:对于三个连续图层di,ci和di-1和三个连续图层中的三个相应关键点进行最小二乘意义的二次方程拟合,得到上图右侧红色方程。为了防止重采样,在每层采用3*3像素的score patch。然后对x和y方向上插值,得到准确的极值点和坐标位置,再对尺度方向进行一维插值,得到关键点所对应的尺度。这就求得了关键点位置关键点尺度。下一步将会用到。

关键点描述

论文中提到BRISK描述子可以作为一个二值化字符串通过连接亮度比较测试集表示。然而,一种更有效的办法:识别关键点方向并做方向归一化,这种做法可以强化旋转不变性。

采样模式和旋转估算

BRISK的一个重要概念就是使用采样关键点邻域的模式。如下图所示:

以关键点为中心,构建不同半径的同心圆,每个圆有不同等间隔采样点,在图中表示为蓝色圆点。所有采样点包括特征点共N个。为了避免混叠效应,所有采样点都应进行半径为r方差为σ的高斯滤波。N个采样点会产生N*(N-1)/2个采样点对。局部梯度值g可以被表示为以下公式:

g(p _i,p_j)=(p_j-p_i)\cdot \frac{I(p_j,\sigma j)-I(p_i,\sigma i)}{\begin{Vmatrix} p_j-p_i\end{Vmatrix}^2}

这里的I(p_i,\sigma _i)像素灰度值\sigma关键点尺度,p表示关键点位置

A=\left \{ (p_i,p_j)\in \mathbb{R}^2 \times \mathbb{R}^2|i<N\wedge j<i\wedge i,j\in \mathbb{N} \right \}

集合A是所有采样点对

S=\left \{ (p_i,p_j)\in A |\left \| p_j-p_i \right \|<\delta _{max} \}\subseteq A

L=\left \{ (p_i,p_j)\in A |\left \| p_j-p_i \right \|>\delta _{min} \}\subseteq A

这里的两个阈值S和L分别是短距离S和长距离L,阈值分别设置为\sigma _{max}=9.57t,\sigma _{min}=13.67t,t是关键点所在尺度。

最后的特征点主方向可以通过以下公式计算:

g=\binom{g_x}{g_y}=\frac{1}{L}\cdot \sum_{(p_i,p_j)\in L}^{ }g(p_i,p_j)

这里g使用长距离计算。

构建描述子

为了构建旋转和尺度归一化描述子,论文中运用了在关键点旋转的采样方式,旋转角度为\alpha = arctan2(g_y,g_x)。向量描述子由所有的短距离二进制编码来描述,编码方式如下:

b=\begin{cases}1, & I(p_{j}^{\alpha},\sigma _j)>I(p_{i}^{\alpha},\sigma _i) &0,&\text otherwise \end{cases}

\forall (p_{i}^{\alpha},p_{j}^{\alpha})\in S

\alpha表示旋转角度,最终通过以上公式生成了一个512的二进制编码,这也就是BRISK64。

特征点匹配

这里使用了Hamming距离来实现特征点匹配,不懂得同学自行百度。

这里配上一张论文中的实验图像,可以看出BRISK的旋转不变性。

 

参考资料:

https://www.researchgate.net/profile/Roland_Siegwart/publication/221110715_BRISK_Binary_Robust_invariant_scalable_keypoints/links/0deec52d6aea6c8a2e000000/BRISK-Binary-Robust-invariant-scalable-keypoints.pdf

https://blog.csdn.net/weixin_40196271/article/details/84143545?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522160946160016780310190700%252522%25252C%252522scm%252522%25253A%25252220140713.130102334..%252522%25257D&request_id=160946160016780310190700&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-84143545.first_rank_v2_pc_rank_v29&utm_term=BRISK%E7%AE%97%E6%B3%95

https://senitco.github.io/2017/07/12/image-feature-brisk/

 

 

 

 

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BRISKBinary Robust Invariant Scalable Keypoints)是一种基于二进制描述符的特征提取算法,它是SURF(Speeded Up Robust Features)算法的改进版。BRISK算法具有速度快、鲁棒性强、可扩展性好等优点,被广泛应用于计算机视觉领域。 BRISK算法的主要原理如下: 1. 构建尺度空间 BRISK算法首先构建尺度空间,通过高斯差分金字塔计算图像的不同尺度。在每个尺度下,通过Harris角点检测算法检测图像中的关键点。 2. 构建金字塔 BRISK算法通过构建金字塔来对关键点进行描述。金字塔是由不同尺度的图像构成的,每个尺度都是原图像的缩小版本。BRISK算法使用固定的尺度空间,因此在不同尺度下提取的特征是一致的。 3. 特征点定位 BRISK算法使用Harris角点检测算法来定位特征点。该算法通过计算图像的二阶导数来检测图像中的角点。 4. 方向分配 BRISK算法通过计算特征点周围像素的梯度方向来确定特征点的方向。该算法将特征点的方向分配为距离该点最近的梯度方向。 5. 特征点描述 BRISK算法使用二进制描述符来描述特征点。该算法通过计算特征点周围像素的亮度差异来生成二进制描述符。二进制描述符具有高效的计算性能和较强的鲁棒性。 总体来说,BRISK算法通过构建尺度空间、金字塔、特征点定位、方向分配和特征点描述等步骤来提取图像的特征点。该算法具有速度快、鲁棒性强、可扩展性好等优点,在计算机视觉领域有广泛的应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值