全景图像拼接
一、图像拼接
1、图像拼接技术
图像拼接技术就是将数张有重叠部分的图像(可能是不同时间、不同视角或者不同传感器获得的)拼成一幅无缝的全景图或高分辨率图像的技术。
在医学成像、计算机视觉、卫星数据、军事目标自动识别等领域具有重要意义。
2、图像拼接算法分类
图像拼接目前有很多算法,图像拼接的质量,主要依赖于图像的配准程度,因此通过不同的图像匹配方式将算法分为以下两种:
1、基于区域相关拼接算法
- 该算法比较传统和普遍,从待拼接图像的灰度值出发,对待配准图像中一块区域与参考图像中的相同尺寸的区域使用最小二乘法或者其它数学方法计算其灰度值的差异(1.通过累加各点灰度的差值,2.计算两块区域的对应像素点灰度值的相关系数,相关系数越大,则两块图像的匹配程度越高,3.两者中计算相关系数的效果更好)。对此差异比较后来判断待拼接图像重叠区域的相似程度,由此得到待拼接图像重叠区域的范围和位置,从而实现图像拼接。
也可以通过FFT 变换将图像由时域变换到频域,然后再进行配准。对位移量比较大的图像,可以先校正图像的旋转,然后建立两幅图像之间的映射关系。
2、基于特征相关拼接算法
- 于特征的配准方法不是直接利用图像的像素值,而是通过像素导出图像的特征,然后以图像特征为标准,对图像重叠部分的对应特征区域进行搜索匹配,该类拼接算法有比较高的健壮性和鲁棒性。
在两幅图像对应的特征集中利用特征匹配算法尽可能地将存在对应关系的特征对选择出来。一系列的图像分割技术都被用到特征的抽取和边界检测上。
二、拼接流程
1、基本流程
将两幅或多幅具有重叠区域的图像,通过特征匹配将具有相同的特征点(SIFT特征点)的图像拼接在一起,将来自多个不同视角拍摄的图像变换到同一视角下,拼接成一张宽视野图像
1、针对某个场景拍摄多张/序列图像
2、计算第二张图像与第一张图像之间的变换关系
- 提取特征点,生成描述符
- 特征匹配
3、将第二张图像叠加到第一张图像的坐标系中
- 图像映射、图像扭曲
4、变换后的融合/合成
5、在多图场景中,重复上述过程
三、特征匹配的噪声处理
在进行图像匹配之前都需要找出输入的两张图片(或者多张)的特征点(SIFT特征点)然后再匹配上这些特征点,但是这可能会出现一个问题,如果图像的噪声太大,会直接影响后来的匹配结果
要想尽可能的减少这些噪声点的影响,可以通过拟合特征点的方法。以下介绍几种拟合方法:
1、直线拟合
给定若干二维空间中的点,求直线 y = a x + b y=ax+by=ax+b ,使得该直线对空间点的拟合误差最小。直线确定步骤:1、随机选择两个点 2、根据该点构造直线 3、给定阈值,计算 inliers 数量
2、圆拟合
用同样的方法,两点确定一条直线,三点可以确定一个圆,我们随机确定三个点,然后确定一个圆的方程,然后计算在圆上的 inliers 值。
3、曲线拟合
拟合一条较复杂的曲线,可以给定一个多项式给定一个方程式:我们求解出了这个多项式的参数,就相当于求解出了拟合的曲线。
四、RANSAC算法
RANSAC 是“RANdom SAmple Consensus”(随机一致性采样)的缩写。该方法是用来找到正确模型来拟合带有噪声数据的迭代方法。给定一个模型,例如点集之间的单应性矩阵,RANSAC 基本的思想是,数据中包含正确的点和噪声点,合理的模型应该能够在描述正确数据点的同时摒弃噪声点。 即从一组数据集(包含噪声点的数据集)中,能够从中挑选出正确的点,获取能够正确拟合的参数模型。
RANSAC算法的步骤:
- 选择4对匹配特征点(选择4对特征点因为单应性矩阵有8个自由度,需要4个特征点,每个特征点都能构造2个方程,然后求解单应性矩阵,但是任意3个点或4个点不能在同一条直线上)
- 根据直接线性变换解法DLT计算单应性矩阵H
- 对所匹配点,计算映射误差
- 根据误差阈值,确定inliers数量
- 针对最大的inliers集合,重新计算单应性矩阵H
五、代码实现
from numpy import dot, array
from numpy import vstack
from pylab import *
from PIL import Image
from PCV.geometry import homography, warp
from PCV.localdescriptors import sift
np.seterr(invalid='ignore')
"""
这是3.3节中的全景示例。
"""
# 设置数据文件夹的路径
featname = ['H:\Pych\图像拼接\图片/yintong' + str(i + 5) + '.sift' for i