图像拼接
原理:图像拼接是将两张或两张以上、且两两图像之间具有相同的特征点(SIFT特征点)的图像通过特征匹配拼接在一起。手机上照相机的全景照相就是图像拼接的一个应用。
特征点匹配
计算机视觉的研究者们设计了许多更为稳定的的特征点,这些特征点不会随着相机的移动,旋转或者光照的变化而变化。例如:SIFT,SURF,ORB等。
一个图像的特征点由两部分构成:关键点(Keypoint)和描述子(Descriptor)
关键点指的是该特征点在图像中的位置,有些还具有方向、尺度信息;
描述子通常是一个向量,按照人为的设计的方式,描述关键点周围像素的信息。通常描述子是按照外观相似的特征应该有相似的描述子设计的。
创建全景图
在同一位置(即图像的照相机位置相同)拍摄的两幅或者多幅图像是单应性相关的(如下面图像所示)。我们经常使用该约束将很多图像缝补起来,拼成一个大的图像来创建全景图像。

上面5幅图像是从不同角度对目标物进行拍摄
RANSAC
RANSAC(RANdom SAmple Consensus,随机抽样一致),它是根据一组包含局外点(异常数据)的样本数据集,计算出数据的数学模型参数,得到有效样本数据的算法。在这里换句话就是说,可以从一组包含异常匹配(匹配错误)的特征点数据集中,找到可以拟合这组数据的数学模型参数,得到正确匹配的特征点。 RANSAC目的就是找到一个单应性矩阵H,使得能够满足这个单应性矩阵的特征点最多。
RANSAC算法步骤
- 选择4对匹配特征点(选择4对特征点因为单应性矩阵有8个自由度,需要4个特征点,每个特征点都能构造2个方程,然后求解单应性矩阵,但是任意3个点或4个点不能在同一条直线上)
- 根据直接线性变换解法DLT计算单应性矩阵H
- 对所匹配点,计算映射误差
- 根据误差阈值,确定inliers数量
- 针对最大的inliers集合,重新计算单应性矩阵H
代码
下面展示代码`
//
from array import array
from numpy import *
from matplotlib.pyplot import *
from PIL import Image
import warp
import homography
from PCV.localdescriptors import sift
featname = ['img/' + str(i + 1) + '.sift' for i in range(5)]
imname = ['img/' + str(i + 1) + '.jpg' for i in range(5)]
l = {
}
d = {
}
for i in range(5):
sift.process_image(imname[i], featname[i])
l

图像拼接是利用相同特征点的图像进行拼接,常用于全景图创建。本文介绍了SIFT等稳定特征点,关键点与描述子的概念,并详细阐述了RANSAC算法在处理包含异常匹配数据时的作用,用于找到最佳单应性矩阵,创建高质量的全景图像。同时,分析了RANSAC算法的优缺点。
最低0.47元/天 解锁文章
2198

被折叠的 条评论
为什么被折叠?



