基于特征的图像匹配c语言,一种基于SIFT和SUSAN特征的图像匹配方法

2024-03-25 01:59

本文主要是介绍基于特征的图像匹配c语言,一种基于SIFT和SUSAN特征的图像匹配方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘   要: 针对SIFT方法在角点检测上的不足,提出了一种基于SIFT和SUSAN混合特征匹配的自动匹配算法。算法应用SIFT 和SUSAN 两种具有互补特性的局部不变特征,利用SIFT方法检测空间极值特征点,利用SUSAN方法检测角点,结合两种特征点位置,利用SIFT方法生成匹配特征向量,最后根据最近邻特征点距离与次近邻特征点距离之比确定初始匹配点对,实现图像的配准。实验表明该算法有效,能够提高图像的自动匹配准确性。

关键词: 图像匹配; SIFT特征; SUSAN角点

图像匹配是图像处理的一个基本问题,在计算机视觉、图像配准、信息检索等领域得到了广泛的应用,是很多基于图像内容应用的基础。随着计算机技术的发展和数字图像应用的日益广泛,图像匹配技术在诸多领域内发挥越来越重要的作用。长期以来, 国内外很多学者都致力于解决图像匹配的技术问题。

简单来说,图像匹配就是找出两幅图像中相同或相似景物,目前图像匹配的方法一般分为基于区域匹配和基于特征匹配两类。

近年来,在计算机视觉领域,基于局部不变量描述符的方法在目标识别和图像匹配方面取得了显著发展。SIFT特征描述符克服了传统图像匹配在图像尺度、视差变化的局限性。参考文献[1]对10种最具代表性的特征匹配描述算子进行了实验和性能比较,结果表明, SIFT特征描述符在对光照变化、图像旋转、比例缩放、几何变形、模糊和图像压缩等6种情况下性能最好。

本文在SIFT方法的基础上加入SUSAN角点检测的思想,提出一种新的更加稳健的图像匹配方法。

1 SIFT特征检测

2004年, LOWE D提出了一种新的点特征匹配算法——SIFT(Scale Invariant Feature Transform)算法,较好地解决了场景部分遮挡、旋转缩放、视点变化引起的图像变形等问题,并且有效应用于目标识别、图像复原、图像拼接等领域。

SIFT算法首先在尺度空间进行特征点检测,并确定关键点的位置和所处的尺度,然后使用关键点邻域梯度的主方向作为该点的方向特征,以实现算子对尺度和方向的无关性。

1.1 尺度空间理论

尺度空间理论是一种对图像从多尺度考察图像特征的理论方法,能够发掘出很多从单一尺度无法发现的图像特征。

SIFT方法选用了高斯函数,利用其标准差σ作为尺度参数与图像进行卷积运算以产生多尺度的图像。一幅二维图像的尺度空间定义为:

515540fd5878798df33da55a762da373.gif

1.5 特征描述子

首先以特征点为中心取8×8的邻域作为采样窗口,窗口内每个方格代表特征点尺度空间的一个像素,箭头方向代表该像素的梯度相对于特征点方向的相对方向,箭头长度代表梯度的模,大圆圈代表加权的范围。然后利用直方图统计的方法,在每 4×4 的小块上计算 8 个方向的梯度方向直方图,即可形成 4 个种子点,如图1所示。

每个种子点可以产生8个方向信息,共4×8=32个方向信息,按顺序就可以组成32维的特征向量。本文采用16×16的采样窗口,一共产生16个种子点,产生16×8=128维的特征向量,更多的种子点可以增加匹配的稳定性。

2 SUSAN角点检测

1997年 SMITH S M和 BRADY J M提出了一种最小核值相似区SUSAN(Smallest Univalue Segment Assimilating Nucleus)算法,它直接对图像灰度值进行操作,方法简单,算法效率高,定位准确,对多个区域的角点也能精确检测,对局部噪声不敏感,抗噪能力强。

2.1 SUSAN方法简介

SUSAN方法其实是利用圆形模板遍历整个图像,如果模板内其他像素值与模板中心像素值相差小于一定阈值,就认为该点与中心点具有近似的灰度值,模板内满足这样条件的像素组成的区域称为核值相似区USAN(Univalue Segment Assimilating Nucleus)。利用这个区域可以将像素点的性质分成几类考虑,而属于直角角点的大概就是具有1/4模板大小的USAN区的像素点,如图2所示。

10c51b3dca0bdccf6aa012c272b1537f.gif

2.2  USAN区域

USAN区域利用中心点与周围像素的差值和预先设定的阈值进行比较得出,其相似比较函数表示为:

4bd23cc0d31d3df1011a1aaa1dbf9d28.gif

2.3 角点检测

