python实现图像拼接,python语言字符串拼接

  python实现图像拼接,python语言字符串拼接

  图像映射和全景拼接的基本过程1。基本流程2。图像间变换结构的计算原理1.2D图像变换原理2。特征点的扰动3。APAP算法4。4的基本步骤。RANSAC图像拼接算法3。APAP算法

  图像映射和全景拼接

  图像拼接是一个日益热门的研究领域,已经成为摄影图形学、计算机视觉、图像处理和计算机图形学的一个热点。图像拼接通常解决对齐一系列空间重叠图像的问题,以形成比单个图像具有更高分辨率和更宽视野的无缝高清晰度图像。

  图像拼接的基本过程1。基本流程:为某个场景拍摄多张/连续的图像。

  计算第二图像和第一图像之间的转换关系。

  在第一图像的坐标系中重叠第二图像。

  后融合/合成

  对于多画面场景,重复上述步骤。

  2.图像之间的变换结构针对两张及多张图片提取特征

  特征匹配

  找到两幅(或多幅)输入图像的特征点(SIFT特征点)并进行匹配。

  关于SIFT的原理,请参考“链接:链接。”

  根据图像变换特点,选取合适的变换结构

  2D图像转换,详细转换原理见下图。

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

  直接阵列传输(DLT)算法

  直接线性变换解决方案是在图像点的“坐标米坐标”和相应物点的物空间坐标之间建立直接线性关系的解决方案。

  直接转换解决方案的特征:

  1、不归心,不定项

  2.内部和外部方向元素不需要初始值。

  3.有必要在物理空间中放置一组控制点。

  4.它特别适用于处理非公制相机拍摄的图像。

  5.本质是空间后交解。

  图像拼接原理1.2D图像变换原理要根据图像的变换特点选择不同的变换结构。一般来说,2D图像的转换原理有以下几种。

  2.在特征点失配干扰图像特征点匹配的过程中,不可避免地会出现特征点失配的问题,使用错误的特征点进行图像拼接可能会导致较大的误差。

  因此,我们采用曲线拟合的方法,在一致的特征点中寻找合适的曲线,尽量剔除噪声点,减少误差。

  道:

  1.直线拟合

  给定空间中的几个点(一致的特征点),取任意两点组成一条直线,给定阈值,计算直线上的点数),将选择最直的直线作为拟合直线。

  2.圆形拟合

  两点定直线,三点定圆的原理和直线是一样的。

  3.曲线拟合

  给出曲线多项式,求多项式的系数。

  3.APAP算法

  “鬼影”的原因是图像映射是一种全局同构变换。此外,图像场景中的每个对象通常具有不同的深度。利用不同深度的物体的特征点进行全局同构变换,由于此时图像中的物体无法满足近似同一平面的条件,计算出的同构矩阵存在较大误差,仅一次全局同构变换无法做出两幅图像之间的变换关系。

  在图像拼接融合过程中,由于客观因素的影响,拼接融合后的图像之间可能存在“鬼影现象”和过度不连续等问题。2013年,Julio Zaragoza等人开发了一种新的图像配准算法3354,它可以使用APAP算法来解决鬼影现象。

  算法流程:

  1.提取两幅图像的SIFT特征点

  2.匹配两幅图像的特征点

  3.匹配后用RANSAC算法筛选特征点对,剔除错误点。过滤后的特征点基本上可以相互对应。

  4.使用DLT算法估计剩余特征点对的透视变换矩阵。

  5.得到的透视变换矩阵是基于一对全局特征点,因此刚性单调矩阵完成配准。为了提高配准精度,APAP将图像切割成无数个小方块,并对每个小方块进行单应矩阵变换。

  APAP可以很好地注册,但它在很大程度上取决于一对特征点。当图像中高频信息少,特征点对太少时,准将不能充分发挥作用,regi

  4.RANSAC方法图像拼接RANSAC是“随机样本一致性”的缩写。这样可以根据包括“离群值”在内的一系列观测数据集反复猜测数学模型的参数。是不确定算法3354,能以一定的概率得到合理的结果;为了提高概率,必须增加迭代次数。

  SAC的基本假设如下。

  (1)数据由“局部点”组成。例如,数据的分布可以用几个模型参数来解释;

  2)“离群值”是不能适应模型的数据。

  3)其他数据都是噪声。

  异常值的原因是噪声的极值;测量方法错误;关于数据的错误假设。

  SAC还假设对于一组“通常很小”的局部点有一个可估计的模型。

  工艺参数;该模型可以解释或适用于局部点。

  基本算法步骤1。选择4对匹配特征点(选择4对特征点是因为单应矩阵有8个自由度,需要4个特征点。每个特征点可以构造2个方程,然后求解单应矩阵,但任意3个或4个点不能在同一条直线上)

  2.根据直接线性变换解DLT计算单应矩阵H。

  3.计算匹配点的映射误差。

  4.根据错误阈值确定内联体的数量。

  5.重新计算最大内联集的单应矩阵H。

  5.最佳缝合。因为图像重叠会导致鬼影问题,你可以通过寻找最佳拼接线来找到两张图片之间的最佳拼接线,一张在左边,一张在右边,这样会很好的解决鬼影问题。方法:最大流量和最小切割最大流

  给定一个指定的有向图,有两个特殊的点源S(源)和汇T(汇),每条边都有指定的容量,求从S到T满足条件的最大流。最小割

  割是网络中固定点的划分。它把网络中的所有顶点分成两个顶点集S和T,其中源点sS,汇点T T,记为CUT(S,T),满足条件的S到T的最小割。

  不断寻找从S到e的路径,每找到一条路径,就让这条路径上所有边的权重减去这条路径上权重最小的边的权重。同时,在此路径上构建一条有向边,权重设置为减去的值。另外,如果减法后权重为0,则删除这条边。算法不断循环,直到找不到从S到E的路径的终点,最后把空的或者满的边切掉。

  参考:链接

  6.代码部分"从皮拉布导入*从数组导入*从太平航运导入图像#如果您安装了PCV,这些导入应该可以从几何图形导入单应性,有从PCV.localdescriptors导入 筛选 这是3.3节中的全景示例 featname=[ D:/python code/test/data/test images/ str(I 1) .sift for I in range(5)]im name=[ D:/python code/test/data/test images/ str(I 1) .jpg for I in range(5)]#提取特征,m # match={ } d={ } for I in range(5):sift。process _ image(im name[I],featname[i]) l[i],d[I]=sift。read _ features _ from _ file(feat name[I])matches={ } for I in range(4):matches[I]=sift。match(d[I],d[i])#可视化匹配(书中图3-11)对于范围(4)中的I:im1点数#将匹配转换成齐次坐标点的函数def convert _ points(j):ndx=matches[j].非零()[0] fp=单应性。make_homog(l[j 1][ndx,2].t)nd x2=[int(matches[j][I])for I in ndx]TP=单应性。make _ homog(l[j][nd x2,2].T) #开关x和y - TODO这应该移到别处fp=vstack([fp[1],fp[0],fp[2]]) tp=vstack([tp[1],tp[0],tp[2]])返回fp,tp#估计单应性#估计单应性矩阵模型=单应性RansacModel()fp,tp=convert_points(1)H_12=单应性H_from_ransac(fp,tp,model)[0] # im 1 to 2fp,tp=convert_points(0)H_01=单应性H_from_ransac(fp,tp,model)[0] # im 0到1tp,fp=convert_points(2) # NB:逆序H_32=单应性H_from_ransac(fp,tp,model)[0] # im 3到2tp,fp=convert_points(3) # NB:逆序H_43=单应性H_from_ransac(fp,tp,model)[0] # im 4到3#扭曲图像=100 #用于填充和平移对于填充和转换im1=array(Image.open(imname[1]), uint 8 )im2=array(image。open(imname[2]), uint 8 )im_12=warp。panorama(H _ 12,im1,im2,delta,delta)im1=数组(图像。open(imname[0]), f )im _ 02=warp。panorama(dot(H _ 12,H_01),im1,im _ 12,delta,delta)im1=数组图像拼接代码测试1.测试一

  测试图片

  运行结果:

  2.测试二

  测试图片

  运行结果:

  结果分析1.进行了七组图片的测试,上方结果只展示了两种,其他五组效果较差,分析原因可能是因为图片拍摄时角度和位置变化较大,导致特征匹配时匹配点较少,使得拼接结果较差,可以间接说明该代码在进行角度和位置同时改变时的适应能力较差。

  2.在除了图片的问题以外,一开始运行代码时,出现了以下的运行结果,原因是代码中德尔塔(用于平移和填充的数据)较大,导致图片结果较长,可以调节小一些。

  3.在进行测试时,有一组图片拼接结果最差(下图)

  从结果来看,基本就是乱拼,看了一下几张特征匹配的图,特征匹配的效果还不错(错误的匹配点较少,但总的匹配数量较少),分析原因可能是图片的建筑物差异点(特征点)不够明显,加上数量较少,多图直接拼接容易弄错。

  4.运行过程中的错误:

  (1):

  原因:图片较大

  修改方式:更改图片大小

  在系统环境变量中调节虚拟内存大小

  (2):

  原因:图片大小不同

  修改方式:图片大小规格改为相同

  5.对于第二组测试的结果:

  第二组图片是用别人拍的照片进行测试的(自己拍的效果都比较差QAQ)

  自己的运行结果

  但是在别人的电脑上运行的结果

  可以看到拼接的分割线基本一致,但是前一个的分割线有明显的分割线。原因目前只能解释为不同电脑不一样(=(` *)),原因清楚了以后再补充。

  综上所述,算法一般比较成熟,拼接效果也不错,只是拍摄的图片角度和位置不能改变太多(类似于用手机拍长图,只能旋转方位)。但是拼接线还是有明显的痕迹,要求特征点数多,匹配度高(但拼接图像时这个要求是合理的),就是画面好的时候才能拼接好,不能有“鬼影”

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: