前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KAZE特征的理解

KAZE特征的理解

作者头像
全栈程序员站长
发布2022-09-07 15:58:15
8570
发布2022-09-07 15:58:15
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

毕设要做图像配准,计划使用KAZE特征进行特征点的检测,以下是我对KAZE算法原理的理解,有什么不对的地方,希望提出来大家相互讨论学习。 一、KAZE算法的由来 KAZE算法是由法国学者在在2012年的ECCV会议中提出的,是一种比SIFT更稳定的特征检测算法。KAZE的取名是为了纪念尺度空间分析的开创者—日本学者Iijima。KAZE在日语中是‘风’的谐音,寓意是就像风的形成是空气在空间中非线性的流动过程一样,KAZE特征检测是在图像域中进行非线性扩散处理的过程。 KAZE算法的原英文文献《KAZE Features》的地址为:https://link.springer.com/chapter/10.1007/978-3-642-33783-3_16 二、KAZE算法的原理 SITF、SURF算法是通过线性尺度空间,在线性尺度空间来检测特征点的,容易造成边界模糊和细节丢失;而KAZE算法是通过构造非线性尺度空间,并在非线性尺度空间来检测特征点,保留了更多的图像细节。KAZE算法主要包括以下步骤: (1)非线性尺度空间的构建; (2)特征点的检测与精确定位; (3)特征点主方向的确定; (4)特征描述子的生成。 下面详细讲述每一步的具体过程。 1.非线性尺度空间的构建 KAZE算法作者通过非线性扩散滤波和加性算子分裂(AOS)算法来构造非线性尺度空间。在此有必要了解下非线性扩散滤波和AOS算法。 (1) 非线性扩散滤波 非线性扩散滤波方法是将图像亮度(L)在不同尺度上的变化视为某种形式的流动函数的散度,可以通过非线性偏微分方程来描述:

KAZE特征的理解
KAZE特征的理解

其中c(x,y,t)为传导函数,可由下式来构造:

在这里插入图片描述
在这里插入图片描述

其中的▽Lσ是高斯平滑后的图像Lσ的梯度,《KAZE Features》一文中给出了g()函数的几种表达形式:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其中g1能够保留高对比度的边缘,g2能够保留宽度较大的区域,g3能够有效平滑区域内部而保留边界信息,《KAZE Features》一文中选择g2。参数k是控制扩散级别的对比度因子,决定保留多少边缘信息,其值越大,保留的边缘信息越少。 (2)AOS算法 非线性扩散滤波中的偏微分方程没有解析解。因此,需要使用数值方法来逼近微分方程。将上述偏微分方程离散化:

在这里插入图片描述
在这里插入图片描述

其中Al是表示图像在各维度(l)上传导性的矩阵,τ为时间步长。该方程的解如下:

在这里插入图片描述
在这里插入图片描述

了解了非线性扩散滤波和AOS算法后,下面进入我们的正题——非线性尺度空间的构建。 KAZE特征的尺度空间构造与SIFT类似,尺度级别按对数递增,但KAZE的各个层级均采用与原始图像相同的分辨率。 SIFT算法中线性尺度空间的构建是由由高斯金字塔相邻两层相减得到DOG金字塔的。需对对原始图像进行下采样,每次下采样所得到的新图像为金字塔的一层,多次下采样操作便构成了图像金字塔。为了让尺度体现其连续性,高斯金字塔在简单降采样的基础上加上了高斯滤波。将图像金字塔每层的一张图像使用不同参数做高斯模糊,使得金字塔的每层含有多张高斯模糊图像,将金字塔每层多张图像合称为一组(Octave)。由SIFT算法特征点的检测过程知道,要使每组中检测S个尺度的极值点,则DOG金字塔每组需S+2层图像,高斯金字塔每组需S+3层图像。 那么,构建尺度空间的参数:

在这里插入图片描述
在这里插入图片描述

如何确定呢? 以上三个参数具有关系:

在这里插入图片描述
在这里插入图片描述

其中是σ0基准层尺度,o为组octave的索引,s为组内层的索引。关键点的尺度参数就是按关键点所在的组和组内的层数,结合上式计算来的(所以在后面特征描述符的生成中,对于对于处在同一组的同一层中的特征点的描述符相同)。 在构建高斯金字塔时,组内每层的尺度参数按如下公式计算:

在这里插入图片描述
在这里插入图片描述

其中

在这里插入图片描述
在这里插入图片描述

其中σ0为初始尺度,lowe取1.6,s为组内的层索引,S=3。由上式可知,不同组相同层的组内尺度参数相同。 在计算组内某一层图像的尺度时,直接使用如下公式进行计算:

