民工心事 发表于 2025-3-27 06:41:01

基于 C语言 surf 特征点的低重叠度图像拼接

基于 surf 特征点的低重叠度图像拼接

一、 题目阐明

针对于重叠度低的图像研究基于图像特征匹配的图像拼接,实现多组图像对的拼接。
二、 题目分析

图像拼接是指将通过相机获取的具有一定重叠区域的两幅或多幅图像拼接成一张宽视角、高分辨率的全景图像。
本文的课题背景是横向分布的左右红外相机的实时拼接,对拼接的实时性提出了更高的要求。现阶段应用广泛的基于特征点图像拼接算法有基于 SIFT(Scale Invariant Feature Transform)特征、SURF(Speeded Up Robust Features)特征。传统的 SIFT 算法可以或许提取更多的特征点,匹配精度高,但是特征提取和匹配是运算复杂,时间空间复杂度高。经测试,SURF 特征检测虽然速率快但对于课题的低重叠度图像并不适用,综上所述,本文拟采用基于 SIFT 特征检测算法的进行图像拼接。虽然课题背景是左右相机的图像拼接,但在现实测试中涉及的是一组离线的静态图片,全部的算法计划门路均是依据静态图像拼接。对于具有固定布局的左右相机图像的拼接,只需要在首帧计算一次变换矩阵即可,大大缩短图像拼接时间,整个过程与静态图像拼接类似。
三、 算法阐明

3.1 图像拼接流程

图像拼接过程由图像特征点提取、特征点匹配、图像配准、图像融合这四部分组成。图像配准和图像融合算法是比较成熟的技术,图像拼接算法特点重点会集特征点提取以及特征点匹配。

https://i-blog.csdnimg.cn/img_convert/2cb6c231f23f4279bca96339b1fda5d1.png
图 2-1 图像拼接流程
若图像成像质量较差大概两张图片有过大的旋转倾斜,前期另有图像预处置惩罚阶段,主要是对输入图像进行去噪、平滑和旋转变换处置惩罚,以包管后续拼接的可靠性。特征点提取是图像拼接的核心条件,后续的图像配准利用的单应性矩阵(Homography Matrix)是依据重叠区域匹配后的特征点计算得到的,能否进行准确匹配取决于特征点提取精度。特征点匹配,是将左右图像提取的重叠区域的特征点进行一一匹配。图像配准是根据创建的数学模型,即二维图像的刚体变换—旋转和平移,将待拼接的图像转换到被匹配图像的坐标系中,一次构建完备的拼接图像。图像配准时,经常遇到坐标值非整数的情况,图像坐标插值理论应用到图像拼接算法中。图像融合是为了消除左右图像亮度变革在拼接处产生的拼接陈迹,一般在拼接处进行平滑处置惩罚。
3.2 特征点检测与匹配

计算机视觉中,引入尺度稳定的特征,主要的思想是每个检测到的特征点都陪同着对应的尺寸因子。当匹配差别图像时,经常会遇到图像尺度差别的题目,差别图像中特征点的间隔变得差别,物体变成差别的尺寸,若修正特征点的巨细,就会造成强度不匹配。

https://i-blog.csdnimg.cn/img_convert/4e6ecc5c8e20e3ae9ef993f2aa9e60df.png
图 2-2 特征检测流程
SIFT 算法流程如图 2-2,利用图像金字塔生成尺度空间确定候选点,然后进行非极大值克制,筛选出真正的特征点,降低运算复杂度,同时精确定位特征点坐标,选取特征点的主方向,末了利用特征点方向构造特征点的形貌子。以下分部分先容 SIFT 算法流程。
3.2.1 尺度空间生成及极值检测

在一定的范围内,无论物体是大还是小,人眼都可以分辨出来。然而计算秘密有相同的本领却不是那么的轻易,在未知的场景中,计算机视觉并不能提供物体的尺度巨细,此中的一种方法是把物体差别尺度下的图像都提供给呆板,让呆板可以或许对物体在差别的尺度下有一个统一的认知。在创建统一认知的过程中,要思量的就是在图像在差别的尺度下都存在的特征点。
1. 高斯金字塔
在早期图像的多尺度通常利用图像金字塔表现形式。图像金字塔是同一图像在差别的分辨率下得到的一组结果,其生成过程一般包罗两个步调:

[*]对原始图像进行平滑
[*]后的图像进行降采样(通常是水平、垂直方向的 1/2)降采样后得到一系列不停尺寸缩小的图像。显然,一个传统的金字塔中,每一层的图像是其上一层图像长、高的各一半。多分辨率的图像金字塔虽然生成简单,但其本质是降采样,图像的局部特征则难以保持,也就是无法保持特征的尺度稳定性。
我们还可以通过图像的模糊水平来模拟人在间隔物体由远到近时物体在视网膜上成像过程,间隔物体越近其尺寸越大图像也越模糊,这就是高斯尺度空间,利用差别的参数模糊图像(分辨率稳定),是尺度空间的另一种体现形式。
一副图像其高斯尺度空间可由其和差别的高斯卷积得到:

