本文为CSDN原创文章,转载请注明出处

本章主要讲opencv stitching_detail的图像拼接算法

对原理性的东西不多赘述,具体可以参见该大佬的文章
https://blog.csdn.net/zhaocj/article/details/78798687

关于目前的全景拼接算法综述,可参考知乎大佬全面的叙述:https://www.zhihu.com/question/34535199/answer/135169187

本文的图像拼接是基于opencv的图像拼接,对6幅图进行拼接,效果如下,

6图拼接效果

给出一个opencv全景拼接器的下载链接,可达到上图效果,其中包含下面博文的图片素材
https://download.csdn.net/download/qq_28901541/10747238

其opencv的拼接速度极慢,博主对其进行了一定的优化,使得速度大为提升,并对比了各个算法的速度和质量优劣,并给出了实验数据,流程分为以下几步:

图像拼接算法流程图

特征点检测与提取算法的介绍

opencv中采用了SURF,ORB进行特征点提取,如果装的是opencv2.0版本,则可以直接用SURF,如果是3.0版本,则需要下载相应的contrib库进行安装。

原理不赘述,给出其实验结果对比和分析,

原始图像1

SURF特征点提取


ORB特征点提取

其中SURF提取特征点所用时间为0.233115秒,ORB提取特征点所用时间为0.0189878秒。在提取特征点的速度上ORB明显快于SURF,但是在特征点提取的数量上,ORB明显少于SURF。

特征点匹配

采用2-NN和次近邻算法实现匹配,线性计算单应矩阵并归一化,同时用RANSAC算法筛选出内点,并用LM算法再次计算得到更为精确的单应矩阵H
原始图像1

原始图像2

SURF提取特征点并经过相应算法进行匹配后的图像

ORB提取特征点并经过相应算法进行匹配后的图像

其中SURF算法获得的内点数量为243,耗费的总时间为0.693864秒,ORB获得的内点数量为80,耗费的总时间为0.118437秒。可以发现,ORB速度明显快于SURF,但是提取的特征点也远少于SURF,图像特征是图像拼接质量的关键,在进行图像拼接时,需要在速度与质量之间进行取舍。

相机参数计算

由单应矩阵H通过相应计算得到相机的内参矩阵K和外参矩阵R,此过程称为相机标定。但是由于多个图像间的约束,会忽略全局的限制,参数会产生累积误差。本设计中,采用光束平差法(Bundle Adjustment)来精确相机参数,减少累积误差。

应用基于LM算法的光束平差法来消除累积误差,其误差指标函数有两个,一个是重映射误差,一个是光束发射误差,射线发射误差为两条射线间的最短距离d,其原因是由两个相机的射线透过相片达到同一个物点后并不会相交所造成的。

实验采用的是光束发射误差的方法,通过基于LM算法的光束平差法来联合两个相机参数,较大程度的减少了两个摄像头之间的累积误差。但是光束平差法容易引起波形效应,使得拼接的图像呈现出蛇型分布,需要引入一个全局矫正矩阵来对图像进行波形校正。


相机参数计算

图像投影变换

实验时两个相机是处于不同角度拍摄图片的,两幅图片并不会在同一个投影平面上, 因此,为了保证拼接图像视觉的一致性使得拼接图像处于同一个投影平面,需要对待拼接的两幅图像进行投影变化。

根据计算机视觉库,实验中的投影方式有很多种,诸如平面投影、横轴墨卡托投影、柱面投影、墨卡托投影、球面投影、鱼眼投影、立体投影等。

下面通过对上面原始图像进行相关平面的投影,比较五种投影平面的耗时以及投影效果图,
下面仅给出原始图像1的实验效果图:

立方体投影


球面投影


鱼眼投影


柱面投影


平面投影

下表为各投影方式的耗时

曝光补偿

通过投影变换后,图像得到了很好的拼接,且具有了一定的视觉一致性,但是由于出厂时,两个相机自身的参数不可能完全一致,虽然其内参通过相机参数估计及光束平差法所解决,但是并未解决其曝光程度差异的问题。因此,可能存在一幅图像明显较亮,而另一幅图像明显较暗,从而造成拼接后的图像重合区域存在一定的亮度差异,出现明显的边缘,所以需要对两幅图像进行曝光补偿,使得两幅图具有相似或相同的曝光程度。实验中补偿方式有两种,一种是增益补偿,一种是分块补偿。

