MATLAB图像拼接
一、实验原理及实验结果
图像拼接就是将一系列针对同一场景的有重叠部分的图片拼接成整幅图像,使拼接后的图像最大程度地与原始场景接近,图像失真尽可能小。基于SIFT算法则能够对图像旋转、尺度缩放、亮度变化保持不变性,对视角变化,仿射变换,噪声也能保持一定程度的稳定性。本次实验运用SIFT匹配算法来提取图像的特征点,采用随机抽样一致性算法求解单应性矩阵并剔除错误的匹配对。最后用加权平均融合法将两帧图像进行拼接。具体过程为:首先选取具有重叠区域的两帧图像分别作为参考图像和待拼接图像,然后使用特征提取算法提取特征点,并计算特征点描述子,根据描述子的相似程度确定互相匹配的特征点对。再根据特征点对计算出待拼接图像相对于参考图像的单应性矩阵,并运用该矩阵对待拼接图像进行变换,最后将两帧图像进行融合,得到拼接后的图像。
1.特征点检测与匹配
特征点检测与匹配中的尺度空间理论的主要思想就是利用高斯核对原始图像进行尺度变换,获得图像多尺度下的尺度空间表示序列,再对这些序列就行尺度空间的特征提取。
二维的高斯核定义为:
SIFT算法将图像金字塔引入了尺度空间,首先采用不同尺度因子的高斯核对图像进行卷积以得到图像的不同尺度空间,将这一组图像作为金字塔图像的第一阶。接着对其中的2倍尺度图像(相对于该阶第一幅图像的2倍尺度)以2倍像素距离进行下采样来得到金字塔图像第二阶的第一幅图像,对该图像采用不同尺度因子的高斯核进行卷积,以获得金字塔图像第二阶的一组图像。再以金字塔图像第二阶中的2倍尺度图像以2倍像素距离进行下采样来得到金字塔图像第三阶的第一幅图像,对该图像采用不同尺度因子的高斯核进行卷积,以获得金字塔图像第三阶的一组图像。这样依次类推,从而获得了高斯金字塔图像。每一阶相邻的高斯图像相减,就得到了高斯差分图像,即DOG图像。对DOG尺度空间每个点与相邻尺度和相邻位置的点逐个进行比较,得到的局部极值位置即为特征点所处的位置和对应的尺度。
为了寻找尺度空间的极值点,DOG尺度空间中中间层的每个像素点都需要跟同一层的相邻8个像素点以及它上一层和下一层的9个相邻像素点总共26个相邻像素点进行比较,以确保在尺度空间和二维图像空间都检测到局部极值。图像的高斯滤波保证了特征点不受噪声影响,DOG图像保证了特征点不受亮度差的影响,在高斯差分图像空间提取极值点保证了尺度不变性。
剔除不好特征点时,利用高斯差分算子检测到的特征点中,含有一些低对比度的特征点和不稳定的边缘特征点,需要进行剔除。使用泰勒级数将尺度空间方程
展开:
其中
分别为一阶和二级偏导数矩阵。式中的一阶和二阶导数可以通过附近区域的差分近似求得,求导并令其为零得出精确的极值位置
则有
如果
,则保留该特征点,否则就丢弃。
为了去除不稳定的边缘特征点,可以获取特征点处的Hessian矩阵,主曲率可以通过一个2x2
的Hessian矩阵H求出:
通过对阈值的设定,可以将两帧图像中没有匹配点的特征点去掉,只留下匹配的特征点对。
实验采用MATLAB编程,分别对一组交大图书馆的图像以及一组标准库中的图像进行特征点提取与匹配,结果如下图。
二、实验总结与分析
实验中得到的特征点数据如下表所示:
交大图书馆图像 标准图像 图像尺寸 320*240 575*576 参考图像由SIFT所得的特征点数 266 1196 待拼接图像由SIFT所得的特征点数 263 1345 未利用RANSAC算法的特征点匹配对数 96 349 利用RANSAC算法的特征点匹配对数 87 269 由表格可以看出,SIFT算法可以有效地找到图像中的特征点,并能根据128维的特征描述符进行有效的粗匹配。而RANSAC能够在粗匹配的基础上有效地剔除匹配错误点,得到精确匹配的特征点对,为后续的图像的几何变换和拼接提供了基础。
三、实验心得
通过对本次实验的完成,我对图像拼接的研究有了直观的认识,这个过程充分锻炼了我分析问题的能力,对理论知识的学习能力以及编程解决实际问题的能力。我也学会了如何找出自己设计中的不足,继而去排除解决问题,这就是一个自我学习的过程。当我通过实验去学习理论知识时,自己动手得出的结论,不仅能加深我对图像拼接的理解,更能加深我对此的记忆。