https://i-blog.csdnimg.cn/img_convert/cded83da88ded3233a88cdca6b3030b9.png
此中,G(x,y,σ)是高斯核函数
https://i-blog.csdnimg.cn/img_convert/b82b8287d4894c56d39b8f8ac0417559.png
, σ 称为尺度空间因子,它是高斯正态分布的标准差,反映了图像被模糊的水平,其值越大图像越模糊,对应的尺度也就越大。L(x,y,σ)代表着图像的高斯尺度空间。
构建尺度空间的目标是为了检测出在差别的尺度下都存在的特征点,而检测特征点较好的算子是
https://i-blog.csdnimg.cn/img_convert/1d193e7151dc32153e86631c35087696.png
(高斯拉普拉斯,LoG):

https://i-blog.csdnimg.cn/img_convert/bd43f6590eb2fe58ca5a2ec3523a24b4.png
利用 LoG 虽然能较好的检测到图像中的特征点,但是其运算量过大,通常可利用 DoG(差分高斯,Difference of Gaussina)来近似计算 LoG。
设 k 为相邻两个高斯尺度空间的比例因子,则 DoG 的定义:

https://i-blog.csdnimg.cn/img_convert/6db832e1e4bcb325d943d1af18081687.png
此中,L(x,y,σ)是图像的高斯尺度空间。
从上式可以知道,将相邻的两个高斯空间的图像相减就得到了 DoG 的相应图像。为了得到 DoG 图像,先要构建高斯尺度空间,而高斯的尺度空间可以在图像金字塔降采样的基础上加上高斯滤波得到,也就是对图像金字塔的每层图像利用差别的参数 σ 进行高斯模糊,使每层金字塔有多张高斯模糊过的图像。降采样时,金字塔上边一组图像的第一张是由其下面一组图像倒数第三张降采样得到。
2. DoG 空间极值检测及定位
为了寻找尺度空间的极值点,每个像素点要和其图像域(同一尺度空间)和尺度域(相邻的尺度空间)的全部相邻点进行比较,当其大于(大概小于)全部相邻点时,该点就是极值点。如图所示,中间的检测点要和其地点图像的 3×3 邻域 8 个像素点,以及其相邻的上下两层的 3×3 范畴 18 个像素点,共 26 个像素点进行比较。
从上面的形貌中可以知道,每组图像的第一层和末了一层是无法进行比较取得极值的。为了满足尺度变换的一连性,在每一组图像的顶层继续利用高斯模糊生成 3 幅图像,高斯金字塔每组有 S+3 层图像,DoG 金字塔的每组有 S+2 组图像。

https://i-blog.csdnimg.cn/img_convert/ce0d69f842f3b18a602cc23105e895f2.png
图 2-2 极值检测
3. 非极大值克制
通过比较检测得到的 DoG 的局部极值点实在离散的空间搜索得到的,由于离散空间是对一连空间采样得到的结果,因此在离散空间找到的极值点不一定是真正意义上的极值点,因此要想法将不满足条件的点剔除掉。可以通过尺度空间 DoG 函数进行曲线拟合寻找极值点,这一步的本质是去掉 DoG 局部曲率非常不对称的点。
要剔除掉的不符合要求的点主要有两种:低对比度的特征点;稳定的边沿相应点。
3.2.2 特征点主方向定位

为了实现图像旋转稳定性,需要给特征点的方向进行赋值。利用特征点邻域像素的梯度分布特性来确定其方向参数,再利用图像的梯度直方图求取关键点局部布局的稳定方向。
找到了特征点,也就可以得到该特征点的尺度 σ,也就可以得到特征点地点的尺度图像
https://i-blog.csdnimg.cn/img_convert/76c09aae5e6c07f6c7581a9c74b07ece.png
计算以特征点为中心、以 3×1.5σ 为半径的区域图像的幅角和幅值,每个点 L(x,y)的梯度的模 m(x,y)以及方向 θ(x,y)可通过下面公式求得

https://i-blog.csdnimg.cn/img_convert/b5ed1c0e8bbaaf371471c6ac47e4f869.png

