基于特征的图像匹配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特征的图像匹配方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/weixin_30446393/article/details/117240624
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/843504

相关文章

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

CSS去除a标签的下划线的几种方法

《CSS去除a标签的下划线的几种方法》本文给大家分享在CSS中,去除a标签(超链接)的下划线的几种方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧... 在 css 中,去除a标签(超链接)的下划线主要有以下几种方法:使用text-decoration属性通用选择器设置:使用a标签选择器,将tex

C++变换迭代器使用方法小结

《C++变换迭代器使用方法小结》本文主要介绍了C++变换迭代器使用方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、源码2、代码解析代码解析:transform_iterator1. transform_iterat

C++中std::distance使用方法示例

《C++中std::distance使用方法示例》std::distance是C++标准库中的一个函数,用于计算两个迭代器之间的距离,本文主要介绍了C++中std::distance使用方法示例,具... 目录语法使用方式解释示例输出:其他说明:总结std::distance&n编程bsp;是 C++ 标准

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一