KAZE论文研读

KAZE是发表在ECCV2012的一种特征点检测算法,相比于SIFT和SURF,KAZE建立的高斯金字塔是非线性的尺度空间,采用加性算子分裂算法(Additive Operator Splitting, AOS)来进行非线性扩散滤波。一个很显著的特点是在模糊图像的同时还能保留边缘细节。邹宇华在CSDN中有一系列文章进行了讲解。

AKAZE 是加速版KAZE特征,即Accelerated KAZE Features。由KAZE原作者在2013年在KAZE基础上进行改进。ORB与AKAZE应该算是state of the art。关于ORB与AKAZE的详细对比可以看2015年的论文。small_munich在博客中提到:与SIFT、SURF算法相比,AKAZE算法更快同时与ORB、BRISK算法相比,可重复性与鲁棒性提升很大,实验结果表明akaze算法从匹配性能与算法耗时都优于orb算法。其实我认为在一定范围内没有绝对的优劣,还是要看自己的应用场景,在之前看ORB的论文中作者也通过引用文献提到SIFT在涂鸦图像有更好的性能。ORB通常应用在移动设备中,在ORB论文中作者就在安卓手机上进行了测试,流行的SLAM中也有很多采样的是ORB-SLAM算法。small_munich在博文中给出了OpenCV版AKAZE匹配代码的百度网盘链接和ORB-LDB描述子代码。

在百度学术上可以很容易找到KAZE论文,引用已经有100多,但是却很难找到AKZE。最后从博文中找到了作者的个人主页。OpenCV官方https://docs.opencv.org/trunk/d8/d30/classcv_1_1AKAZE.html文档。CUDA版本的AKAZE的github主页https://github.com/donlk/cuda_akaze 。OpenCV还对AKAZE和ORB进行了对比。

1 Introduction

Multiscale image processing多尺度图像处理的重要性。对于每一个检测到的特征detected features会产生对应的局部描述子local description。

多尺度方法的思想很简单,就是通过对原图滤波,进而构建尺度空间。滤波是对于尺度或者时间变化的近似。对于高斯尺度空间,滤波是通过原图与高斯核进行卷积得到的。高斯核的标准差越大,得到的图像表示也更简单。但是,高斯尺度空间是一种简单的尺度空间表示方法,并不是唯一的线性空间。高斯尺度空间通过选择一些粗糙的尺度coarser scales来减少噪声,并且增强突出的结构,代价是损失了局部精度localization accuracy,这是因为高斯模糊Gaussian blurring对所有尺度上的细节和噪声都进行了平滑,而没有考虑目标objects的边界。

所以,我们希望模糊的时候可以根据图像内容自适应地调整,保留细节和边缘。庆幸的是非线性尺度空间已经被人提出来了,更庆幸的是本文作者是第一个将其运用在特征检测和描述中的。然后作者分析了一下为什么放着现成的非线性尺度空间没人用,主要是因为非线性空间方法中的forward Euler scheme需要很小的步长才能达到收敛,所以计算量大导致效率不高,所幸有人对此做出了改进,主要是使用了AOS(Additive Operator Splitting)方法。AOS还可以解决线性方程的对三角系统,具体方法是托马斯算法,高斯提纯算法的一个特殊变形。

使用AOS方法和可变传导扩散建立了非线性空间,从图像的不同变形中提取出重复性高和独特性强的特征点。特征点命名为KAZE,在日语中是风的意思,为了纪念尺度空间分析之父,日本学者Iijima。同时风在自然界中也是由于非线性流动造成的,与图像中的非线性扩散很像。

2 Related Work

主要讲了SIFT和SURF算法。SIFT是在DoG中寻找极值。SURF受SIFT的启发,使用了积分图,从而可以使用盒子滤波对对高斯derivatives进行近似,而不是在整个尺度空间进行计算。在计算描述子时,在邻域使用Haar小波。还提到了两种SURF的改进,CenSurE和M-SURF。KAZE相比于SURF适当牺牲了一点计算量,但在特征点检测和描述上取得了很大的进步。

Nonlinear Diffusion Filtering

非线性扩散方法图像亮度L的在不同尺度的演变描述为流动方程flow function的散度divergence。这个过程由非线性偏导方程来表示:

