大唯机电安装工程(苏州)有限公司 张 博
随着计算机技术的发展,图像处理在许多行业得到了广泛的应用,图像拼接技术可以方便快速的获得宽视域的图像。本文基于OpenCV计算机视觉库和SIFT图像匹配算法,采用C++开发语言,实现了图像的快速拼接。实验结果表明:采用SIFT算法进行图像拼接,通过加权融合消除了拼接的裂缝现象,达到了预期的拼接效果。
图像拼接技术在图像处理领域占有重要的地位,它在无人机影像处理、医学图像处理以及安防监控有着广泛的应用,具有良好的研究前景。图像拼接的任务是将一幅或者多幅具有部分相同特征点的图像组合在一起,形成一幅新的图像。所形成的新的图像具有更宽的视域,具有一定的研究价值。
尺度不变特征变换(Scale Invariant Feature Transform,SIFT)利用128维的特征向量来表示图像中检测到的特征点。因此,经过SIFT算法,图像被表示为128维的特征向量集。这个特征向量集既能够使图像经过旋转、缩放以及平移仍然保持不变,又能够在光照和投影变换下具有较高的鲁棒性。其实质是在图像的不同尺度空间中寻找关键点,并得到关键点的方向。其步骤可以大致分为以下五步。
(1)建立高斯差分金字塔,对不同分组中的图像采用降采样,使用不同尺度的高斯核对原始图像在不同图像层上进行卷积,进而生成高斯金字塔。然后在高斯金字塔中将相邻的两幅图像相减生成高斯差分金字塔(DOG)。
(2)关键点的初步确定,关键点是由DOG空间中的局部极大、极小值点组成,通过在高斯金字塔中某一层图像的领域中比较同组的相邻两幅图像完成关键点的初始定位。
(3)为了准确确定关键点的位置和尺度,采用三维二次函数在检测到的初步极值点附近对三个变量进行二阶泰勒展开,以获得精确点。
(4)为关键点赋予主方向,为了使特征描述子具备旋转不变性,需要利用图像的局部特征为每个关键点给定一个参考方向。通过采用对图像求取梯度的方式来计算出图像的局部稳定方向。计算在DOG空间中所确定的关键点对应在高斯金字塔中3σ邻域窗口中像素的梯度和方向分布。
(5)在对于在高斯差分金字塔中检测到的关键点,计算高斯金字塔图像构建关键点描述符,通过以上步骤,我们找到了一张图片中的关键点,拥有三个信息:位置x,y、尺度以及主方向。为了将两张图片中的同一关键点匹配起来,需要构建一个描述符,这个描述符就是一个128维的向量。
SIFT缺点:
(1)速度慢,实时性不高。
(2)对模糊图像和平滑边缘图像无效。
SIFT算法的优点有:
(1)SIFT算法找到的图像特征是局部的,对于旋转、缩小放大和对比度变化具有较高的适应性,对拍摄角度的改变、错切变换以及附加噪声也有较好的效果。
(2)精确性性好,特征点丰富,达到精确匹配。
(3)多量性,即使是少数目标也能产生丰富的特征向量。
SIFT算法是古老而经典的算法,时至今日,其研究价值还有很大。其应用场景有很多,以下列举几种SIFT算法应用典型场合:
物体识别
机器人定位与导航
图像拼接
三维建模
手势识别
视频跟踪
笔记鉴定
指纹与人脸识别
图像拼接广泛应用于实际场景中,如无人机影像处理、遥感图像等。非常贴近于我们日常生活的一个例子就是,当你用你的手机对某一场景拍照,但你不可能一次拍下所有你想拍的东西,所以你要从左到右拍几张照片来记录所有你想拍的东西。这时,我们利用图像拼接技术将图片拼接成一幅宽视域的图片。
利用SIFT算法实现图像拼接是一种非常常用的方法,采用SIFT进行图像拼接可以达到较高的精确度和稳定性。下面详细描述拼接的主要步骤。
特征点提取和匹配:
对于不同的图像,由于图像的元素都不同,每幅图像都有自己独特的特征。因此找出图像的特征点是图像拼接的首要任务。
图像拼接中有很多特征检测算法可以使用,如sift、surf、Harris角点和ORB等。本文将利用SIFT算法来进行图像拼接,采用SIFT进行图像拼接虽然速度比较慢,但是可以找到精确的特征点,可以达到较高的精确度和稳定性。如图1、图2所示。
图1 拼接左图
图2 拼接右图
首先我们使用SIFT算法进行特征点的提取和描述,如图3所示。
图3 特征点检测匹配
在不同的条件下,如光照、对比度、拍摄角度等,用同一相机或不同相机拍摄某一地点,所得到的图像,其角度、尺度、变形等大都不同。为了顺利完成图像拼接,需要对两幅图像进行配准,尽可能的缩小要拼接图像的差异,如图4所示。
图4 图像配准
接下来进行图像拷贝,拷贝即将要匹配的左边图片直接拷贝在已经获得的匹配标准图中,结果如图5所示。
图5 图像拷贝
可以看出拼接好的图像存在明显的裂缝,原因是所用的拼接图像是在不同的时间拍摄,光照存在着明显的差异。这里我们采用前面所述的加权融合进行处理,结果如图6所示。
图6 图像融合
可以看到,经过融合处理的图像看不到拼接的痕迹,两图过渡自然,达到了预期的拼接效果。
基于OpenCV利用传统的经典SIFT算法完成特征检测,进而进行图像配准、融合。实验结果表明:采用SIFT算法进行图像拼接,通过加权融合消除了拼接的裂缝现象,达到了预期的拼接效果。