全景拼接图像的实现

本文介绍了全景拼接图像的实现过程,主要使用SIFT特征匹配和RANSAC算法去除错误匹配点。通过实验详细阐述了RANSAC算法原理,包括如何计算变换矩阵和剔除错误匹配对。实验结果分析展示了不同场景下的拼接效果,揭示了匹配点质量和图像特征对拼接质量的影响,并提出了改进方案。
摘要由CSDN通过智能技术生成

全景拼接图像

全景拼接图像是指在同一位置(即图像的照相机位置相同)拍摄的两幅或者多幅图像用某种方式拼接起来。
基本步骤如下:
实验步骤:
步骤一:输入图像;
步骤二:应用SIFT算法对图像进行特征提取, 提取图像的特征点, 粗匹配特征点;
步骤三:用RANSAC方法对变换矩阵进行求解与精炼,并去除匹配错误点;
步骤四:根据最后计算出的变化矩阵进行图像拼接。

1.RANSAC算法原理

在用SIFT算法找到了匹配点,但这里面还存在着错误的匹配对,我们采用RANSAC算法对这些错误的匹配对再次进行剔除,从而得到有较高正确度的匹配对。RANSAC算法是依据一个容许误差将所有的粗匹配特征点分成内、外点,再利用内点的数据与准确的特点进行参数估计比较,从而剔除错误特征点。
采用RANSAC算法剔除误匹配点对,需要计算出待匹配图像之间的坐标转换关系。根据找到的匹配特点对,可计算出图像间的坐标转换关系,即两幅图像之间的变换矩阵。设图像间的变换为投影变换,那么
(2.7)
若p=(x,y),q=(x’,y’)是 匹 配 的 特 征 点 对,则投影变换公式为:
(2.8)
由投影变换公式可计算出H的各自由度参数(i=0,…,7),并以此作为初始值,通过迭代精炼H,可进一步确定特征点的对应,直到对应点数目不变为止,从而完成图像配准。
RANSAC算法的思想是:首先随机地选择两个点,这两个点确定了一条直线,并且称在这条直线的一定范围内的点为这条直线的支撑。这样的随机选择重复数次,然后,具有最大支撑集的直线被确认为是样本点集的拟合。在拟合的误差距离范围内的点被认为是内点,它们构成一致集,反之则为外点。
RANSAC算法剔除错误匹配对实现:
步骤一:设定初始最佳内点数为 0。从N对预匹配特征点中随机选取 4 对点建立方程组,求解出变换矩阵H的4组特征点的值。
步骤二:计算其余N对特征点经过变化矩阵H 的坐标值与预匹配点之间的距离 dv 。
步骤三:若 dv 小于设定的阈值T,则定这个预匹配为内点,反之为外点。
步骤四:统计当前的内点数目,若数目大于预设的最低匹配点个数,则记录当前变换矩阵H
步骤五:另选 4 对预匹配点,重复步骤一 ~ 四 若干次后,选择内点最多的变换矩阵作为参考变换矩阵,此时的变换矩阵为最佳结果。

2.实验过程详解

2.1 稳健的单应性矩阵估计
在使用RANSAC算法得出最佳变换矩阵之前,我们需要先使用SIFT特征自动找到匹配对应,在这个基础上删去错误的匹配点,得到最佳的变换矩阵。

import sift
#设置图像位置
featname = ['C:/Users/LENOVO/Desktop/计算机视觉/pcv-book-code-master/ch03/images/'+str(i+1)+'.sift' for i in range(5)] 
imname = ['C:/Users/LENOVO/Desktop/计算机视觉/pcv-book-code-master/ch03/images/'+str(i+1)+'.jpg' for i in range(5)]

#提取特征点并提取
l = {
   }
d = {
   }
for i in range(5): 
    sift.process_image(imname[i],featname[i])
    l[i],d[i] = sift.read_features_from_file(featname[i])

matches = {
   }
for i in range(4)
压缩包中包含的具体内容: 对给定数据中的6个不同场景图像,进行全景拼接操作,具体要求如下: (1) 寻找关键点,获取关键点的位置和尺度信息(DoG检测子已由KeypointDetect文件夹中的detect_features_DoG.m文件实现;请参照该算子,自行编写程序实现Harris-Laplacian检测子)。 (2) 在每一幅图像中,对每个关键点提取待拼接图像的SIFT描述子(编辑SIFTDescriptor.m文件实现该操作,运行EvaluateSIFTDescriptor.m文件检查实现结果)。 (3) 比较来自两幅不同图像的SIFT描述子,寻找匹配关键点(编辑SIFTSimpleMatcher.m文件计算两幅图像SIFT描述子间的Euclidean距离,实现该操作,运行EvaluateSIFTMatcher.m文件检查实现结果)。 (4) 基于图像中的匹配关键点,对两幅图像进行配准。请分别采用最小二乘方法(编辑ComputeAffineMatrix.m文件实现该操作,运行EvaluateAffineMatrix.m文件检查实现结果)和RANSAC方法估计两幅图像间的变换矩阵(编辑RANSACFit.m 文件中的ComputeError()函数实现该操作,运行TransformationTester.m文件检查实现结果)。 (5) 基于变换矩阵,对其中一幅图像进行变换处理,将其与另一幅图像进行拼接。 (6) 对同一场景的多幅图像进行上述操作,实现场景的全景拼接(编辑MultipleStitch.m文件中的makeTransformToReferenceFrame函数实现该操作)。可以运行StitchTester.m查看拼接结果。 (7) 请比较DoG检测子和Harris-Laplacian检测子的实验结果。图像拼接的效果对实验数据中的几个场景效果不同,请分析原因。 已经实现这些功能,并且编译运行均不报错!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值