增益补偿是分别对两幅图赋予一个增益,使得两幅图的重叠部分增益相等或者相似;而分块补偿,其补偿精度较好,是将图像分成大小相同的不同块,然后给予不同块不同的增益系数,相当于分块进行增益补偿,由于存在多个块多个增益系数,就如同多个相机拍摄的多个图片一样,将会存在不同程度的曝光,所以为了使产生的效果不呈现出“块”形态,需要对所有块的增益系数应用分割线性滤波方法进行平滑滤波实验中采用的滤波核为[1/4, 1/2,1/4]。

可以看出,两幅原始图像的重叠区域有相对明显的亮度差异,原始图1曝光补偿后变亮了,原始图2曝光补偿后变暗了,使得两幅图像的亮度十分接近。而曝光补偿的目的正是通过给予重叠部分不同的增益,调节两幅图像的亮度差异,使得两幅图像的亮度接近。

缝合线估计

当处理完上述步骤之后,需要进行缝合线估计。倘若不进行缝合线估计,拼接图像的重合区域可能会出现明显的鬼影以及模糊现象。通过在两幅图像的重叠区域内寻找一条缝合线,在重叠区域,缝合线的左侧选择该侧图像部分,右侧选择右侧图像部分。缝合线对处理视差有着特别明显的效果,特别是对于大场景环境。选取最佳缝合线,可以选择两幅图像重合区域差异最小的位置,避开错位的坐标点,但是消耗的计算机资源较多,不利于实时拼接。

缝合线的寻找方法有三种可选择,分别为逐点法,动态规划法,图割法。

不使用缝合线,浅蓝色框中的图像是柱面投影变换后的图像,其他三种方法寻找的缝合线在两幅图的重叠区域,可以看出,该条缝合线即为分界线,拼接图像的左侧选择分界线左边的图像,右侧选择分界线右边的图像。
各方法寻找缝合线的耗费时间如下,

其中逐点法寻找缝合线的方法是基于距离计算的,运算速度自然最快,但是寻找到的缝合线与其他方法对比,缝合线十分粗糙。而动态规划法与最大流检测法相比,虽然速度快了两倍多,但是其精准度显然要次于图割法,质量稍差。因此,在速度相差并不是很大的情况下,选择缝合线质量最好的最大流检测法。

图像融合

得到缝合线之后, 基于缝合线,对图像融合处理,是图像拼接的最后一步。由于待拼接图像之间存在视差、光照、色差以及若干配准偏差等误差的存在,使得待拼接图像在重叠区域会有一定的差异,而图像融合处理可使待拼接图像的重合区域有一个比较自然且平滑的过渡,较大程度地较少重叠区域不连贯的现象以及减少拼接图像重合区域的突兀,可以消除明显的拼接缝隙,使拼接图像看起来更加自然。图像融合常用的方法有加权融合、渐入渐出融合、多频段融合。,原理不再此做赘述。

下面给出实验效果图,


简单融合
简单融合耗费的时间为0.0140秒,可以通过效果图看出,虽然拼接缝不明显,但是中间部分仍有突兀。

对比三幅渐入渐出融合的效果图,其羽化锐度只是一个加权系数,对融合速度并不会造成影响。对两幅原始图像中进行实验,三个羽化锐度参数所对应的融合速度在0.33S~0.36S之间,而其融合效果相差十分明显,羽化锐度越大,线性加权平均效果越好,拼接缝越不明显,图像重合区域的过度看起来更加的自然。实际运用中,通过改变加权系数,找到合适的值,来调整图像重叠区域的平滑过渡,使重叠区域看起来更加自然。


多频段融合时,选用四层金字塔所用的时间为0.0543秒,选用八层金字塔用时0.1041秒,选用16层金字塔用时0.2283秒。对比三幅不同金字塔层数的多频段融合图像,可以发现,金字塔层数越多,即频段分的越多,图像重叠区域过度越自然,融合效果越好,但是耗费的时间随层数翻倍而翻倍。

如果进行图像拼接时,对算法速度要求不高,首先选择多频段融合,并且设置的频段数量尽可能的多,如果对算法速度比较苛刻,不追求极限,优先选择渐入渐出融合,并通过调整加权系数来使重叠区域自然过渡。