在这里插入图片描述
在这里插入图片描述

为了保证尺度空间的连续性,下一组的第1层图像是由上一组的倒数第三层下采样得到的。假设第一组的初始尺度为σ,则第一组中每层的尺度参数依次为:σ,kσ,kkσ,kkkσ,kkkkσ…倒数第三层的尺度为

在这里插入图片描述
在这里插入图片描述

而DoG金字塔中间的层数被选出来检测极值点,第一组是kσ,kkσ,kkkσ,第二组是2kσ,2kkσ,2kkkσ,而kkkσ=2σ,2kσ,2kkσ,2kkkσ=kkkkσ,kkkkkσ,kkkkkkσ,和第一组的连续起来了,保证了尺度空间的连续性。下图是SIFT算法构造尺度空间的过程。

在这里插入图片描述
在这里插入图片描述

而KAZE的不同之处是,无需对图像进行下采样,各个层级均采用与原始图像相同的分辨率。非线性扩散滤波模型是以时间为单位的,故需要将尺度参数转换为时间(此处称为进化时间)。在高斯尺度空间下,使用标准差为σ的高斯核对图像进行卷积,相当于对图像进行持续时间为t=σσ/2的滤波,故两者的转换公式为:t=σσ/2。根据一组进化时间,利用AOS算法即可得到非线性尺度空间的所有图像:

在这里插入图片描述
在这里插入图片描述

2.特征点的检测与精确定位 (1)特征点的检测 KAZE的特征点检测与SIFT类似。是通过寻找不同尺度归一化后的Hessian行列式的局部极大值(或者极小值)点来实现的。

在这里插入图片描述
在这里插入图片描述

如上图中画×的特征点,比较其与同一层中周围的8个像素点,再加上相邻层的9+9=18个像素点,即26个像素点,当其大于(或者小于)所有相邻点时,该点就是极值点。 (2).特征点的精确定位 这一过程和SIFT一样,通过泰勒表达式:

在这里插入图片描述
在这里插入图片描述

对其求导数,并令导数等于零,解得

在这里插入图片描述
在这里插入图片描述

将解带入泰勒表达式,得

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

时保留该特征点,否则剔除。 3.特征点主方向的确定 这一过程和SURF一样。若特征点的尺度参数为σi,则搜索半径设为6σi。在这个圆形领域内做一个60度的扇形区域,统计这个扇形区域内的haar小波特征总和,然后转动扇形区域,再统计小波特征总和。小波特征总和最大的方向为主方向。

在这里插入图片描述
在这里插入图片描述

4.特征描述子的生成 对于尺度参数为σi的特征点,在梯度图像上以特征点为中心取一个24σi×24σi的窗口,并将窗口划分为4×4个子区域,每个子区域大小为9σi×9σi,相邻的子区域有宽度为2σi的交叠带(此处我认为应该是相邻的子区域有宽度为4σi的交叠带,不然24σi不够划分为4×4个子区域)。每个子区域都用一个高斯核(σ1 =2.5σi)进行加权,然后计算出长度为4的子区域描述向量:

在这里插入图片描述
在这里插入图片描述

再通过另一个大小为4×4的高斯窗口(σ2 =1.5σi)对每个子区域的向量dv进行加权,最后进行归一化处理。这样就得到了4×4×4=64维的描述向量。 到此KAZE特征检测算法的原理算是讲完了,下面说一下KAZE特征的优缺点。 优点: (1)在图像模糊、噪声干扰和压缩重构等造成的信息丢失的情况下,KAZE特征的鲁棒性明显优于其它特征。 (2)相比于线性尺度空间,非线性尺度空间不会造成边界模糊和细节丢失,而且更稳定。 缺点: (1)KAZE算法在尺度不变性上是逊于SIFT的。 (2)KAZE特征的匹配对参数的设置比较敏感。 (3)KAZE特征的检测时间高于SURF,但与SIFT相近。

但KAZE特征是如何保证尺度不变性的?首先尺度不变性是指,不论原图怎么缩放,都能够找到相同的特征点。我个人看法是,在图像配准过程中,虽然浮动图像和参考图像可能在尺度上存在一定的缩放,但他们在非线性尺度空间中,肯定存在两幅图像在尺度上是相同的(由非线性尺度空间的构建可知),那么在这两幅相同尺度的图像中进行特征点的检测,生成的描述子应该是相同的,进而保证了尺度不变性。 但这只是我的个人见解,本人太菜,也不知道正确与否,哪里有不对的地方,欢迎留言讨论,相互学习!

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/148463.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档