全景图的拼接

本文介绍了图像拼接的概念,详细阐述了RANSAC算法的基本思想、原理和步骤,用于滤除误匹配对。在解决鬼影问题上,提出了APAP算法,通过切割图像并进行局部单应性矩阵变换提高拼接精度。内容包括算法的实现、原图与拼接结果的展示及分析。
摘要由CSDN通过智能技术生成

一、图像拼接的概念

图像拼接是将两张或两张以上、且两两图像之间具有相同的特征点(SIFT特征点)的图像通过特征匹配拼接在一起。手机上照相机的全景照相就是图像拼接的一个应用

二、RANSAC

1. 概念与基本思想

RANSAC 是“RANdom SAmple Consensus”(随机一致性采样)的缩写。该方法是用来找到正确模型来拟合带有噪声数据的迭代方法。给定一个模型,例如点集之间的单应性矩阵。
RANSAC 基本的思想是,数据中包含正确的点和噪声点,合理的模型应该能够在描述正确数据点的同时摒弃噪声点

2.原理

OpenCV中滤除误匹配对采用RANSAC算法寻找一个最佳单应性矩阵H,矩阵大小为3×3。RANSAC目的是找到最优的参数矩阵使得满足该矩阵的数据点个数最多,通常令h33=1来归一化矩阵。由于单应性矩阵有8个未知参数,至少需要8个线性方程求解,对应到点位置信息上,一组点对可以列出两个方程,则至少包含4组匹配点对。
在这里插入图片描述

其中(x,y)表示目标图像角点位置,(x’,y’)为场景图像角点位置,s为尺度参数。
RANSAC算法从匹配数据集中随机抽出4个样本并保证这4个样本之间不共线,计算出单应性矩阵,然后利用这个模型测试所有数据,并计算满足这个模型数据点的个数与投影误差(即代价函数),若此模型为最优模型,则对应的代价函数最小。

在这里插入图片描述
RANSAC算法的基本原理可通过下图来描述
在这里插入图片描述
RANSAC算法的思想简单而巧妙:首先随机地选择两个点,这两个点确定了一条直线,并且称在这条直线的一定范围内的点为这条直线的支撑。这样的随机选择重复数次,然后,具有最大支撑集的直线被确认为是样本点集的拟合。在拟合的误差距离范围内的点被认为是内点,它们构成一致集,反之则为外点。根据算法描述,可以很快判断,如果只有少量外点,那么随机选取的包含外点的初始点集确定的直线不会获得很大的支撑,值得注意的是,过大比例的外点将导致RANSAC算法失败。在直线拟合的例子中,由点集确定直线至少需要两个点;而对于透视变换,这样的最小集合需要有4个点。
图9中蓝色点属于内点(正确点),而第红色点属于外点(偏移点)。此时用最小二乘法拟合这组数据,实际的最佳拟合直线是那条穿越了最多点数的蓝色实线

3. 算法步骤

  1. 随机从数据集中随机抽出4个样本数据 (此4个样本之间不能共线),计算出变换矩阵H,记为模型M;
  2. 计算数据集中所有数据与模型M的投影误差,若误差小于阈值,加入内点集 I ;
  3. 如果当前内点集 I 元素个数大于最优内点集 I_best , 则更新 I_best = I,同时更新迭代次数k ;
  4. 如果迭代次数大于k,则退出 ; 否则迭代次数加1,并重复上述步骤;

4.实现代码

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.
"""

featname = ['image/' + str(i + 1) + '.sift' for i in range(5)]
imname = ['image/' + str(i + 1) + '.jpg' for i in range(5)]
# extract features and m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值