SUSAN方法通过设定角点阈值,利用角点响应函数判断角点位置,计算公式如下:

01c63be861cf0f1034ba503e0320afbf.gif

其中g为角点阈值,它影响检测到的角点形状,g越小,检测到的角点越尖锐,一般设定为1/2模板区域大小。

SUSAN角点检测的最后一个阶段,就是寻找初始角点响应的局部最大值,在局部范围内,如果中心像素的初始响应是此区域内的最大值,则判断其属于角点。

3 基于SIFT和SUSAN特征检测

SIFT方法能够从尺度空间寻找出具有结构化特性的特征点,但是可能在视觉上没有特殊意义,而实际图像中很多具有视觉意义的特征位置,如角点利用SIFT方法检测会出现位置偏移或者漏检的情况,如图3所示。]

284563d30a44c9a4ad708bee43604fb4.gif

从图3可以看出,最右角出现漏检,其他角的特征点均发生一定程度的位置偏移,这是由于高斯平滑的过程中极值点会随着像素扩散引起的。但是图像上的角点往往是进行图像匹配比较理想的特征,SIFT方法并没有很好地将角点利用起来,遗漏了某些重要的角点信息。

本文在SIFT的基础上引入SUSAN角点检测就是为了增强其对图像特性信息的利用率,从而应用于图像匹配上得到更多有意义的正确匹配点,因为SUSAN能够有效检测出图像中的角点,如图4所示。

a6babf588ac718a273774d382c6a251e.gif

由图4可以看出,SUSAN方法能够准确定位并检测到4个角点。SUSAN角点检测的优点在于可以简单快捷地检测出图像的明显形状特征,但是针对纹理图像或者低对比度图像,效果并不明显。

通过以上分析, 本文在SIFT方法的基础上引入SUSAN角点检测思想,基本能够将图像中的结构化信息特征和形状信息的特征检测出来。算法的流程图如图5所示。

c7aca89e36a1edc924480978d0211477.gif

4 特征匹配

已经找出图像上的特征向量,接下来的任务就是特征匹配,即对特征向量作相似性度量判断其相似程度。本文采用两个向量的欧氏距离作为相似性的判断度量,欧氏距离定义如下:

6b87d788118a04e90a2d0459ea24fa72.gif

取图像1中的某个关键点,并找出其与图像2中欧式距离最近的前两个关键点,在这两个关键点中,如果最近的距离除以次近的距离小于某个比例阈值,则接受这一对匹配点。如果降低这个比例阈值,匹配点数目会减少,但更加稳定。最后再设定一个匹配点数目阈值,如果匹配点数目大于阈值,就认为两幅图像是相似的。

5 实验结论

在Core 2, 2.2 GHz CPU, 2.0 GB RAM的PC机上运行Solaris 10操作系统,采用C 语言编程实现了本文提出的算法,通过实验图片验证本文方法的有效性(限于篇幅,下文仅给出一组实验结果),并将本文算法与SIFT算法进行了实验分析和比较。实验中,最近邻特征点距离与次近邻特征点距离之比取0.7。

图6利用SIFT方法,左图和右图分别生成了356个和369个特征点,最终产生12对匹配对,其中两个错误匹配对;图7利用SUSAN方法,左图和右图分别生成了315个和358个特征点,最终产生25对匹配点,其中两个错误匹配对;图8结合两种方法,左图和右图分别生成了671个和727个特征点,最终产生33对匹配对,其中一个错误匹配对。

f9a7cd7f7d9003e4b4c9f7843b6ae666.gif

3a767230770d801af7368d5d1af72561.gif

SUSAN方法在更少的特征点中可以找出更多匹配点对,而且错误匹配率没有增加,由此可见,角点信息在特征匹配上非常有效。本文方法利用两种特征,得到更多的特征匹配对,并且降低了错误匹配率。

参考文献

[1] M IKOLAJCZYK K, SCHM ID C. A performance evaluation of local descriptors[J]. IEEE Transactions on Pattern  Analysis & Machine Intelligence, 2005,27(10):1615-1630.

[2] BROWN M, LOWE D. Invariant features from interest point groups[C].In Proceedings of the 13th British Machine Vision Conference. Cardiff: [s. n.], 2002:253-262.

[3] LOWE D. Object recognition from local scale-invariant features[C].In Proceedings of the International Conference on Computer. Corfu ,Greece:[s.n.],1999:1150-1157.

[4] SMITH S M, BRADY J M. SUSAN——a new approach to low level image processing[J]. Computer Vision,1997,23(10):45-78.

这篇关于基于特征的图像匹配c语言,一种基于SIFT和SUSAN特征的图像匹配方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/843504

相关文章

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP