利用python语言实现多张图像拼接

图像映射与全景拼接

图像拼接(image mosaic)是一个日益流行的研究领域,他已经成为照相绘图学、计算机视觉、图像处理和计算机图形学研究中的热点。图像拼接解决的问题一般式,通过对齐一系列空间重叠的图像,构成一个无缝的、高清晰的图像,它具有比单个图像更高的分辨率和更大的视野。

图像拼接基本流程

1.基础流程

①针对某个场景中拍摄多张/序列图像
②计算第二张图像与第一张图像之间的变换关系
③将第二张图像叠加到第一张图像的坐标系中
④变换后的融合/合成
⑤在多图场景中,重复上述过程
在这里插入图片描述

2.计算图像间的变换结构

①针对两张及多张图片提取特征
②特征匹配
找出输入的两张图片(或者多张)的特征点(SIFT特征点)然后再匹配上这些特征点。
SIFT相关原理见(链接: link.)

③根据图像变换特点,选取合适的变换结构
2D图像变换,详细变换原理见下方

④根据DLT等方法计算变换结构

DLT(Direct Linear Transform)算法
直接线性变换解法是建立像点的“坐标仪坐标”和相应物点的物方空间坐标直接的线性关系的解法。
直接线性变换解法的特点:
1、不归心、不定项
2.不需要内外方位元素的起始值
3.物方空间需布置一组控制点
4.特别适合于处理非量测相机所摄影像
5.本质是一种空间后交-欠交解法
在这里插入图片描述

图像拼接相关原理

1.2D图像变换原理

根据图像的变换特点,我们要选择不同的变换结构,通常,2D图像的变换原理有以下的几种类型:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.特征点错误匹配干扰

在进行图像特征点匹配过程中,难免会出现特征点匹配错误的问题,如果使用错误的特征点进行图像拼接,可能会导致比较大的误差。
在这里插入图片描述
为此,我们可以采用曲线拟合的方法,在匹配的特征点中找到一条合适的曲线尽量消除噪声点以减小误差。

方式:
1.直线拟合
在空间中给定若干点(已匹配的特征点),任取两点构成一条直线,给定一个阈值,计算inliers的数量(在线上的点的数量),选取最多的那条直线为拟合直线。
在这里插入图片描述
2.圆拟合
两点确定一条直线,三点则能确定一个圆,原理同直线拟合。

3.曲线拟合
给定曲线多项式,求解多项式的系数。

3.APAP算法

在这里插入图片描述
产生“鬼影”的原因在于图像映射是全局的单应性变换,然后图像场景中各个物体往往具有不同的深度,如果采用处于不同深度物体的特征点进行全局单应性变换,由于此时图像中的物体无法满足近似于同一平面的条件,计算得到的单应性矩阵会有较大的误差,仅仅由一个全局的单应性变换无法完全描述两幅图像之间的变换关系。
在图像拼接融合的过程中,受客观因素的影响,拼接融合后的图像可能会存在上图中的“鬼影现象”以及图像间过度不连续等问题。2013年,Julio Zaragoza等人发表了一种新的图像配准算法APAP(As-Projective-As-Possible Image Stitching with Moving DLT)解决鬼影现象可以采用APAP算法。

算法流程:
1.提取两张图片的SIFT特征点
2.对两张图片的特征点进行匹配
3.匹配后,使用RANSAC算法进行特征点对的筛选,排除错误点。筛选后的特征点基本能够一一对应。
4.使用DLT算法,将剩下的特征点对进行透视变换矩阵的估计。
5.因为得到的透视变换矩阵是基于全局特征点对进行的,即一个刚性的单应性矩阵完成配准。为提高配准的精度,APAP将图像切割成无数多个小方块,对每个小方块进行单应性矩阵变换。

APAP虽然能够较好地完成配准,但非常依赖于特征点对。若图像高频信息较少,特征点对过少,配准将完全失效,并且对大尺度的图像进行配准,其效果也不是很好,一切都决定于特征点对的数量。

4.RANSAC方法图像拼接

RANSAC是“RANdom SAmple Consensus(随机抽样一致)”的缩写。它可以从一组包含“局外点”的观测数据集中,通过迭代方式估计数学模型的参数。它是一种不确定的算法——它有一定的概率得出一个合理的结果;为了提高概率必须提高迭代次数。

RANSAC的基本假设是:
(1)数据由“局内点”组成,例如:数据的分布可以用一些模型参数来解释;
(2)“局外点”是不能适应该模型的数据;
(3)除此之外的数据属于噪声。
局外点产生的原因有:噪声的极值;错误的测量方法;对数据的错误假设。
RANSAC也做了以下假设:给定一组(通常很小的)局内点,存在一个可以估计模型参数的过程;而该模型能够解释或者适用于局内点。

算法基本步骤

1.选择4对匹配特征点(选择4对特征点因为单应性矩阵有8个自由度,需要4个特征点,每个特征点都能构造2个方程,然后求解单应性矩阵,但是任意3个点或4个点不能在同一条直线上)
2.根据直接线性变换解法DLT计算单应性矩阵H
3.对所匹配点,计算映射误差
4.根据误差阈值,确定inliers数量
5.针对最大的inliers集合,重新计算单应性矩阵H

5.最佳拼接缝

由于图像重叠会导致鬼影问题,所以可以采取找最佳拼接缝的方法,找到两张图片之间最佳的一条拼接线,左边是一张图,右边是另一张图,就很好的解决了鬼影问题。
方法:最大流最小割
最大流
给定指定的一个有向图,其中有两个特殊的点源S(Sources)和汇T(Sinks),每条边有指定的容量(Capacity),求满足条件的从S到T的最大流(MaxFlow)。
最小割
割是网络中定点的一个划分,它把网络中的所有顶点划分成两个顶点集合S和T,其中源点s∈S,汇点t∈T。记为CUT(S,T),满足条件的从S到T的最小割(Min cut)。

不断的找从S到E的一条路径,每找到一条路径,就让该路径上的所有边的权重减去这条路径上权重值最小边的权重,同时在这条路径上构造一个方向的有向边,权重值设置为减去的值,另外如果减完后权重为0,则删除这条边。算法一直循环知道无法找到S到E的路径借结束,最后切割那些为空或是流已满的边

参考:

  • 15
    点赞
  • 191
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值