双摄像头的实时视频拼接及目标跟踪(一)相关推荐

  1. 双摄像头的实时视频拼接及目标跟踪(七)

    系统实现 本文为CSDN原创文章,转载请注明出处 本文为CSDN原创文章,转载请注明出处 本文为CSDN原创文章,转载请注明出处 邮箱:yi_wei_jian@163.com 作者:Y.W.jian ...

  2. 基于Opencv的简单双摄像头图像实时拼接

    #include"opencv2/opencv.hpp" using namespace cv; 行数相等拼接 同行拼接 Mat comMatR(Mat Matrix1,Mat M ...

  3. 全景视频拼接(二):双摄像头获取视频

    项目要求:利用双摄像头同时采集两个视频,离线拼接,将两个视频拼接成一个视频. 该部分代码实现功能: 利用双摄像头获取视频 #include <iostream> #include < ...

  4. 手机双摄像头原理及产业解析----转载

    这个文章写得很好,特此转载,并致谢! 原文见于: https://blog.csdn.net/piaoxuezhong/article/details/79053974#comments 前记:本篇是 ...

  5. Camera--(7)手机双摄像头原理及产业解析

    本篇是对手机双摄原理及应用现状,未来布局的汇总. 为什么会出现双摄像头手机? 智能手机市场一直都是群雄争霸,竞争非常激烈.随着时代的发展,各大手机厂商的竞争焦点从以前的硬件军备竞赛逐渐延伸到影音娱乐领 ...

  6. 双眼可以测距和建立立体环境,双摄像头可以吗?

    编辑丨3D视觉工坊 点击进入->3D视觉工坊学习交流群 观点一 作者|robot9野生程序猿 https://www.zhihu.com/question/23418797/answer/395 ...

  7. Swin-Transformer又又又下一城 | 看SwinTrack目标跟踪领域独领风骚

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源丨集智书童 作者丨ChaucerG Transformer最近在改进视觉跟踪算法方面显示出强大的潜 ...

  8. P2B: Point-to-Box Network 点云目标跟踪(CVPR 2020)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者: 不知道叫什么好 https://zhuanlan.zhihu.com/p/146512901 ...

  9. ECCV 2020 | 腾讯优图8篇论文入选,涵盖目标跟踪、行人重识别、人脸识别等领域...

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要10分钟 Follow小博主,每天更新前沿干货 来源:腾讯优图 近日,计算机视觉方向的三大国际顶级会议之一的ECCV 2020公布论文获奖结果 ...

最新文章

  1. php 实现联想式 搜索,PHP实现搜索联想功能(基于字典树算法)
  2. python软件是免费的吗-python语言是免费还是收费的?
  3. Android 开关按钮切换,类似于iphone 效果,view实现
  4. C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式类和输入序列类型
  5. 正则不能全为某个值_TensorFlow学习Program1——补充附录(7)线性回归、逻辑回归与正则化...
  6. android 圆角图片
  7. cocos2d 环绕已知点移动一圈
  8. 嵌入式设备带操作系统的启动过程
  9. 休眠面试问答-最终清单
  10. python预测股票价格tushare_用tushare对股票进行简单分析
  11. DOM事件处理有三个阶段
  12. android学习1:初识Activity
  13. python库批量安装的方法
  14. 安卓能硬改的手机机型_这款iPhone手机专属特效AR相机,我真的爱了
  15. NUC11猎豹峡谷设置U盘启动
  16. Ubuntu20.04 美化
  17. matlab m怎么使用,MATLAB的M文件的学习和使用
  18. 读懂西瓜书 14 : 概率图模型
  19. 怎样挑选鱼头 鱼头怎么做好吃
  20. 编写程序求反正弦函数近似值

热门文章

  1. 机器学习----PyTorch入门
  2. 百度地图海量点位渲染造成卡顿问题解决
  3. python中xlrd模块_Python中的xlrd模块使用原理解析
  4. 计算机表格行列知识,计算机基础知识——应用表格.ppt
  5. 3D效果海报怎么制作设计?如何用PS制作出来!
  6. 中泰证券何波:XTP为量化而生!
  7. Android黄油刀插件使用记录
  8. 中国现代书画家——鞠宗霖
  9. 压力引起焦虑竟是因为免疫细胞被“压垮”
  10. unity 使用LineRenderer实现飘带飞舞的效果