图像全景拼接
1.RANSAC
PANSAC是“RANdom SAmple Consensus”(随机一致性采样)的缩写。该方法是用来找到正确模型来拟合带有噪声数据的迭代方法。给定一个模型,例如点集之间的单应性矩阵,RANSAC基本的思想是,数据中包含着正确的点和噪声点,合理的模型应该能够在描述正确数据点的同时摒弃噪声点。
RANSAC算法的步骤:
选择4对匹配特征点(选择4对特征点因为单应性矩阵有8个自由度,需要4个特征点,每个特征点都能构造2个方程,然后求解单应性矩阵,但是任意3个点或4个点不能在同一条直线上)
根据直接线性变换解法DLT计算单应性矩阵H
对所匹配点,计算映射误差
根据误差阈值,确定inliers数量
针对最大的inliers集合,重新计算单应性矩阵H
2.稳健的单应性矩阵估计
我们在任何模型中都可以使用 RANSAC 模块。在使用 RANSAC 模块时,我们只需要在相应 Python 类中实现 fit() 和 get_error() 方法,剩下就是正确地使用 ransac.py,我们这里使用可能的对应点集来自动找到用于全景图像的单应性矩阵。下面是使用SIFT特征自动找到匹配对应。
3.拼接图像
from numpy import *
from matplotlib.pyplot import *
from PIL import Image
from PCV.geometry import warp, homography
# import homography
from PCV.localdescriptors import sift
featname = ['imag3/' + str(i + 1) + '.sift' for i in range(5)]
imname = ['imag3/' + 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