\frac{​{\partial L}}{​{\partial t}} = div(c(x,y,t) \cdot \nabla L)

这个方程中包括了散度divergence和梯度gradient。方程中除了图像的坐标x,y,还有一个参数是t,它表示了尺度,t越大,图像表示也越简单。

其中传导函数是很重要的,也是文章的关键。传导函数应该根据图像内容做自适应。Perona和Malik提出了一种传导函数,根据图像的梯度大小减小在边缘处的扩散,增强在区域内部的平滑。

$c(x,y,t) = g\left( {\left| {\nabla {L_\sigma }(x,y,t)} \right|} \right)$

其中$\nabla {L_\sigma }$  是对高斯平滑后的图像的梯度。传导函数c又引出了一个新的传导函数g

{g_1} = \exp \left( { - \frac{​{​{​{\left| {\nabla {L_o}} \right|}^2}}}{​{​{k^2}}}} \right){g_2} = \frac{1}{​{1 + \frac{​{​{​{\left| {\nabla {L_o}} \right|}^2}}}{​{​{k^2}}}}}

K是对比度因子contrast factor,控制了扩散的水平。g1提升了高对比度的边缘,g2提升了宽区域部分。还有一种g3,在边缘周围平滑的强度远大于穿过边缘的平滑。KAZE中默认使用g2.

