目录
(一)相关原理介绍
图像全景拼接涉及到了SIFT特征匹配和RANSAC算法。
1、SIFT特征匹配
为了匹配特征点,为后续图像拼接做准备。(详细原理请看https://blog.youkuaiyun.com/weixin_42578378/article/details/88620645)
2、RANSAC算法
RANSAC是RANdom SAmple Consensus的简称,它是根据一组包含异常数据的样本数据集,通过迭代的方法计算出数据的数学模型参数,得到有效样本数据的非确定性的算法。它可以在一组包含“外点”的数据集中,采用不断迭代的方法,寻找最优参数模型,而这些不符合最优模型的点,便被定义为“外点”。
在图像拼接中采用SIFT进行图像的特征匹配时,经常会出现匹配错误的连线,这会导致图像拼接的时候出现偏差,便不能成功拼接图像,这时候使用RANSAC算法。
RANSAC算法会从匹配的数据集中随机抽出几个样本并保证抽出的样本之间不共线,计算出样本单应性矩阵,然后利用这个模型测试所有的匹配数据,并计算满足这个模型数据点的个数与投影误差(即代价函数),若此模型为最优模型,则对应的代价函数最小。这样便可以剔除匹配错误的特征点匹配对,采用不断迭代的方法,寻找到一个较为稳健的单应性矩阵,并且使得满足该矩阵的数据点个数最多。
(二)步骤
图像全景拼接的整体流程如下
1、根据给定的图像集,实现图像之间的特征匹配;
2、通过匹配特征,计算图像之间的变换结构;
3、利用图像的变换结构,实现图像间的映射;
4、针对叠加后的图像,采用相应算法,对齐特征点;
5、通过图割的方法,自动选取拼接缝;
6、图像进行融合。
(三)相关代码
#RANSAC算法拼接3张图片
from pylab import *
from numpy import *
from PIL import Image
from PCV.geometry import homography, warp
from PCV.localdescriptors import sift
featname = ['F:/1python/PythonWork/Chapter2SIFT/ps'+str(i+1)+'.sift' for i in range(3)]
imname = ['F:/1python/PythonWork/Chapter2SIFT/ps'+str(i+1)+'.jpg' for i in range(3)]
l = {
}
d = {