图像全景拼接
1、全景拼接简介
在此前了解了SIFT的特征点的提取与匹配,并且在SIFT的基础上,采用RANSAC算法对图像变换矩阵进行求解与精炼,删除错配。全景拼接需要在此基础上完成。
2、全景拼接步骤
1.在连续图像对间使用sift特征寻找匹配对应点对
2.进行可视化匹配,匹配两幅图像之间的特征
3.将匹配转换成齐次坐标点的函数,估计单应性矩阵
4.通过估计出图像间的单应性矩阵,将所有的图像扭曲到一个公共的图像平面上
要实现两张图片的简单拼接,其实只需找出两张图片中相似的点 (至少四个,因为 homography 矩阵的计算需要至少四个点), 计算一张图片可以变换到另一张图片的变换矩阵 (homography 单应性矩阵)拟合成一个单应性矩阵。对每个对应点对使用该单应性矩阵,然后返回相应的平方距离之和。用这个矩阵把那张图片变换后放到另一张图片相应的位置 ,从而实现全景拼接
3、实验内容及分析
3.1、实验要求
- 针对固定点位拍摄多张图片,以中间图片为中心,实现图像的拼接融合
- 针对同一场景(需选取视差变化大的场景,也就是有近景目标)更换拍摄位置
- 对结果进行分析说明
3.2、实验代码
from pylab import *
from numpy import *
from PIL import Image
# If you have PCV installed, these imports should work
from PCV.geometry import homography, warp
from PCV.localdescriptors import sift
"""
This is the panorama example from section 3.3.
"""
# set paths to data folder
featname = ['C:/Users/Administrator/Desktop/pythonhomework/pingjie4/'+str(i+1)+'.sift' for i in range(5)]
imname = ['C:/Users/Administrator/Desktop/pythonhomework/pingjie4/'+str(i+1)+'.jpg' for i in range(5)]
# extract features and match
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):
matches[i] = sift.match(