全景图概述

每当一个平面图像映射到一个弯曲的表面就会发生图象投影,反之亦然,这中现象特别常见于全景摄影。例如地球的球面可以映射到一块平坦的纸张。由于在我们周围的整个视场的可以被认为是作为球体的表面(对于所有观测角度),我们需要一种能将球形投影到2-D平面以便照片打印的方法。

小的视角相对容易进行形变并投影到平坦的纸上。但是,当试图把一个球形图像映射到一个平面上,有些变形是不可避免的。因此,每一种类型的投影仅仅尝试避免一种类型的失真,这是以牺牲其他失真为代价的。随着视场角增大,观测弧(viewing arc)变得更弯曲,从而全景投影类型之间的差异变得更加显着。什么时候使用那一种投影,在很大程度上取决于每个投影应用。

整个全景拼接的算法流程来说,其实并不算复杂,至少在OpenCV的条件下如此。因为OpenCV自带了很多函数,完全可以搞定很多内容。

1.选图,两张图的重叠区域不能太小,我个人认为最少不少于15%,这样才能保证有足够的角点匹配。

2.角点检测。这一步OpenCV提供了很多种方法,譬如Harris角点检测,而监测出的角点用CvSeq存储,这是一个双向链表。

3.角点提纯。在提纯的时候,需要使用RANSAC提纯。OpenCV自带了一个函数,FindHomography,不但可以提纯,还可以计算出3x3的转换矩阵。这个转换矩阵十分重要。

4.角点匹配。经过提纯后的角点,则需要匹配。

5.图像变换。这一步我曾经尝试过很多办法,最后选择了FindHomography输出的变换矩阵,这是一个透视变换矩阵。经过这个透视变换后的图像,可以直接拿来做拼接。

6.图象拼接。完成上面步骤之后,其实这一步很容易。

7.球面变换。这一步需要对坐标系进行转换,从平面坐标到球面坐标。

OpenCV快速实现全景拼接

最新版的opencv2.4里面有很多新元素。 sTItching module 就是一个非常有用的。 在opencv的例程文件夹里,有一个很好的脚本叫做 sTItching_detailed.cpp. 这个脚本包括了创建全景图的全部过程,包括特征提取,匹配,warp,以及合成。安装好opencv以后,可以简单的通过命令行来测试这个例程:

$ 。/sTItching_detailed Univ*.jpg

这会使用默认参数来创建一个result.jpg的最终文件,来源的图片是以 “Univ”开头的jpg图像。 可以通过help察看一些设置

$ 。/sTItching_detailed --help

例如,可以改变投影的方式,默认是球面投影。 下面的例程用摩卡托投影法:

$ 。/stitching_detailed Univ*.jpg --warp mercator

结果如下:原图像可以在这里找到

360全景拼接 opencv_opencv实现的全景图种类与步骤相关推荐

  1. 360全景拼接 opencv_OpenCV中的全景拼接例程

    使用Stitcher类,通过createDefault()方法创建拼接对象,通过stitch()方法执行默认的自动拼接.自动拼接和07年Brown和Lowe发表的论文描述的步骤基本一致,只不过使用的特 ...

  2. 360全景拍摄教程:鱼眼全景图拍摄方法

    在360全景图片拍摄的过程中,鱼眼镜头起到了至关重要的作用,可以说鱼眼镜头决定了我们拍摄360全景的质量,今天就给大家带来360全景拍摄教程:鱼眼全景图拍摄方法. 鱼眼镜头诞生于1924年,最早称为& ...

  3. 360浏览器怎么添加拓展(有图文步骤)

    步骤 系列文章 前言 1.打开360拓展中心 2.选择要导入的拓展程序文件 3.如果是已经打包的单个文件形式的拓展 .crx文件 总结 系列文章 提示:转到日常小技巧专栏,观看更多内容! 点我直达–& ...

  4. 360全景如何拼接制作?360全景拼接制作教程

    全景720是一种沉浸式效果图,它可以让人们的视角在场景中自由移动.全景场景可以包含热点,通过点击热点来回切换场景.场景还可以包括音乐.视频.声音和其他交互. 720全景也可以通过点击进入.像全景漫游一 ...

  5. 360全景拼接 opencv_GitHub - hellojiawa/AndroidPanoDemo: 使用Opencv全景照片拼接

    主要特点: 合成照片质量可自由设置,可以做到分辨率无损失合成 不需要电脑端后期处理,全部合成动作都在手机上完成 SDK集成步骤简单,体积较小,最后体积大约增加10M左右 不需要联网,完全是本地化合成 ...

  6. ADAS-开源环视360全景拼接代码原理分析与实现(一)

    引言 " 汽车360影像是一项比较先进的技术,它通过多个高清摄像头将车辆的外部环境进行拍摄,并将这些影像进行处理和融合,以生成一张完整的全景图像.这种技术已经被广泛应用于汽车行业,为驾驶员提 ...

  7. 360全景拼接 opencv_【OpenCV】全景拼接

    从OpenCV3.0正式版开始,features2d中的一些接口,搬到附加库xfeatures2d中了,其中就有SIFT.SURF的特征检测方法,但是正常下载安装OpenCV并不包含附加库,因为附加库 ...

  8. VR全景图的制作步骤

    近年来我国的科技发展迅速,人们的生活水平也是逐渐提高,越来越多的新型技术涌入千家万户.VR全景技术也是逐渐的进入到大家的视野当中,生活中不少的娱乐休闲场所都有VR的存在,也有VR的体验.虽然是价格不那 ...

  9. SpringBoot整合opencv实现全景图切割

    SpringBoot整合openCV实现360全景相机拍摄的全景图切割,话不多说,直接上代码 1.获取opencv-452.jar 首先,切割全景图需要使用到openCV的依赖jar,这个jar可以通 ...

最新文章

  1. eclipse关闭mysql数据库,有关于用eclipse连接mysql数据库出现的问题以及解决办法
  2. 漫画:如何辨别二逼互联网公司!?
  3. panel内嵌程序窗体
  4. 高数之差分方程---定义
  5. Java 设计模式之装饰者模式
  6. 程序员工作生活的好帮手,滴答清单,多平台支持
  7. 拦截器 过滤器 监听器 的区别
  8. 广州科目三路考经历与注意事项分享
  9. 如何基于Docker快速搭建Elasticsearch集群?
  10. WordPress建站指南
  11. 公司电脑可以做无盘系统吗?怎么优化速度?
  12. C++编程问题--注意指针参数的传递
  13. Vue 打包静态文件路径设置
  14. 二分查找-----非递归方式
  15. Linux学习笔记(4)
  16. 计算机初级培训 ppt,《计算机初级培训》PPT课件
  17. 颜色表大全 颜色中英文对照表
  18. GBDT+LR算法入门理解
  19. ACM大学生程序设计竞赛在线题库最新精选题解(赵端阳)解析
  20. 如何搜索国外上市企业的财务数据以及年报 1

热门文章

  1. 不同速度的蚂蚁跑圈相遇问题
  2. java8获取以秒单位的时间戳
  3. Win10系统Anaconda下安装TensorFlow、Karas和PyTorch
  4. struct timeval结构体 以及 gettimeofday()函数、struct timespec结构体
  5. 三星android获取root权限,三星S9 G9600 9.0 root教程_获取安卓9.0系统的root权限的方法...
  6. 教你破解Android手机图案锁
  7. JavaWeb知识点总结
  8. 升级IOS9错误解决方案:Unexpected CFBundleExecutable Key.The bundle atXXXX
  9. 通过Guest账号共享XP上的打印机
  10. 东亚期货护航产业稳健发展