{g_3} = \left\{ \begin{array}{l} 1,{\left| {\nabla {L_o}} \right|^2} = 0\\ 1 - \exp \left( { - \frac{​{3.315}}{​{​{​{\left( {\left| {\nabla {L_o}} \right|/k} \right)}^8}}}} \right) \end{array} \right.,{\left| {\nabla {L_o}} \right|^2} > 0

关于k值的选择,作者提到可以手动选择一个固定值,也可以根据对图像梯度的估计做自适应的调整。K决定了哪些边缘被增强,哪些边缘被取消canceled。作者选取了平滑过后的图像的梯度直方图的70%作为k值。图1展示了随着k值的增大,只有梯度更大的边缘才会被保留。

3.2 AOS Schemes

对于非线性扩散滤波中的非线性偏微分方程,没有解析解analytical solution。因此,需要使用数值分析方法numerical methods来求取近似解。一个可能的离散化方法是linear-implicit和semi-implicit。离散差分方程的矩阵形式:

\frac{​{​{L^{i + 1}} - {L^i}}}{\tau } = \sum\limits_{l = 1}^m {​{A_l}} \left( {​{L^i}} \right){L^{i + 1}}

 是每一个维度的图像传导的矩阵形式。在semi-implicit中,为了计算解 ,需要求解方程的线性系统。可以得到解${L^{i + 1}}$

${L^{i + 1}} = {\left( {I - \tau \sum\limits_{l = 1}^m {​{A_l}\left( {​{L^i}} \right)} } \right)^{ - 1}}{L^i}$

Semi-implicit在任意步长是稳定的。此外,它创造了离散非线性扩散尺度空间。而且必须要求解方程的线性系统,这个系统的矩阵是对三角并且对角占优的(Tridiagonal and diagonally dominant)。这样系统就可以使用高效的托马斯方法(传统系统中熟知的高斯elimination方法)。

4 KAZE Features

介绍一下KAZE特征点的检测和描述方法。首先,使用AOS方法和可变的传导扩散构建非线性尺度空间,尺度空间的大小由进化时间决定。 2D的特征点features of interest是在尺度空间上的尺度归一化的(scale-normalized determinant)Hessian矩阵响应的局部最大值。最后,计算特征点的主方向,考虑图像的一阶微分first order image derivatives实现尺度和旋转不变性。

4.1 非线性尺度空间的构建

和SIFT类似,离散后的尺度空间包含O个octaves和S个sub-levels,但是和SIFT不同的是,KAZE的尺度空间始终是基于原图的操作,而不是在每一层进行下采样。每一个子层的尺度因子可用下式表示:

${\sigma _i}\left( {\sigma ,s} \right) = {\sigma _0}{2^{o + s/S}},o \in \left[ {0...O - 1} \right],s \in \left[ {0...S - 1} \right],i \in \left[ {0...N} \right]$

这里的尺度因子其实是以像素为单位的,即高斯模板的大小以像素为单位,我们需要将单位由像素转换到以时间为单位,因为非线性扩散滤波器是根据时间定义的。二者的关系是 $t = {\sigma ^2}$。这样就可以得到每一个子层以时间为单位的表达式。

{t_i} = \frac{1}{2}{\sigma _i}^2,i = \left\{ {0...N} \right\}

需要注意的是,t与 的关系只是在构建尺度空间时两种参数之间的对应关系,二者对应得到的图像之间没有对应关系。不过,当我们选择的扩散函数g是常数1的话,可以得到等效于高斯尺度空间的结果。事实上,在非线性尺度空间中,随着进化的进行,在大部分像素部分,传导函数会趋于常数,例外就是图像的边缘部分。

对于输入图像,首先要进行高斯卷积减少噪声和其他人为因素artefacts的影响。计算图像的梯度直方图,按照3.1小节得到对比度因子(contrast parameter) k,然后使用AOS通过迭代就可以得到非线性尺度空间。

${L^{i + 1}} = {\left( {I - \left( {​{t_{i + 1}} - {t_i}} \right) \cdot \sum\limits_{l = 1}^m {​{A_l}\left( {​{L^i}} \right)} } \right)^{ - 1}}{L^i}$

第一行是高斯线性尺度空间得到的图像。第二行是使用传导函数g3得到的非线性扩散尺度空间。

4.2 Feature Detection

特征点的检测首先要计算尺度归一化的Hessian在不同尺度下的响应值。为了实现尺度不变性,差分算子需要根据尺度大小归一化,因为空间导数的幅度随着尺度而下降。(For multiscale feature detection, the set of differential operators needs to be normalized with respect to scale, since in general the amplitude of spatial derivatives decrease with scale [5])

我的理解是这样的:因为极值和SIFT中一样,是空域和相邻尺度空间上的极值。但是在计算Hessian响应的时候要计算二阶偏导,而导数大小会与尺度有关,所以要归一化,然后再比较寻找最大值。找到最大值之后再和SIFT一样,利用泰勒展开对真正的极值点进行拟合逼近。

作者在计算一阶和二阶导数时使用的滤波器是3x3大小的Scharr,因为这种滤波器可以更好地近似旋转不变性。虽然需要对每一个像素点计算多尺度下的导数,但是我们把计算结果保存下来,在计算描述子的步骤就可以重复使用从而降低计算量。

4.3 Feature Description

寻找主方向。和SURF方法一样,利用特征点的邻域找到主方向。邻域是一个半径为$6{\sigma _i}$ 的范围,${\sigma _i}$ 是特征点所在的尺度大小。 对邻域内的点计算x和y方向的梯度,并且使用高斯进行加权(Gaussian centered at the interest point),这样越是靠近特征点的采样点的重要性就越高。在圆形的邻域内以60度的扇形为滑窗进行转动扫描,计算扇形内的矢量之和,挑选最长的矢量最为主方向。

建立描述子。使用M-SURF描述子来适应非线性空间。对于尺度大小为 的特征点,在其 $24{\sigma _i} \times 24{\sigma _i}$的矩形邻域内计算x和y方向的偏导。这个领域又被分成4x4个子区域,每一个区域大小为$9{\sigma _i} \times 9{\sigma _i}$  ,每两个子区域之间重叠$2{\sigma _i}$ 。对于每一个子区域,对其高斯加权之后可以得到一个描述向量${d_v} = \left( {\sum {​{L_x},\sum {​{L_y},} \sum {\left| {​{L_x}} \right|,} \sum {\left| {​{L_y}} \right|} } } \right)$  ,这个向量是4维的,那么4x4个子区域我们一共可以得到64维的描述子。但是在得到64维描述子之前还要对每一个子区域的向量再进行一次以特征点为中心的高斯加权。考虑到主方向,矩形区域内的点都转到了主方向,此外,梯度的计算也根据了主方向。所以我们得到的64维描述子是旋转不变的。邹的博客中写到,作者的代码提供了SURF、M-SURF和G-SURF三种描述向量,其中G-SURF是作者在2013年发表的论文[7]中提出的新的特征描述算法。另外,作者还提供了这三种向量的简化计算版本,即将主方向固定为右上方up-right,然后再计算描述向量。

 

5 Experimental Results and Discussion

实验图像来自mikolajczyk的数据集。他在牛津大学工作过,所以这个数据集其实就是牛津大学的那个数据集。Mikolajczyk的主要研究内容就是图像和视频的识别和匹配,而且这个大牛正在招博士生http://www.imperial.ac.uk/people/k.mikolajczyk。还是说这个数据集,数据集里面包含了图像模糊、亮度变化、视角变化、尺度变化、缩放、旋转和JPEG压缩等图像序列。此外,每组图像序列与其第一幅图像的真实变换关系是已知的。但是这个数据集没有考虑噪声的因素,于是KAZE的作者自己建立了一个数据集,使用递增的方差来模糊图像。Blur不算是对噪声的模拟吗?

作者比较了SURF、SIFT和CenSurE。SURF通过一个闭源closed-source的库实现,SIFT使用Vedaldi的库http://www.vlfeat.org/实现。CenSurE算法使用OpenCV的STAR检测器实现,使用M-SURF作为描述子。几种方法的金字塔层数都设置为相同的,特征点检测时候的阈值也设置为一个合适的值,使得对一幅图像可以得到的特征点数目近似相同。

5.1 KAZE Detector Repeatability

两幅图像之间的检测器的重复度Repeatability的定义出现在文献13中,它描述了可以匹配的点的数目和两幅图中出现的可见特征点数目的最小值之间的比值。至于什么叫特征点可以匹配,作者提出了一个新的指标overlap error:${\varepsilon _s} = 1 - \left( {A \cap {H^t}BH} \right)/\left( {A \cup {H^t}BH} \right)$  ,A和B是两个区域,H是单应矩阵homography。如果overlap error小于50%,就认为两个特征点可以匹配。

上图展示了不同图像变换下不同算法的重复度表现。可以看到不同的变换关系下表现最好的都是KAZE,在模拟高斯噪声情况下,KAZE的重复度比SURF和STAR高出20%,比SIFT高出40%。其中又以传导函数g2表现最好。 更适合宽大区域如被Hessian检测出的blob-like features。  适用于高对比度的边缘如角点检测corner detection。

 实验还对检测,描述和匹配进行了综合评估。描述子使用文献14中的方法进行评估,使用了precision和recall图。

recall = \frac{​{\# {\rm{correct matches}}}}{​{\# correspondences}},1 - precision = \frac{​{\# false{\rm{ matches}}}}{​{\# all{\rm{ mathes}}}}

对于没有视角和旋转变换的几组图像,使用的描述子是upright版本的,这种版本没有添加主方向。可以加快速度,且性能良好。

上图就是precision-recall图,使用的匹配策略是最近邻匹配。除了Boat和Graffti图像组,其他图像组中KAZE都明显高于其他算法。即便在Boat和Graffti中,KAZE的correspondences的数目也大约是SURF和SIFT的两倍(算法示例的括号里面就是correspondences的数目)。

5.3 Image Matching for Deformable Surfaces

除了在基准数据集benchmark datasets上进行评估,还测试得到了表面变形deformable surfaces情况下的匹配结果。文献23中提出了一种变形表面上的检测方法,可以从匹配对中剔除外点discard outliers。在检测与重建中,在模板图像和目标图像中找出尽可能多的对应点correspondences是很重要的

图6就是在paper dataset上的实验结果。检测出两幅图像的特征点后,实验最近邻比率法NNDR(nearest neighbor distance ratio)得到假定的匹配对putative correspondences,然后使用文献23中的方法剔除外点。

a是paper dataset中的帧号为262的图像(b)的帧号为315(c)是不同NNDR比率下的内点inliers数量。可以看出在表面变形的例子中,KAZE得到的内点数目更多。

5.4 Timing Evaluation

测试了以g2为传导函数的KAZE的各个步骤的耗时,并和SURF,SIFT,STAR进行了对比。

与SURF和STAR相比,KAZE计算量更大,最耗时的步骤是建立非线性尺度空间的过程。KAZE的耗时与SIFT相当。KAZE以计算机增加为代价,得到了性能的提升。在改进中,度图像的每一个尺度,并行化AOS的计算,业务AOS将整个扩散滤波分离成一维的独立的进程。

6 Conclusions and Future Work

作者使用AOS和可变传导扩散构建了非线性空间,与之前的最优算法state-of-the-art methods如SIFT,SURF,CenSurE比较,适度增加了计算量,得到了检测和描述上的提升。

作者的下一步工作重心仍然放在非线性扩散滤波上,一方面致力于更高质量的如文献21中的增强相干性的扩散滤波,另一方面致力于通过简化或者硬件编程实现KAZE的加速。KAZE还可以用于大尺度目标的识别和3D重建。

邹宇华在博客中针对KAZE代码进行了优化,可以接近SURF的速度。还对KAZE和SIFT做了详细的比较,SIFT的代码可以自适应改变金字塔层数。KAZE使用KNNMatch不需要过滤误匹配对,若使用BFmatch或者FlannMatch大部分需要过滤才能找到正确的Homography,而有时又会因为过滤使得匹配对过少。博客中还将KAZE特征点检测方法和常规的描述方法做了组合,使用表明传统基于线性空间的描述方法不适用于KAZE。

Reference:

1.邹宇华https://blog.csdn.net/chenyusiyuan/article/details/8710462

2.akaze_tracking:https://blog.csdn.net/Small_Munich/article/details/79418389

3.KAZE作者http://www.robesafe.com/personal/pablo.alcantarilla/kaze.html

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

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

相关文章

简单的线性模型实现tensorflow权重的生成和调用,并且用类的方式实现参数共享

首先看文件路径,line_regression是总文件夹,model文件夹存放权重文件, global_variable.py写了一句话. save_path./model/weight 权重要存放的路径,以weight命名. lineRegulation_model.py代码 import tensorflow as tf "…

comparing ORB and AKAZE

文章全称是《Comparing ORB and AKAZE for visual odometry of unmanned aerial vehicles》。这是一篇来自巴西的文章,没有在百度文库中找到,是在其他博客中给出的链接得到的。从链接的URL可以看出这是一篇来自会议CCIS云计算与智能系统国际会议的文章。…

利用 CRISPR 基因编辑技术,人类正在做七件“疯狂”的事

来源:36Kr编译:喜汤很少有哪种现代科学创新能像CRISPR基因编辑技术一样影响深远。有了它,科学家们可以精确地改变任何细胞的DNA。CRISPR技术成为新宠,部分原因是它比早期基因编辑技术更容易使用。尽管CRISPR还没有彻底大展身手&am…

吴恩达作业3:利用深层神经网络实现小猫的分类

利用4层神经网络实现小猫的分类,小猫训练样本是(209,64*64*312288),故输入节点是12288个,隐藏层节点依次为20,7,5,输出层为1。 首先看文件路径,dnn_utils_v2.py代码是激活…

A-KAZE论文研读

AKAZE是KAZE的加速版本。KAZE在构建非线性空间的过程中很耗时,在AKAZE中将Fast Explicit Diffusion(FED)加入到金字塔框架可以dramatically speed-up。在描述子方面,AKAZE使用了更高效的Modified Local Difference Binary(M-LDB),可以从非线性…

和你抢“饭碗”的40家服务机器人企业大盘点!

来源:物联网智库摘要:本文将对国内近40家服务机器人企业进行汇总介绍,所选企业在其相应版块活跃度较高。从三个大类进行了细分盘点。国家机器人联盟(IFR)根据应用环境将机器人分为了工业机器人和服务机器人。服务机器人…

YOLO9000

YOLO9000是YOLO的第三个版本。前两个版本是YOLO v1,YOLO v2,在CVPR2017的文章《Better,Faster,Stronger》中的前半部分都是对前两个版本的介绍,新的内容主要在Stronger部分。YOLO9000中的9000指的是YOLO可以对超过9000种图像进行分类。 Bett…

吴恩达作业4:权重初始化

权重初始化的 正确选择能够有效的避免多层神经网络传播过程中的梯度消失和梯度爆炸问题,下面通过三个初始化的方法来验证: sigmoid导数函数:最大值小于0.25,故经过多层反向传播以后,会导致最初的层,权重无…

先发制人!Waymo将首推商用载人自动驾驶服务,Uber们怕不怕?

编译:费棋来源:AI科技大本营“真的,真的很难。”11 月举办的一场会议上,Alphabet 旗下 Waymo CEO John Krafcik 对做自动驾驶汽车技术的艰难不无感慨。在他看来,未来几十年内,自动驾驶汽车将一直存在限制&a…

利用ORB/AKAZE特征点进行图像配准

Kp1,kp2都是list类型,两幅图都是500个特征点。这和ORB论文中的数据是一样的。4.4章节 Matches也是list类型,找到325个匹配对。 AKAZE文章中提到一个指标:MS(matching score)# Correct Matches/# Features, 如果overlap area error 小于40%…

吴恩达作业5:正则化和dropout

构建了三层神经网络来验证正则化和dropout对防止过拟合的作用。 首先看数据集,reg_utils.py包含产生数据集函数,前向传播,计算损失值等,代码如下: import numpy as np import matplotlib.pyplot as plt import h5py …

十年之后,数字孪生将这样改变我们的工作与生活

来源:资本实验室数字孪生是近几年兴起的非常前沿的新技术,简单说就是利用物理模型,使用传感器获取数据的仿真过程,在虚拟空间中完成映射,以反映相对应的实体的全生命周期过程。在未来,物理世界中的各种事物…

什么是图像

图像,尤其是数字图像的定义,在冈萨雷斯的书中是一个二维函数f(x,y),x,y是空间平面坐标,幅值f是图像在该点处的灰度或者强度。下面通过OpenCV中最常用的图像表示方法Mat来看一下在计算机中是怎么定义图像的。 Mat的定义 OpenCV在2.0之后改用…

吴恩达作业6:梯度检验

梯度检验的目的就是看反向传播过程中的导数有没有较大的误差,首先看Jtheta*x的梯度检验:代码如下 import numpy as np """ Jx*theta的前向传播 """ def forward_propagation(x,theta):Jx*thetareturn J ""&quo…

10年后的计算机会是怎样的?

作者:孙鹏(剑桥大学计算机系博士)来源:新原理研究所上个世纪三十年代,邱奇和图灵共同提出了通用计算机的概念[1]。在接下来的十多年里,因为战争需要下的国家推动,计算机得以很快从理论发展成为实…

什么是图像变换

还是看OpenCV官方手册,我觉得这样可以同时学习如何使用函数和如何理解一些基本概念。 首先,这里的几何变换geometrical transformations是针对2D图像而言的,不改变图像内容而是将像素网格变形deform the pixel grid,映射到目标图…

MSRA20周年研究趋势文章|图像识别的未来:机遇与挑战并存

文/微软亚洲研究院 代季峰 林思德 郭百宁识别图像对人类来说是件极容易的事情,但是对机器而言,这也经历了漫长岁月。在计算机视觉领域,图像识别这几年的发展突飞猛进。例如,在 PASCAL VOC 物体检测基准测试中,检测器的…

吴恩达作业7:梯度下降优化算法

先说说BatchGD用整个训练样本进行训练得出损失值,SGD是只用一个训练样本训练就得出损失值,GD导致训练慢,SGD导致收敛到最小值不平滑,故引入Mini-batch GD,选取部分样本进行训练得出损失值, 普通梯度下降算…

什么是单应矩阵和本质矩阵

知乎上面的大牛还是很多,直接搜Homography或者单应矩阵就能得到很多大神的回答,可能回答中的一句话或者一个链接就够自己学习很久。 其实在之前研究双目视觉的时候就接触了对极几何,通过视觉就可以得到物体的远近信息,这也是特斯…

tensorflow实现反卷积

先看ogrid用法 from numpy import ogrid,repeat,newaxis from skimage import io import numpy as np size3 x,yogrid[:size,:size]#第一部分产生多行一列 第二部分产生一行多列 print(x) print(y) 打印结果: newaxis用法: """ newaxis…