基于改进SIFT算法的图像特征点匹配

Image Feature Point Matching Based on Improved SIFT Algorithm

针对图像多尺度、噪声、光强、旋转等问题,导致图像匹配不理想、特征点匹配时间过长等问题,提出了一种改进的SIFT算法(SIFT-BRISK)。特征点以DOG金字塔的形式收集。通过多尺度比较DOG金字塔上下层的像素点,我们找到极值点作为我们的特征点。在构建特征点描述符时,我们放弃了传统的基础。然后使用BRISK算法以均匀采样的方式构造不同半径的同心圆作为样本点生成二进制描述符,这种方式和传统的SIFT描述符生成相比速度更快,由于过滤级别不同,样本点更加独特。在图像匹配部分,对传统的暴力匹配进行了匹配和创新。从寻找不同图片之间的最短汉明距离,使用组匹配的方法找到与最近的一组匹配描述符的汉明距离。最短汉明距离的描述子对大大减少了二进制描述符之间的匹配时间,提高了效率。

SIFT-BRISK算法

SIFT算法通过高斯差分金字塔搜索特征点,再在特征点周围生成种子点,得到128维向量描述子。具有旋转、尺度、亮度不变性,但复杂度太高。

BRISK算法先通过FAST角点法找到特征点,速度有提升,特征点描述符是通过构造均匀分布的同心圆采样点生成的,具有很高的独特且适用于大型模糊图像配准。

作者结合了SIFT特征点提取和BRISK描述子的优势,特征匹配算法流程图如下:

SIFT-BRISK特征点匹配过程

特征提取

首先是构造图像金字塔,SIFT-BRISK算法保留了SIFT构造高斯金字塔的方式:
\begin{equation*}{\text{L}}\left( {{\text{x}},{\text{y}},\sigma } \right) = {\text{G}}\left( {{\text{x}},{\text{y}},\sigma } \right) * {\text{I}}\left( {{\text{x}},{\text{y}} } \right)\tag{1}\end{equation*}
其中{\text{G}}\left( {{\text{x}},{\text{y}},\sigma } \right)为高斯核函数,为
\begin{equation*}{\text{G}}\left( {{\text{x}},{\text{y}},\sigma } \right) = \frac{1}{{2\pi {\sigma ^2}}}{{\text{e}}^{\frac{{{{\text{x}}^2} + {{\text{y}}^2}}}{{2 {\sigma ^2}}}}}\tag{2}\end{equation*}
在SIFT中利用高斯差分金字塔(DoG)来检测极值点:
\begin{equation*}\begin{array}{c} {\text{D}}\left( {{\text{x}},{\text{y}},\sigma } \right) = \left[ {{\text{G}}\left( {{\text{x}},{\text{y}},{\text{k}}\sigma } \right) - {\text{G}}\left( {{\text{x}},{\text{y}},\sigma } \right)} \right] * {\text{I}}\left( {{\text{x}},{\text{y}}} \right) \\ = {\text{L}}\left( {{\text{x}},{\text{y}},{\text{k}}\sigma } \right) - {\text{L}}\left( {{\text{x}},{\text{y}},\sigma } \right) \end{array} \tag{3}\end{equation*}

高斯金字塔示意图

高斯金字塔的级数为
\begin{equation*}{\text{o}} = \left[ {{{\log }_2}^{\min \left( {{\text{m}},{\text{n}}} \right)}} \right] - {\text{a}}\tag{4}\end{equation*}
o级,第s层的尺度为
\begin{equation*}\sigma \left( {{\text{o}}, {\text{s}}} \right) = {\sigma _0} \cdot {2^{\frac{{{\text{o}} + {\text{s}}}}{{\text{K}}}}}\tag{5}\end{equation*}

\begin{equation*}\begin{array}{c} {\sigma _{{\text{s}} + 1}} = {2^{\frac{1}{{\text{K}}}}} \cdot {\sigma _{\text{s}}} \\ {\sigma _{{\text{o}} + 1}} = 2{\sigma _{\text{o}}} \end{array} \tag{6}\end{equation*}

其中K表示总的层数。

当像素值大于(或小于)其同尺度邻域且大于(或小于)相邻尺度邻域时,认为该点为极值点。

高斯滤波

如下图所示,采用均匀采样模式,以特征点为中心构造一个切线同心圆,在每个环上获取一定数量的等距采样点,所有采样点共包含60个点。

SIFT-BRISK采样模式

特征描述

为确保旋转不变性,将图像旋转\theta角(特征点的主方向),该像素的近邻点的像素可以表示为:
\begin{equation*}\left[ {\begin{array}{c} {{\text{x'}}} \\ {{\text{y'}}} \end{array}} \right] = \left[ {\begin{array}{cc} {{\text{cos}}\theta }&{ - \sin \theta } \\ {\sin \theta }&{\cos \theta } \end{array}} \right]\left[ {\begin{array}{c} {\text{x}} \\ {\text{y}} \end{array}} \right]\tag{7}\end{equation*}
旋转后,可以获得新的采样点区域,继续采用上述方法进行采样。

最终我们可以获得\frac{N(N-1)}{2}个采样点匹配对。
\begin{equation*} \begin{array}{c} {\text{b}} = \begin{cases} {1,}&{{\text{I}}\left( {{\text{p}}_{\text{j}}^\sigma ,{\sigma _{\text{j}}}} \right) > {\text{I}}\left( {{\text{p}}_{\text{i}}^\sigma ,{\sigma _{\text{i}}}} \right)} \\ {0,}&{{\text{otherwise}}} \end{cases} \\ \forall \left( {{\text{p}}_{\text{i}}^\sigma ,{\text{p}}_{\text{j}}^\sigma } \right) \in {\text{S}} \end{array} \tag{8}\end{equation*}
其中{\text{I}}\left( {{\text{p}}_{\text{j}}^\sigma ,{\sigma _{\text{j}}}} \right)表示旋转后的新采样点。

匹配算法改进

作者改进了传统的暴力匹配算法,采用分组匹配算法,大大减少了图像匹配所需的汉明距离计算量。

特征点描述子示例

若矩阵为200\times512,以4列为一组,将每幅图像的描述组分为128组,先用128维的向量进行比较,再计算汉明距离。

场景测试

不同特征提取算法性能对比
不同特征提取算法性能对比
不同尺度匹配结果
不同尺度性能对比
图片旋转性能对比
图片旋转性能对比

结论

本文针对SIFT算法特征点描述子生成速度快、BRISK算法特征点尺度不变性和旋转不变性以及图像匹配算法复杂度高等缺点,对SIFT和BRISK算法进行了改进。结合SIFT算法,检测到的特征点具有尺度不变性强的优点和BRISK算法描述符生成的优点。提出了SIFT-BRISK特征提取算法。改进算法解决了SIFT算法的特点。描述子生成时间过长,BRISK算法特征点不理想。经过实验分析,本文提出的SIFT-BRISK算法在尺度和旋转变化的情况下与SIFT和BRISK算法相比具有明显的优势。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容