https://i-blog.csdnimg.cn/img_convert/c07f6fe04e564f26689a2656e1d3a6a5.png
计算得到梯度方向后,就要利用直方图统计特征点邻域内像素对应的梯度方向和幅值。梯度方向的直方图的横轴是梯度方向的角度(梯度方向的范围是 0 到 360 度,直方图每 36 度一个柱共 10 个柱,大概没 45 度一个柱共 8 个柱),纵轴是梯度方向对应梯度幅值的累加,在直方图的峰值就是特征点的主方向。Lowe 在论文中指出 15% 的关键点具有多方向,而且这些点对匹配的稳定性很关键。得到特征点的主方向后,对于每个特征点可以得到三个信息(x,y,σ,θ),即位置、尺度和方向。由此可以确定一个 SIFT 特征区域,一个 SIFT 特征区域由三个值表现,中心表现特征点位置,半径表现关键点的尺度,箭头表现主方向。具有多个方向的关键点可以被复制成多份,然后将方向值分别赋给复制后的特征点,一个特征点就产生了多个坐标、尺度相称,但是方向差别的特征点。
3.2.3 生成形貌子

通过以上的步调已经找到了 SIFT 特征点位置、尺度和方向信息,下面就需要利用一组向量来形貌关键点也就是生成特征点形貌子,这个形貌符不但包含特征点,也含有特征点四周对其有贡献的像素点。形貌子应具有较高的独立性,以包管匹配率。
特征形貌符的生成大抵有三个步调:
校正旋转主方向,确保旋转稳定性。
生成形貌子,最终形成一个 128 维的特征向量
归一化处置惩罚,将特征向量长度进行归一化处置惩罚,进一步去除光照的影响。

https://i-blog.csdnimg.cn/img_convert/fc6714d052960e4bc43fdc1896d5e02d.png
旋转后以主方向为中心取 8×8 的窗口。下图所示,左图的中央为当前关键点的位置,每个小格代表为关键点邻域地点尺度空间的一个像素,求取每个像素的梯度幅值与梯度方向,箭头方向代表该像素的梯度方向,长度代表梯度幅值,然后利用高斯窗口对其进行加权运算。末了在每个 4×4 的小块上绘制 8 个方向的梯度直方图,计算每个梯度方向的累加值,即可形成一个种子点,如右图所示。每个特征点由 4 个种子点组成,每个种子点有 8 个方向的向量信息。
图 2-3 种子点生成形貌子
对每个关键点利用 4×4 共 16 个种子点来形貌,这样一个关键点就可以产生 128 维的 SIFT 特征向量。

https://i-blog.csdnimg.cn/img_convert/0b4a6d3a6567bc5de965f9aa4e489977.png
图 2-4 128 维特征点形貌子
2.2.6 特征点匹配

与 Sift 特征点匹配类似,Surf 也是通过计算两个特征点间的欧式间隔来确定匹配度,欧氏间隔越短,代表两个特征点的匹配度越好。差别的是 Surf 还参加了 Hessian 矩阵迹的判断,如果两个特征点的矩阵迹正负号相同,代表这两个特征具有相同方向上的对比度变革,如果差别,阐明这两个特征点的对比度变革方向是相反的,纵然欧氏间隔为 0,直接予以清除。
2.3 图像配准

两幅平面图像之间的转换关系右一个单应性矩阵(Homography Matrix)H 决定,单应性矩阵 H 形式如下:

https://i-blog.csdnimg.cn/img_convert/602077429bd7d7333bd4d76ec3c0dbb3.png
假设左右图像上对应匹配后的齐次坐标为
https://i-blog.csdnimg.cn/img_convert/90c1ccfa539bcf783f7fc8ebb22d9f01.png

https://i-blog.csdnimg.cn/img_convert/a9d2cc8201a90a9675a8413dd91e42b6.png
,则有:

https://i-blog.csdnimg.cn/img_convert/8cc0f189cfe11266dce0cac7464d4642.png
矩阵睁开后有等式:

https://i-blog.csdnimg.cn/img_convert/57299fd924924f8b6a7031ddf9d10803.png

https://i-blog.csdnimg.cn/img_convert/c27582ae03f03b825692509980c40cc6.png
由于是齐次坐标系,也就是说可以进行任意尺度的缩放,单应矩阵 H 只有 8 个自由度,求解 H 至少需要四对点,通常会用多于四对点计算 H 矩阵。
得到 H 矩阵后,就能利用 H 矩阵利用将右图像的点转换到左图像坐标系下,完成配准。
2.4 图像融合

两图直接拼接并不自然,原因就在于拼接图的交界处,两图由于光照色泽的原因使得两图交界处的过渡很糟糕,所以需要特定的处置惩罚解决这种不自然。这里的处置惩罚思路是加权融合,在重叠部分由前一幅图像逐步过渡到第二幅图像,即将图像的重叠区域的像素值按一定的权值相加合成新的图像,本实验采用的是亮度调整后按间隔比例融合,这样融合比较自然。
四、 程序阐明

计算机视觉市场巨大而且一连增长,且这方面没有标准 API,OpenCV 致力于真实天下的实时应用,通过优化的 C 代码的编写对其执行速率带来了可观的提升,OpenCV 拥有大量比较成熟的视觉应用案例。本程序开发基于 Visual Studio2015,OpenCV3.4.0 和对应的 Contrib3.4.0。
4.1 程序总体流程


https://i-blog.csdnimg.cn/img_convert/b95b63eaa59637c77f6cc7b057a1c907.png
图 4-1 程序总体流程
如图所示,为程序的总体流程。首先根据图像路径载入待拼接的图像,同时查抄图像是是否载入正确。若正常载入进行特征点检测,若图像载入为空,则结束程序,查抄路径是否错误。找到图像上的特征点后,根据最邻近算法将左右图像的对应点匹配,然后判断匹配后的点对是否足够求解单应性矩阵(至少四个,一般需要更多)。若数据点足够多,那么利用点对求解单应性矩阵;若点数过少,则利用预先存储的单应性矩阵。求的单应性矩阵,以左图像坐标系为标准,将右图像按照单应性矩阵转换到左图像坐标下,完备直接拼接。末了在拼接处进行图像优化融合,使得拼接更加自然。
4.2 程序关键函数


[*]int ImageStitch::FindFeaturesPoints(void)

https://i-blog.csdnimg.cn/img_convert/c724e4477e596b3422ef59636eca5aa9.png
图 4-2 检测特征点函数
本函数利用的关键是 SURF 类函数 Ptr Detector = xfeatures2d::SIFT::create(2000);

[*]void ImageStitch::ImageRegistration(void)

https://i-blog.csdnimg.cn/img_convert/348c68e64113d323d09c9fd74f481a03.png
图 4-3 图像配准函数
本函数是核心函数,此中会调用关键函数 Mat findHomography( InputArray srcPoints, InputArray dstPoints, OutputArray mask, int method = 0, double ransacReprojThreshold = 3 )计算单应性矩阵,然后完成图像直接拼接;最调用图像融合优化函数 OptimizeSeam(void)使得拼接自然。

[*]void ImageStitch::OptimizeSeam(void)

https://i-blog.csdnimg.cn/img_convert/5c761968e7cb79c069c065fece6efda1.png
图 4-4 图像融合优化函数
图像融合优化函数,按间隔分配权重值。
4.3 运行结果

第一组图片:

https://i-blog.csdnimg.cn/img_convert/6421d51e465ecbf16fbeb5507e426af9.png
图 4-5 匹配后的特征点

https://i-blog.csdnimg.cn/img_convert/5b4a9ef9b42e1e30dda1b0d3b15ffc8b.png
图 4-6 最终拼接图
第一组图片由于检测的左右图像重叠区域的特征过少,无法求出单应性矩阵 H,利用后面计算的并存储的单应性矩阵拼接。
第二组图片:

https://i-blog.csdnimg.cn/img_convert/2a7ad702f268b60659bda08fda0f88f7.png
图 4-7 匹配后的特征点

https://i-blog.csdnimg.cn/img_convert/6471548874ee7d783a0de9ded4324e7e.png
图 4-8 最终拼接图
第三组图片:

https://i-blog.csdnimg.cn/img_convert/743468faf29c7de887c98a6ba4ad6b32.png
图 4-9 匹配后的特征点

https://i-blog.csdnimg.cn/img_convert/93ab1c348c15b8aa490c2d18709bd5fa.png
图 4-10 最终拼接图
第四组图片:

https://i-blog.csdnimg.cn/img_convert/296ebc312b1a149b9ff05e836407867e.png
图 4-11 匹配后的特征点

https://i-blog.csdnimg.cn/img_convert/318c0981c217183328202a5c10689d83.png
图 4-12 最终拼接图
除了第一组图片由于检测的左右图像重叠区域的特征过少,无法求出单应性矩阵 H,后面三张图片均能正常计算。由于课题背景是固定左右相机的图像拼接,所以采用后面计算得到的单应性矩阵做第一组的图像拼接是公道的,拼接效果也在接受范围内。
五、 附录

本程序开发基于 Visual Studio2015,OpenCV3.4.0 和对应的 Contrib3.4.0。可以直接运行压缩包里的 DEBUG 里的 exe 文件。
六、 结论阐明

在课题开始之前,本身专注于利用 surf 特征检测的快速,但末了发现对于特征点不明显的红外图像,surf 算法检测的特征点不够精确,计算的单应性矩阵在做图像拼接时偏差较大,改用 sift 精度明显提高。通过本课题,在尝试中提高本因素析题目和实践利用的本领。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 基于 C语言 surf 特征点的低重叠度图像拼接